liming30 commented on code in PR #20405:
URL: https://github.com/apache/flink/pull/20405#discussion_r940032974


##########
flink-state-backends/flink-statebackend-rocksdb/src/main/java/org/apache/flink/contrib/streaming/state/AbstractRocksDBState.java:
##########
@@ -223,4 +223,27 @@ public StateIncrementalVisitor<K, N, V> 
getStateIncrementalVisitor(
         throw new UnsupportedOperationException(
                 "Global state entry iterator is unsupported for RocksDb 
backend");
     }
+
+    /**
+     * Similar to decimal addition, add 1 to the last digit to calculate the 
upper bound.
+     *
+     * @param prefix the starting prefix for seek.
+     * @return end prefix for seek.
+     */
+    protected final byte[] calculateUpperBound(byte[] prefix) {
+        byte[] upperBound = new byte[prefix.length];
+        System.arraycopy(prefix, 0, upperBound, 0, prefix.length);
+        boolean overFlow = true;
+        for (int i = prefix.length - 1; i >= 0; i--) {
+            int unsignedValue = prefix[i] & 0xff;
+            int result = unsignedValue + 1;
+            upperBound[i] = (byte) (result & 0xff);
+            if (result >> 8 == 0) {
+                overFlow = false;
+                break;
+            }
+        }
+        Preconditions.checkArgument(!overFlow, "The upper boundary 
overflows.");

Review Comment:
   In RocksDB, `seek` is matched by the key prefix, and `0x01FF0` should be 
matched by the prefix of `0x01FF`, not as the ending prefix.
   
   Since the key is regarded as an `unsigned` number in RocksDB, the next 
prefix for 0x7F is 0xFF, and we always use `KeyGroup` as the highest prefix of 
the Key, so the highest bit of the `Key` must be 0.



-- 
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]

Reply via email to