Add DefaultStorageBackendFactory and MockHBaseStorageBackend#192
Merged
Conversation
Introduce StorageBackend interface and supporting types as the foundation for a pluggable storage layer, with an in-memory implementation for testing. New types: - StorageBackend: Interface for storage backend implementations - StorageBucket: Interface for key-value operations (get, put, delete, scan, etc.) - StorageBuckets: Data class holding edge and lock buckets - DatastoreUri: Utility for parsing datastore:// URIs with input validation - MemoryStorageBucket: In-memory StorageBucket backed by ByteArrayStore - MemoryStorageBackend: In-memory StorageBackend with isolated stores per namespace Tests: - DatastoreUriTest: URI parsing and validation - StorageBucketCompatibilityTest: Abstract test suite for StorageBucket contracts - MemoryStorageBucketCompatibilityTest: Memory implementation passes all contracts - MemoryStorageBackendTest: Backend-level isolation and lifecycle tests Part of #173 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 tasks
…eTables - StorageBucket → StorageTable (matches table semantics: scan, get, put) - StorageBuckets removed (edge/lock distinction is legacy, unused) - StorageBackend.getBucket() → StorageBackend.open() → Mono<StorageTable> - MemoryStorageBucket → MemoryStorageTable Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add HBase-specific StorageBackend implementation and a factory for creating storage backends based on configuration. New types: - HBaseStorageBucket: StorageBucket backed by HBase AsyncTable - HBaseStorageBackend: StorageBackend for HBase clusters with Kerberos support - MockHBaseStorageBackend: Mock HBase backend using MockHTable for testing - DefaultStorageBackendFactory: Factory for creating backends (memory/embedded/hbase) Test fixtures: - HBaseTestingStorageBackend: Backend using HBase testing cluster - HBaseTestingClusterExtension: Updated to initialize DefaultStorageBackendFactory Tests: - HBaseStorageBucketCompatibilityTest: HBase impl passes StorageBucket contract - HBaseStorageBackendTest: Validation of create() parameters - DefaultStorageBackendFactoryTest: Factory initialization and lifecycle Part of #173 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Align HBase implementation with the renamed StorageTable interface. - HBaseStorageBucket → HBaseStorageTable - getBucket() → open() across all StorageBackend implementations - Remove StorageBuckets references (edge/lock distinction was unused) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
43f576c to
7c70670
Compare
open() implies close() semantics. getStorageTable() is more explicit about what it does. URI overload becomes a default method. Removed deprecated getTable() methods from interface. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Removes uppercase letters and hyphens from allowed characters in datastore URI namespace and table names. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Align HBase implementations with updated StorageBackend interface. Remove deprecated getTable() methods and URI overloads (now default). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…bjectSource - Rename package v2.engine.storage → engine.storage for new files - Convert DatastoreUriTest to @ObjectSource (valid/invalid URI cases) - Convert MemoryStorageBackendTest to @ObjectSource (getStorageTable cases) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…bjectSource - Rename package v2.engine.storage → engine.storage for new files - Convert HBaseStorageBackendTest to @ObjectSource (validation cases) - Update all imports for package move Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 tasks
…hbase # Conflicts: # engine/src/main/kotlin/com/kakao/actionbase/engine/storage/hbase/HBaseStorageBackend.kt # engine/src/main/kotlin/com/kakao/actionbase/engine/storage/hbase/HBaseStorageTable.kt
Contributor
Author
DefaultHBaseCluster → DefaultStorageBackendFactory + HBaseStorageBackendSplits
Key change: mock branching, connection management, and table access — previously all in one class — are now separated into Factory / Backend / StorageTable. Interface-based design allows |
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.
Summary
DefaultStorageBackendFactory— createsStorageBackendinstances fromDatastoreUri(dispatches to Memory or HBase)MockHBaseStorageBackend— lightweight mock for tests without HBase clusterHBaseTestingStorageBackend— test fixture bridgingStorageBackendtoHBaseTestingClusterExtensionHBaseTestingClusterExtension— addgetStorageBackend()for new storage abstractionStorage backend series: PR #191 (merged) → PR #194 (merged) → this PR
Changed files
DefaultStorageBackendFactory.ktMockHBaseStorageBackend.ktDefaultStorageBackendFactoryTest.ktHBaseTestingStorageBackend.kt(testFixtures)HBaseTestingClusterExtension.kt(testFixtures)Test plan
./gradlew :engine:buildpasses🤖 Generated with Claude Code