sashapolo commented on code in PR #5684:
URL: https://github.com/apache/ignite-3/pull/5684#discussion_r2058492309
##########
modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/KeyValueStorageUtils.java:
##########
@@ -43,14 +43,20 @@ public static int indexToCompact(long[] keyRevisions, long
compactionRevisionInc
int i = binarySearch(keyRevisions, compactionRevisionInclusive);
if (i < 0) {
- if (i == -1) {
+ i = ~i;
+
+ if (i == 0) {
return NOT_FOUND;
}
- i = -(i + 2);
+ i--;
}
- if (i == keyRevisions.length - 1 &&
!isTombstone.test(keyRevisions[i])) {
+ if (!isTombstone.test(keyRevisions[i])) {
+ if (i != keyRevisions.length - 1 && keyRevisions[i + 1] ==
compactionRevisionInclusive + 1) {
Review Comment:
Please add some comments about this condition
##########
modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/server/AbstractCompactionKeyValueStorageTest.java:
##########
@@ -510,6 +510,18 @@ void testGetSingleEntryAndCompactionForFooKey() {
assertDoesNotThrowCompactedExceptionForGetSingleValue(FOO_KEY, 5);
}
+ @Test
+ void testDoNotCompactOnExactMatch() {
Review Comment:
So we actually do not want to compact on exact match? Should we update the
javadoc?
##########
modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/KeyValueStorageUtils.java:
##########
@@ -43,14 +43,20 @@ public static int indexToCompact(long[] keyRevisions, long
compactionRevisionInc
int i = binarySearch(keyRevisions, compactionRevisionInclusive);
if (i < 0) {
- if (i == -1) {
+ i = ~i;
+
+ if (i == 0) {
return NOT_FOUND;
}
- i = -(i + 2);
+ i--;
}
- if (i == keyRevisions.length - 1 &&
!isTombstone.test(keyRevisions[i])) {
+ if (!isTombstone.test(keyRevisions[i])) {
Review Comment:
I would propose to invert this condition, this will make the code more
readable
##########
modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/server/AbstractCompactionKeyValueStorageTest.java:
##########
@@ -157,7 +157,7 @@ public void tearDown() throws Exception {
void testCompactRevision1() {
storage.compact(1);
- assertEquals(List.of(3, 5), collectRevisions(FOO_KEY));
+ assertEquals(List.of(1, 3, 5), collectRevisions(FOO_KEY));
Review Comment:
`compact` method's javadoc says:
```
@param revision Revision up to which (including) the metastorage keys will
be compacted
```
Why do we have the `1` revision here? And why doesn't `BAR_KEY` have this
revision?
##########
modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/KeyValueStorageUtils.java:
##########
@@ -43,14 +43,20 @@ public static int indexToCompact(long[] keyRevisions, long
compactionRevisionInc
int i = binarySearch(keyRevisions, compactionRevisionInclusive);
if (i < 0) {
- if (i == -1) {
+ i = ~i;
+
+ if (i == 0) {
return NOT_FOUND;
}
- i = -(i + 2);
+ i--;
}
- if (i == keyRevisions.length - 1 &&
!isTombstone.test(keyRevisions[i])) {
+ if (!isTombstone.test(keyRevisions[i])) {
Review Comment:
Also, if `keyRevisions[i]` is a tombstone, but the
`compactionRevisionInclusive` was not found in the keyRevisions array, then we
would return the index of the first element that is greater
`compactionRevisionInclusive`. Doesn't it look strange to you?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]