Skip to content

fix(metadata): improvise search#3215

Merged
superhx merged 1 commit intoAutoMQ:mainfrom
manmohak07:manmohak07/optimize-SortedStreamSetObjectsList-v2
Feb 13, 2026
Merged

fix(metadata): improvise search#3215
superhx merged 1 commit intoAutoMQ:mainfrom
manmohak07:manmohak07/optimize-SortedStreamSetObjectsList-v2

Conversation

@manmohak07
Copy link
Copy Markdown
Contributor

@manmohak07 manmohak07 commented Feb 9, 2026

Fixes #3137

Problem

SortedStreamSetObjectsList was using LinkedList with linear scans for insertion and removal operations, leading to performance that degrades as metadata size grows.

Solution

  • Replaced LinkedList with ArrayList to enable O(1) random access required for binary search
  • Implemented binary search using Collections.binarySearch() for insertion, removal, and lookup operations
  • Handled duplicate orderId cases where compareTo() uses orderId but equals() uses objectId

Testing

SortedStreamSetObjectsListTest.java

  • Added testDuplicateOrderIds() - tests multiple objects with same orderId but different objectId
  • Added testRemoveNonExistent() - tests removal of non-existent objects
  • Added testEmptyList() - tests operations on empty list
  • Added testSingleElement() - tests single element add/remove
  • Kept existing testSorted() - validates sorting behavior

All tests pass successfully:

./gradlew :metadata:test --tests SortedStreamSetObjectsListTest

Results

testSorted() - PASSED
testDuplicateOrderIds() - PASSED  
testRemoveNonExistent() - PASSED
testEmptyList() - PASSED
testSingleElement() - PASSED

5 tests completed, 0 failed
BUILD SUCCESSFUL

Also verified no regressions in related tests:

./gradlew :metadata:test --tests "*StreamSetObject*"

Results

All SortedStreamSetObjectsListTest tests - PASSED
S3StreamsMetadataImageTest.testGetObjectsWithFirstStreamSetObject() - PASSED
StreamControlManagerTest.testCommitStreamSetObject_theSameStreamObject() - PASSED
StreamControlManagerTest.testCommitStreamSetObjectBasic() - PASSED
StreamControlManagerTest.testCommitStreamSetObject_compactWithDeletedStream() - PASSED
StreamControlManagerTest.testCommitStreamSetObject_theSameStreamSetObject() - PASSED

9 tests completed, 0 failed
BUILD SUCCESSFUL

@superhx superhx merged commit 1ca02de into AutoMQ:main Feb 13, 2026
6 checks passed
superhx pushed a commit that referenced this pull request Feb 13, 2026
superhx added a commit that referenced this pull request Feb 13, 2026
Co-authored-by: Mohak Agrawal <112922671+manmohak07@users.noreply.github.com>
@manmohak07 manmohak07 deleted the manmohak07/optimize-SortedStreamSetObjectsList-v2 branch March 17, 2026 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement existing TODO: binary search optimization in SortedStreamSetObjectsList

2 participants