Comments (2)
@mshonichev thank you again for such a detailed report, I really appreciate it.
For my own reference, here's where the 2400 character limit is described:
I'm glad the second upstream in ansible.cfg
has worked so far.
I'll think on how to address this issue, perhaps with short and long-term options.
Probably the first thing I'm going to change is separating out parts of the collection info into separate properties; at least, the pieces that glactory itself needs. It's not a full solution necessarily in that a single property could still end up > 2400 chars, but that would be an even more extreme edge case. This is a breaking change, but it has an advantage of making native Artifactory searches more useful by adding more individual properties that could be used in searches.
A safe but messy approach is splitting collection info into multiple properties by length, essentially paginating it within the artifactory properties. This would be backward compatible with existing uploaded collections, though it wouldn't fix existing broken collections, which should be ok since they can be deleted and re-uploaded or re-proxied. Feels ugly though...
from galactory.
I did not realise that Galactory uses Artifactory as a search engine aside to storage backend. That's actually pretty cool.
But yeah, if all we need is a lookup by name / version, storing whole blob in props is a bit awkward.
IMO, splitting props to pages is cringe. It adds a whole lot of cases when meta changes - e.g. authors added/removed.
Here, suppose we need to find a collection by its author.
Let's break down backend storage in two layers, first is meta storage layer, second is actual collection tar.gz storage layer.
A first layer might be smth like
_props/
by_author/
j.doe.json
b.nigh.json
....
each individual <author.json>
has props set to author name and email, so we can lookup by jf rt s
query.
And contents of json is a list of collection references, e.g.
[
{
'theforeman.foreman': {'3.15.0': '/actual/path/to/collection/3.15.tar.gz'}
}
]
So, to get the actual archive out of search results you'll need a second query.
It would too hit hard on corner cases to support such a structure, but at least it could be introduced without b/w compatibility break.
Remember, that 'broken' collection with bloated meta was never actually uploaded, so 'broken' props need no fix.
We just start up a whole new life aside, adding a few new search capabilities, and all previously uploaded files need no rehaul.
from galactory.
Related Issues (20)
- internals: "fast detection" for collection iteration doesn't work for non-stable versions
- Direct collection URL (`href` field) is wrong
- Collection publishing doesn't work if the tarball is not base64 encoded
- Consider converting codebase to async
- Implement collection deletion
- Single-source the version
- 500 error on any collection that doesn't exist locally
- Forcing page counts onto upstream URLs broke v2 proxying partially
- Galactory no longer support proxying to galaxy.ansible.com out of the box HOT 4
- The arm64 container build doesn't run the container
- "When specifying '_scheme', '_external' must be True." HOT 9
- Galaxy v2 - upstream response href fields are not rewritten
- Some errors in requests are not retried
- Allow for skipping logging of requests that meet some criteria
- docs: Example config for Artifactory generic remote repository?
- Add open telemetry
- Remove deprecated key/auth options
- Look at using flask-caching
- Support pagination
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from galactory.