Commit graph

1698 commits

Author SHA1 Message Date
Joseph Schorr
7c241a93f6 Allow namespaces to be whitelisted for OCI, but not V22 2019-01-21 14:40:26 -05:00
Joseph Schorr
570d974067 Add support for retargeting a tag to all schema 1 manifests
Schema version 1 manifests contain the tag name, and we have a check to ensure we don't point a tag at a manifest with the wrong name embedded. However, this also means that we cannot retarget to that manifest, which will break the UI once we get rid of legacy images.

This change means we can retarget to those manifests, and the OCI model does the work of rewriting the manifest when necessary.
2019-01-15 16:00:06 -05:00
Joseph Schorr
fe45797490 Optimize the list active tags query
Some customers are hitting this endpoint rapidly for repositories with many, many tags. This change drops the unnecessary joins, which should reduce database load somewhat.
2019-01-14 13:34:25 -05:00
Joseph Schorr
eb9ca8e8a8 Fix handling of four byte utf8 manifests
- Adds the charset: utf-8 to all the manifest responses
- Makes sure we connect to MySQL in utf8mb4 mode, to ensure we can properly read and write 4-byte utf8 strings
- Adds tests for all of the above
2019-01-10 16:34:56 -05:00
Joseph Schorr
b1dd053b02 Fix an NPE when trying to pull a manifest without a legacy image via V1 2019-01-10 13:59:35 -05:00
Joseph Schorr
171c7e5238 Further fixes for unicode handling in manifests
We were occasionally trying to compute schema 2 version 1 signatures on the *unicode* representation, which was failing the signature check. This PR adds a new wrapper type called `Bytes`, which all manifests must take in, and which handles the unicodes vs encoded utf-8 stuff in a central location. This PR also adds a test for the manifest that was breaking in production.
2019-01-09 15:14:41 -05:00
Joseph Schorr
b7b64d84d3 Disable verification of schemas temporarily while we determine why some older schemas don't validate 2019-01-08 14:25:35 -05:00
Joseph Schorr
c510759df3 Remove the foreign key constraint from the kind field on the logentry3 table 2019-01-04 13:35:14 -05:00
Joseph Schorr
e309508776 Change lookup of blobs to not use a subquery, which is murder on MySQL 2019-01-03 15:41:21 -05:00
Joseph Schorr
cdb49dbfd3 Add LogEntry3 table without the extra indexes and switch to writing to it 2019-01-03 13:50:43 -05:00
Joseph Schorr
b6db002729 Fix references to LogEntry model used and add support for a maximum page of results on the logs API 2019-01-02 16:04:15 -05:00
Joseph Schorr
4ba4d9141b Put user last accessed updating behind a feature flag 2019-01-02 16:04:15 -05:00
Joseph Schorr
a6b5b4d6e3 Switch to writing logs to LogEntry2 table 2019-01-02 16:04:15 -05:00
Joseph Schorr
58d7dd07b9 Revert the changes to drop LogEntry2 table definition 2019-01-02 13:29:35 -05:00
Joseph Schorr
442312402f
Merge pull request #3299 from quay/joseph.schorr/QUAY-1233/batch-logs-download
Batch download of logs
2018-12-19 15:38:22 -05:00
Joseph Schorr
9190c046c7 Remove unusable sitemap endpoint
It calls a data model method which is extremely slow and heavy, and it isn't even used anyway
2018-12-18 16:37:09 -05:00
Joseph Schorr
8a212728a3 Implement a worker for batch exporting of usage logs
This will allow customers to request their usage logs for a repository or an entire namespace, and we can export the logs in a manner that doesn't absolutely destroy the database, with every step along the way timed.
2018-12-18 15:33:03 -05:00
Joseph Schorr
9e2c5417b8
Merge pull request #3310 from quay/joseph.schorr/QUAY-1235/drop-logentry2
Remove all references to LogEntry2 from the code
2018-12-18 15:18:22 -05:00
Joseph Schorr
fc691cefb4
Merge pull request #3306 from quay/fix-manifest-ui
Fix manifest UI page to properly show the layers of manifests and show manifest lists
2018-12-11 16:53:36 -05:00
Joseph Schorr
6a94eba1a2 Remove all references to LogEntry2 from the code
The migration to actually drop the table will go in after this code has been pushed to production
2018-12-11 15:54:16 -05:00
Joseph Schorr
a9b8586423 Make sure list_manifest_layers is not callable for manifest lists 2018-12-11 13:10:24 -05:00
Joseph Schorr
7fa60d5802 Fix manifest UI display for manifests with empty layers
Also fixes the command for schema 2 manifests
2018-12-10 17:10:54 -05:00
Joseph Schorr
eb7591183d Add a tag backfill worker to fully backfill the new-style Tag's in the background 2018-12-10 15:36:25 -05:00
Joseph Schorr
4106f5ce51 Fix manifest UI page to properly show the layers of manifests and show manifest lists 2018-12-10 15:33:59 -05:00
Joseph Schorr
3c2e050593 Support pulling of schema2 manifests directly via a manifest list tag
This change ensures that if a manifest list is requested with an accepts header for a *schema 2* manifest, the legacy manifest (if any) is returned as schema 2 if it was pushed as a schema 2 manifest (rather than being auto-converted to schema 1)
2018-12-07 11:57:13 -05:00
Joseph Schorr
c3710a6a5e Add ability for specific geographic regions to be blocked from pulling images within a namespace 2018-12-06 17:14:45 -05:00
Joseph Schorr
d59bea3569 Enable a configurable whitelist of namespaces for V22
If a namespace is present in the whitelist, all calls are sent to the OCI model instead of the Pre OCI model

