feat: add Vector-API support#3079
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adds S3 Vectors (the s3vectors AWS SDK v2 client surface) to S3Mock as an optional feature, implemented as a parallel JSON-based API alongside the existing XML S3 endpoints.
Changes:
- Introduces a new
vectorsSpring profile with controllers/services/stores + DTOs for core S3 Vectors operations. - Adds server + integration-test dependencies and new integration tests using
S3VectorsClient. - Updates docs/changelog/docker exposure to describe and publish the new vectors API.
Reviewed changes
Copilot reviewed 134 out of 134 changed files in this pull request and generated 13 comments.
Show a summary per file
| File | Description |
|---|---|
| server/src/main/resources/application.properties | Adds vectors HTTP/HTTPS port properties. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/VectorsTomcatConnectorsConfiguration.kt | Registers an additional Tomcat connector for vectors HTTP. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/S3VectorsProperties.kt | Defines configuration properties for vectors ports. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/S3VectorsException.kt | Adds vectors-specific exception model + common constants. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorsControllerConfiguration.kt | Registers JSON converter + vectors controllers + vectors exception handlers. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorBucketController.kt | Implements VectorBucket operations (create/get/list/delete). |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorIndexController.kt | Implements Index operations (create/get/list/delete). |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorController.kt | Implements vector CRUD (put/get/list/delete). |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorQueryController.kt | Implements similarity search (QueryVectors). |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorPolicyController.kt | Implements vector bucket policy endpoints. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorTaggingController.kt | Implements tagging endpoints under /tags/**. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/service/VectorsServiceConfiguration.kt | Wires vectors services under the vectors profile. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/service/VectorBucketService.kt | Business logic for vector buckets (validation/ARN handling/pagination). |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/service/VectorIndexService.kt | Business logic for indexes (validation/ARN handling/pagination). |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/service/VectorService.kt | Vector CRUD logic including pagination/segmentation. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/service/VectorArns.kt | ARN helpers for vectors resources. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/store/VectorsStoreConfiguration.kt | Wires vectors stores and vectors root directory under vectors/. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/store/VectorBucketStore.kt | Filesystem persistence for vector bucket metadata/policy/tags. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/store/VectorBucketMetadata.kt | Persistent metadata model for vector buckets. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/store/VectorIndexStore.kt | Filesystem persistence for index metadata + tagging. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/store/VectorIndexMetadata.kt | Persistent metadata model for indexes. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/CreateVectorBucketRequest.kt | DTO for CreateVectorBucket request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/CreateVectorBucketResponse.kt | DTO for CreateVectorBucket response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetVectorBucketRequest.kt | DTO for GetVectorBucket request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetVectorBucketResponse.kt | DTO for GetVectorBucket response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListVectorBucketsRequest.kt | DTO for ListVectorBuckets request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListVectorBucketsResponse.kt | DTO for ListVectorBuckets response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/DeleteVectorBucketRequest.kt | DTO for DeleteVectorBucket request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/CreateIndexRequest.kt | DTO for CreateIndex request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/CreateIndexResponse.kt | DTO for CreateIndex response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetIndexRequest.kt | DTO for GetIndex request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetIndexResponse.kt | DTO for GetIndex response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListIndexesRequest.kt | DTO for ListIndexes request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListIndexesResponse.kt | DTO for ListIndexes response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/DeleteIndexRequest.kt | DTO for DeleteIndex request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/PutVectorsRequest.kt | DTO for PutVectors request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetVectorsRequest.kt | DTO for GetVectors request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetVectorsResponse.kt | DTO for GetVectors response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListVectorsRequest.kt | DTO for ListVectors request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListVectorsResponse.kt | DTO for ListVectors response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/DeleteVectorsRequest.kt | DTO for DeleteVectors request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/QueryVectorsRequest.kt | DTO for QueryVectors request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/QueryVectorsResponse.kt | DTO for QueryVectors response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/PutVectorBucketPolicyRequest.kt | DTO for PutVectorBucketPolicy request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetVectorBucketPolicyRequest.kt | DTO for GetVectorBucketPolicy request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetVectorBucketPolicyResponse.kt | DTO for GetVectorBucketPolicy response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/DeleteVectorBucketPolicyRequest.kt | DTO for DeleteVectorBucketPolicy request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/TagResourceRequest.kt | DTO for TagResource request. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListTagsForResourceResponse.kt | DTO for ListTagsForResource response. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/VectorsErrorResponse.kt | DTO for vectors JSON error responses. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/EncryptionConfiguration.kt | DTO for SSE config. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/MetadataConfiguration.kt | DTO for metadata config. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/VectorBucket.kt | DTO for VectorBucket. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/VectorBucketSummary.kt | DTO summary for ListVectorBuckets. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/VectorIndex.kt | DTO for VectorIndex. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/IndexSummary.kt | DTO summary for ListIndexes. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/VectorData.kt | DTO for tagged-union vector payload. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/PutInputVector.kt | DTO for vectors ingestion item. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/GetOutputVector.kt | DTO for GetVectors output. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/ListOutputVector.kt | DTO for ListVectors output. |
| server/src/main/kotlin/com/adobe/testing/s3mock/vectors/dto/QueryOutputVector.kt | DTO for QueryVectors output. |
| server/src/main/kotlin/com/adobe/testing/s3mock/store/BucketStore.kt | Filters bucket folders missing metadata during listBuckets(). |
| server/src/test/kotlin/com/adobe/testing/s3mock/vectors/store/VectorBucketStoreTest.kt | Store unit tests for vector buckets. |
| server/src/test/kotlin/com/adobe/testing/s3mock/vectors/store/VectorIndexStoreTest.kt | Store unit tests for indexes. |
| server/src/test/kotlin/com/adobe/testing/s3mock/vectors/service/VectorBucketServiceTest.kt | Service unit tests for vector buckets. |
| server/src/test/kotlin/com/adobe/testing/s3mock/vectors/service/VectorIndexServiceTest.kt | Service unit tests for indexes. |
| server/src/test/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorBucketControllerTest.kt | Controller unit tests for vector buckets. |
| server/src/test/kotlin/com/adobe/testing/s3mock/vectors/controller/VectorIndexControllerTest.kt | Controller unit tests for indexes. |
| server/src/test/kotlin/com/adobe/testing/s3mock/vectors/dto/*.kt | DTO serialization/deserialization tests for vectors JSON schema. |
| server/src/test/resources/com/adobe/testing/s3mock/vectors/dto/*.json | Golden JSON fixtures for the DTO tests. |
| integration-tests/src/test/kotlin/com/adobe/testing/s3mock/its/S3TestBase.kt | Adds S3VectorsClient factory + cleanup of vector buckets/indexes. |
| integration-tests/src/test/kotlin/com/adobe/testing/s3mock/its/vectors/VectorBucketIT.kt | Integration tests for vector bucket operations. |
| integration-tests/src/test/kotlin/com/adobe/testing/s3mock/its/vectors/VectorIT.kt | Integration tests for vector CRUD operations. |
| integration-tests/src/test/kotlin/com/adobe/testing/s3mock/its/vectors/VectorQueryIT.kt | Integration tests for QueryVectors behavior. |
| integration-tests/pom.xml | Adds s3vectors test dependency + container ports + activates vectors profile. |
| server/pom.xml | Adds software.amazon.awssdk:s3vectors dependency to server module. |
| docker/Dockerfile | Exposes additional ports for vectors. |
| README.md | Documents vectors feature, ports, configuration, and supported operations. |
| CHANGELOG.md | Announces the new vectors API feature for the next release. |
| INVARIANTS.md | Adds requirement to update README for new API surface/ports/profiles. |
| .agents/skills/document/SKILL.md | Updates documentation skill guidance for new API surface/ports. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
eaeff9d to
805b0aa
Compare
abddd96 to
520b5cd
Compare
47d7fd7 to
04445a4
Compare
04445a4 to
c17d680
Compare
c17d680 to
81babbc
Compare
81babbc to
f283947
Compare
f283947 to
2c698bc
Compare
a5db8a2 to
b7bff28
Compare
Comment on lines
+94
to
+98
| val lockKey = lockKey(bucketName, indexName, key) | ||
| synchronized(lockStore[lockKey]!!) { | ||
| getVectorDir(bucketName, indexName, key).deleteRecursively() | ||
| lockStore.remove(lockKey) | ||
| } |
This was mostly implemented using Claude with human guidance. fixes #3047
b7bff28 to
70e729f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Related Issue
fixes #3047
Motivation and Context
How Has This Been Tested?
Screenshots (if appropriate):
Types of changes
Checklist: