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


##########
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:
   I think you're right with the example of changing parallelism from 1 to 2 at 
the max parallelism of 128.
   
   From my point of view, code blow looks easier to understand: the wrong case 
of increasing the byte array by 1 is that the current prefix byte array is 
`0xff` with a single byte or `0xffff` with two bytes:
   ~~~java
       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--) {
               upperBound[i] = (byte) (prefix[i] + 1);
               if (prefix[i] != (byte) 0xff) {
                   overFlow = false;
                   break;
               }
           }
           Preconditions.checkArgument(!overFlow, "The upper boundary 
overflows.");
           return upperBound;
       }
   ~~~
   



-- 
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: issues-unsubscr...@flink.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to