Note that this does increase overhead for registry calls (since we need to lookup the namespace for every single call), but it should only be temporary until we've migrated all users over to the OCI data model
2018-12-03 17:37:28 -05:00
Joseph Schorr
492934de3c Remove redundant call 2018-11-27 18:44:34 +02:00
Joseph Schorr
4e1ff90cb2 Unify the get_layers calls across all implements of manifest schemas to ensure we have a common type returned
Also renames some methods to make it more clear what kind of information they return
2018-11-26 17:58:48 +02:00
Joseph Schorr
180d8847db Fix image replication for images with remote layers 2018-11-26 16:15:48 +02:00
Joseph Schorr
adccdd30ca Read blobs from new manifest blob table where relevant 2018-11-25 17:31:09 +02:00
Joseph Schorr
4985040d31 Properly handle the empty layer when pushing schema 2 manifests
Docker doesn't send us the contents of this layer, so we are forced to synthesize it ourselves
2018-11-25 16:16:59 +02:00
Joseph Schorr
ffd567e2c2 Rename accessed items in the data model 2018-11-21 18:06:16 +02:00
Joseph Schorr
1f03fdb27e Fix pulling of squashed versions of the legacy image in a manifest lists 2018-11-20 16:37:15 +02:00
Joseph Schorr
001768c043 Make security status for manifests without legacy images more clear in the UI 2018-11-20 16:37:15 +02:00
Joseph Schorr
e972e4088b Fix lookup of manifests referenced solely by a manifest list
We need to ensure we can find them if there is an active tag pointing to the parent list
2018-11-19 23:31:41 +02:00
Joseph Schorr
54904cfd6e Fix bug around pushing manifest lists that refer to the same manifest twice as children 2018-11-19 18:26:22 +02:00
Joseph Schorr
e6c2ddfa93 Add support for direct pushing of schema 2 manifests without tags
This is required for manifest lists
2018-11-19 14:01:41 +02:00
Joseph Schorr
8a3427e55a Change registry data model to use a content retriever where applicable 2018-11-19 14:01:41 +02:00
Joseph Schorr
82ee21bfbd Change OCI data model to use a content retriever for the various manifest operations 2018-11-19 12:24:04 +02:00
Joseph Schorr
1eaf5b18dd Adjustments based on code review feedback 2018-11-15 13:51:48 +02:00
Joseph Schorr
c46b11bac1 Implement UI support for manifest lists 2018-11-14 18:40:57 +02:00
Joseph Schorr
276d0d571d Fix support for pulling manifest lists via Docker V1 protocol where applicable 2018-11-14 14:05:06 +02:00
Joseph Schorr
37b20010aa Add support for pushing and pulling schema 2 manifests with remote layers
This is required for windows image support
2018-11-14 13:21:50 +02:00
Joseph Schorr
d97055e2ba Code review fixes 2018-11-14 09:15:58 +02:00
Joseph Schorr
7a794e29c0 Add tests for manifest lists and fix some issues encountered while testing 2018-11-13 21:03:20 +02:00
Joseph Schorr
9994f0ae61 Disable GC for repositories with manifest lists
This is a temporary measure so we can roll V2_2 out for internal customer testing without having to worry about GC interacting oddly with it
2018-11-13 21:03:20 +02:00
Joseph Schorr
7b9f56eff3 Fixes to ensuring existing code can process schema 2 manifests 2018-11-13 17:13:51 +02:00
Joseph Schorr
9474fb7833 Fix bug with json.dumps changing the order of keys
We write the literal received JSON string into the image data, to ensure the checksums computed will always match
2018-11-13 16:50:13 +02:00
Joseph Schorr
849e613386 Implement support for schema 2 manifests 2018-11-13 11:49:12 +02:00
Joseph Schorr
d77d383e46 Add schema2 media types 2018-11-13 09:24:04 +02:00
Joseph Schorr
30f072aeff Add support for creating schema 2 manifests and manifest lists via the OCI model 2018-11-12 23:27:49 +02:00
Joseph Schorr
6b86b87a16
Merge pull request #3290 from quay/joseph.schorr/QUAY-1124/implement-new-data-model
Implement the new OCI-based registry data model
2018-11-08 13:39:29 -05:00
Joseph Schorr
fdcb8bad23 Implement the new OCI-based registry data model
Note that this change does *not* enable the new data model by default, but does allow it to be used when a special environment variable is specified.
2018-11-07 22:07:58 -05:00
Joseph Schorr
3e63b08731
Merge pull request #3288 from quay/faster-gc
Change garbage collection queries to be far smaller by GCing per tag and per image
2018-11-07 14:35:38 -05:00
Joseph Schorr
5124422332 Change garbage collection queries to be far smaller by GCing per tag and per image
While this will require far more iterations and queries, each query itself will be quite small, thus preventing us from locking up the database
2018-11-07 00:50:34 -05:00
Joseph Schorr
5b089653d1 Add an extra check in garbage collection to ensure we don't delete manifests referenced by other new-style tags 2018-11-02 15:56:18 -04:00
Joseph Schorr
4779e05f55 Fix NPE in changing the expiration of a tag 2018-11-02 14:54:13 -04:00
Joseph Schorr
0c83e1272b Switch Tag name field back to ASCII
Because we run MySQL 5.6 in production, making this field a utf-8 went outside the 767 byte max size for indexes on the `tag_repository_id_name_lifetime_end_ms` index.
2018-11-02 14:35:39 -04:00
Joseph Schorr
e8ed43b46f Fix name of reversion field in new Tag table and add a test 2018-11-01 17:59:10 -04:00
Joseph Schorr
114e2c3bf2 Have all tag code add, modify and delete both old and new style tags
This preps us for being able to use the new data model with existing repositories
2018-11-01 17:59:10 -04:00
Joseph Schorr
36db133b86 Pull out common shared code in the data model interface 2018-11-01 17:59:10 -04:00
Joseph Schorr
c0653ef2ad Add Tag, TagKind and ManifestChild tables in prep for new data model 2018-11-01 17:59:09 -04:00
Joseph Schorr
053d918d67 Rename pre oci model tests in preparation for the new model (the tests will be applicable to both models) 2018-11-01 17:59:09 -04:00
Joseph Schorr
366bddd20a Fix NPE bug in torrentinfo set call
Fixes https://sentry.io/coreos/backend-production/issues/747494304
2018-10-30 16:47:59 -04:00
Joseph Schorr
88f19ee0b9 Make blob upload errors more specific 2018-10-29 12:21:18 -04:00
Joseph Schorr
4a7b4ad06a Fix disabled namespace check 2018-10-18 14:25:40 -04:00
Joseph Schorr
cbf0edb164 Address remaining usage of the old data interface 2018-10-18 14:25:40 -04:00
Joseph Schorr
e91ba98e1b Convert V2's tag endpoints to use the new data model interface 2018-10-18 14:25:40 -04:00
Joseph Schorr
6b5064aba4 Convert V2's manifest endpoints to use the new data model interface 2018-10-18 14:25:40 -04:00
Joseph Schorr
a172de4fdc Reimplement cache support for blobs in the registry data model 2018-10-18 14:25:40 -04:00
Joseph Schorr
7a68c41f1c Convert V2 to use the blob uploader interface 2018-10-18 14:25:40 -04:00
Joseph Schorr
0ae062be62 Add manifest creation to new registry data model interface 2018-10-18 14:25:39 -04:00
Joseph Schorr
818ed32f87 Add function in data interface for mounting blobs into other repositories 2018-10-18 14:25:39 -04:00
Joseph Schorr
03789b2210 Add interface for batch creation of labels on a manifest
This cannot be a true batch operation right now because of the current mapping table entries needed, but we can create and use the interface now and change the underlying implementation later
2018-10-18 14:25:39 -04:00
Joseph Schorr
8cfb3f4fe8 Add interface function for deleting tags pointing to a manifest 2018-10-18 14:25:39 -04:00
Joseph Schorr
0f1d415c49
Merge pull request #3263 from quay/new-tier
Add new 2000 repo pricing tier
2018-10-02 22:44:29 -04:00
Joseph Schorr
4520f9e842 Change V1 to use the manifest builder and new registry data model 2018-09-28 17:30:04 -04:00
Joseph Schorr
65d5be23c7 Implement a manifest builder, to allow for easier management of state around constructing manifests 2018-09-28 15:52:43 -04:00
Joseph Schorr
91afeefebe Add new 2000 repo pricing tier 2018-09-28 15:42:57 -04:00
Joseph Schorr
468e5a8fc2
Merge pull request #3250 from quay/joseph.schorr/QUAY-1030/interfacing-part-9
Implement blob uploader and change V1 to use it
2018-09-24 16:03:41 -04:00
Joseph Schorr
ba39737c3a Add blob uploader helper class, for easy management of all the state associated with uploading blobs 2018-09-24 12:54:56 -04:00
Joseph Schorr
5d2fe535b4 Add ability to commit blob uploads into blobs 2018-09-14 17:15:25 -04:00
Joseph Schorr
f68fbb8028 Add blob upload to new registry data model 2018-09-14 17:15:25 -04:00
Joseph Schorr
1bbe41bb36 Add blob support to get_legacy_image 2018-09-14 17:15:24 -04:00
Kenny Lee Sin Cheong
8e643ce5d9
Repository endpoint tags pagination (#3238)
* endpoint/api/repository: limit the number of tags returned

- Limit the number of tags returned by /api/v1/repository/<ns:repo> to 500.
- Uses the tag history endpoint instead, with an active tag filte.
- Update UI to use tag history endpoint instead.
2018-09-14 15:30:54 -04:00
Joseph Schorr
a4f1475de4
Merge pull request #3234 from quay/joseph.schorr/QUAY-1030/interfacing-part-8
Change verbs endpoint to use the new registry data model interface
2018-09-13 12:50:02 -04:00
Joseph Schorr
f252b0b16f Move verbs endpoint to use new registry data model 2018-08-29 16:38:54 -04:00
Joseph Schorr
6c5c2f1a75 Add new methods to registry data model interface in prep for moving verbs to using it 2018-08-29 16:38:54 -04:00
Joseph Schorr
ce61ec6668 Fix bug where GC attempts to delete manifests that are shared by multiple tag manifests
Also adds a test for this case

All of this will be moot once we get rid of tag manifests, but for now, its causing exceptions
2018-08-29 11:11:52 -04:00
Joseph Schorr
70e233ab5c Disallow access in the new registry model to hidden tags
This was causing problems with certain build cache pulls
2018-08-28 13:34:58 -04:00
Joseph Schorr
581ec47798 Handle the cases where an existing tag manifest or manifest has already been created 2018-08-27 15:02:03 -04:00
Joseph Schorr
f297249100 Move manifest backfill for V1 tags into the new registry model interface 2018-08-27 15:01:27 -04:00
Joseph Schorr
55afa2ca08 Reverting a tag doesn't mean it always has an existing image, so remove that check 2018-08-27 12:52:27 -04:00
Sam Chow
a40e1e939a Merge branch 'master' into delete-setup-page 2018-08-27 11:26:51 -04:00
Joseph Schorr
a96c5a7f64 Optimize the new registry data model to avoid unnecessary queries 2018-08-24 11:25:24 -04:00
Joseph Schorr
46edebe6b0 Change secscan API endpoints to use new registry model interface 2018-08-23 16:36:04 -04:00
Sam Chow
cd6b0a6f46 Merge branch 'master' into delete-setup-page 2018-08-23 12:46:08 -04:00
Joseph Schorr
8225c61a1f Implement tag functions in new registry model interface 2018-08-22 18:03:57 -04:00
Joseph Schorr
a0a6a3d67d Change manifest API endpoints to use new registry data interface 2018-08-21 17:26:32 -04:00