diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/OMDBUpdatesHandler.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/OMDBUpdatesHandler.java index 4da3a78d185a..4ee08863c691 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/OMDBUpdatesHandler.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/OMDBUpdatesHandler.java @@ -50,7 +50,7 @@ public class OMDBUpdatesHandler extends ManagedWriteBatch.Handler { private CodecRegistry codecRegistry; private OMMetadataManager omMetadataManager; private List omdbUpdateEvents = new ArrayList<>(); - private Map omdbLatestUpdateEvents + private Map omdbLatestUpdateEvents = new HashMap<>(); private OMDBDefinition omdbDefinition; @@ -93,6 +93,15 @@ private void processEvent(int cfIndex, byte[] keyBytes, byte[] valueBytes, OMDBUpdateEvent.OMDBUpdateAction action) throws IOException { String tableName = tablesNames.get(cfIndex); + // DTOKEN_TABLE is using OzoneTokenIdentifier as key instead of String + // and assuming to typecast as String while de-serializing will throw error. + // omdbLatestUpdateEvents defines map key as String type to store in its map + // and to change to Object as key will have larger impact considering all + // ReconOmTasks. Currently, this table is not needed to sync in Recon OM DB + // snapshot as this table data not being used currently in Recon. + // When this table data will be needed, all events for this table will be + // saved using Object as key and new task will also retrieve using Object + // as key. Optional keyType = omdbDefinition.getKeyType(tableName); Optional valueType = omdbDefinition.getValueType(tableName); if (keyType.isPresent() && valueType.isPresent()) { @@ -100,7 +109,7 @@ private void processEvent(int cfIndex, byte[] keyBytes, byte[] new OMDBUpdateEvent.OMUpdateEventBuilder<>(); builder.setTable(tableName); builder.setAction(action); - String key = (String) codecRegistry.asObject(keyBytes, keyType.get()); + Object key = codecRegistry.asObject(keyBytes, keyType.get()); builder.setKey(key); // Put new @@ -114,7 +123,7 @@ private void processEvent(int cfIndex, byte[] keyBytes, byte[] if (latestEvent != null) { oldValue = latestEvent.getValue(); } else { - // Recon does not add entries to cache and it is safer to always use + // Recon does not add entries to cache, and it is safer to always use // getSkipCache in Recon. oldValue = table.getSkipCache(key); } diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOMDBUpdatesHandler.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOMDBUpdatesHandler.java index 2e276c3c654e..5227cd42777c 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOMDBUpdatesHandler.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestOMDBUpdatesHandler.java @@ -38,6 +38,7 @@ import org.apache.hadoop.hdds.server.ServerUtils; import org.apache.hadoop.hdds.utils.db.RocksDatabase; import org.apache.hadoop.hdds.utils.db.managed.ManagedTransactionLogIterator; +import org.apache.hadoop.io.Text; import org.apache.hadoop.ozone.om.OMMetadataManager; import org.apache.hadoop.ozone.om.OmMetadataManagerImpl; import org.apache.hadoop.ozone.om.codec.OMDBDefinition; @@ -112,11 +113,20 @@ public void testPut() throws Exception { reconOmMetadataManager.getKeyTable(getBucketLayout()) .put("/sampleVol/bucketOne/key_two", secondKey); + + Text tester = new Text("tester"); + OzoneTokenIdentifier identifier = + new OzoneTokenIdentifier(tester, tester, tester); + identifier.setOmCertSerialId("certID"); + identifier.setOmServiceId(""); + + omMetadataManager.getDelegationTokenTable().put(identifier, 12345L); + List writeBatches = getBytesFromOmMetaManager(0); OMDBUpdatesHandler omdbUpdatesHandler = captureEvents(writeBatches); List events = omdbUpdatesHandler.getEvents(); - assertEquals(3, events.size()); + assertEquals(4, events.size()); OMDBUpdateEvent volEvent = events.get(0); assertEquals(PUT, volEvent.getAction());