-
Notifications
You must be signed in to change notification settings - Fork 716
Description
Overview
This issue tracks the remaining work needed to fully implement the object_store trait in OpenDAL's integration layer. While the core functionality is working, several methods return NotSupported errors and some implementations could be enhanced.
Current Status
✅ Implemented
put_optswith full PutMode support (Overwrite, Create, Update)put_multipart(basic implementation)get_optswith GetOptions support (range, conditionals, version)deletelist,list_with_offset,list_with_delimiterMultipartUploadtrait- Error mapping between OpenDAL and object_store
- Amazon S3 builder support
❌ Not Implemented
The following methods currently return NotSupported errors:
-
put_multipart_opts(store.rs:165)- Required for advanced multipart upload options
- Currently returns: "put_multipart_opts is not implemented so far"
-
copy(store.rs:248)- Server-side copy operation
- Currently returns: "copy is not implemented so far"
-
rename(store.rs:255)- Server-side rename operation
- Currently returns: "rename is not implemented so far"
-
copy_if_not_exists(store.rs:262)- Conditional server-side copy
- Currently returns: "copy_if_not_exists is not implemented so far"
⚠️ Incomplete Implementations
-
PutResult metadata
- Always returns
e_tag: None, version: None - Should return actual ETag and version when available from backend
- Always returns
-
GetResult attributes
- Always returns
Default::default()for attributes - Should include object metadata/attributes from backend
- Always returns
-
Test coverage
- Missing behavior tests for list operations
- No tests for
list_with_delimiterandlist_with_offset
Tasks
High Priority
- Implement
copymethod using OpenDAL's copy operation - Implement
renamemethod using OpenDAL's rename operation - Return proper ETag in
PutResultwhen available - Return proper version in
PutResultwhen backend supports versioning
Medium Priority
- Implement
put_multipart_optswith proper options handling - Implement
copy_if_not_existswith conditional logic - Populate
GetResult.attributeswith object metadata
Low Priority
- Add comprehensive tests for list operations
- Add integration tests with different storage backends
- Document any limitations compared to native object_store implementations
Implementation Notes
-
Copy/Rename Operations: Check if OpenDAL's backend supports native copy/rename. If not, consider fallback to client-side implementation with appropriate warnings.
-
ETag/Version Support: Different backends have varying support for ETags and versioning. Implementation should gracefully handle backends that don't support these features.
-
Attributes Mapping: Need to define how OpenDAL's metadata maps to object_store's attributes.
References
Acceptance Criteria
- All object_store trait methods return meaningful results instead of
NotSupported - Metadata (ETag, version, attributes) is properly populated when available
- Comprehensive test coverage for all implemented methods
- Documentation clearly states any limitations or backend-specific behavior