tzulitai commented on a change in pull request #6467: [FLINK-9887] Ensure 
serializer upgrades work with timer service remake
URL: https://github.com/apache/flink/pull/6467#discussion_r207165014
 
 

 ##########
 File path: 
flink-state-backends/flink-statebackend-rocksdb/src/main/java/org/apache/flink/contrib/streaming/state/RocksDBKeyedStateBackend.java
 ##########
 @@ -2668,23 +2668,54 @@ public static RocksIteratorWrapper getRocksIterator(
                        @Nonnull String stateName,
                        @Nonnull TypeSerializer<T> 
byteOrderedElementSerializer) {
 
-                       final PriorityComparator<T> priorityComparator =
-                               
PriorityComparator.forPriorityComparableObjects();
-
-                       Tuple2<ColumnFamilyHandle, RegisteredStateMetaInfoBase> 
entry =
+                       Tuple2<ColumnFamilyHandle, RegisteredStateMetaInfoBase> 
metaInfoTuple =
                                kvStateInformation.get(stateName);
 
-                       if (entry == null) {
+                       if (metaInfoTuple == null) {
+                               final ColumnFamilyHandle columnFamilyHandle = 
createColumnFamily(stateName);
+
                                RegisteredPriorityQueueStateBackendMetaInfo<T> 
metaInfo =
                                        new 
RegisteredPriorityQueueStateBackendMetaInfo<>(stateName, 
byteOrderedElementSerializer);
 
-                               final ColumnFamilyHandle columnFamilyHandle = 
createColumnFamily(stateName);
+                               metaInfoTuple = new 
Tuple2<>(columnFamilyHandle, metaInfo);
+                               kvStateInformation.put(stateName, 
metaInfoTuple);
+                       } else {
+                               // TODO we implement the simple way of 
supporting the current functionality, mimicking keyed state
+                               // because this should be reworked in 
FLINK-9376 and then we should have a common algorithm over
+                               // StateMetaInfoSnapshot that avoids this code 
duplication.
+                               StateMetaInfoSnapshot restoredMetaInfoSnapshot 
= restoredKvStateMetaInfos.get(stateName);
+
+                               Preconditions.checkState(
+                                       restoredMetaInfoSnapshot != null,
+                                       "Requested to check compatibility of a 
restored RegisteredKeyedBackendStateMetaInfo," +
+                                               " but its corresponding 
restored snapshot cannot be found.");
+
+                               StateMetaInfoSnapshot.CommonSerializerKeys 
serializerKey =
+                                       
StateMetaInfoSnapshot.CommonSerializerKeys.VALUE_SERIALIZER;
+
+                               TypeSerializer<?> metaInfoTypeSerializer = 
restoredMetaInfoSnapshot.getTypeSerializer(serializerKey);
+
+                               if (metaInfoTypeSerializer != 
byteOrderedElementSerializer) {
+                                       CompatibilityResult<T> 
compatibilityResult = CompatibilityUtil.resolveCompatibilityResult(
+                                               metaInfoTypeSerializer,
+                                               null,
+                                               
restoredMetaInfoSnapshot.getTypeSerializerConfigSnapshot(serializerKey),
+                                               byteOrderedElementSerializer);
+
+                                       if 
(compatibilityResult.isRequiresMigration()) {
+                                               throw new FlinkRuntimeException(
+                                                       new 
StateMigrationException("Migration is currently not supported."));
 
 Review comment:
   nit: `"State migreation is currently not supported!"` just for the sake of 
consistency.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to