This is an automated email from the ASF dual-hosted git repository.
sammichen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 59938f90bf HDDS-7455. ClassCastException: OzoneTokenIdentifier cannot
be cast to String (#4159)
59938f90bf is described below
commit 59938f90bf035dde1285294d4103a49fb0840a8a
Author: devmadhuu <[email protected]>
AuthorDate: Mon Jan 16 19:56:07 2023 +0530
HDDS-7455. ClassCastException: OzoneTokenIdentifier cannot be cast to
String (#4159)
---
.../hadoop/ozone/recon/tasks/OMDBUpdatesHandler.java | 15 ++++++++++++---
.../hadoop/ozone/recon/tasks/TestOMDBUpdatesHandler.java | 12 +++++++++++-
2 files changed, 23 insertions(+), 4 deletions(-)
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 4da3a78d18..4ee08863c6 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<OMDBUpdateEvent> omdbUpdateEvents = new ArrayList<>();
- private Map<String, OMDBUpdateEvent> omdbLatestUpdateEvents
+ private Map<Object, OMDBUpdateEvent> omdbLatestUpdateEvents
= new HashMap<>();
private OMDBDefinition omdbDefinition;
@@ -93,6 +93,15 @@ public class OMDBUpdatesHandler extends
ManagedWriteBatch.Handler {
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<Class> keyType = omdbDefinition.getKeyType(tableName);
Optional<Class> valueType = omdbDefinition.getValueType(tableName);
if (keyType.isPresent() && valueType.isPresent()) {
@@ -100,7 +109,7 @@ public class OMDBUpdatesHandler extends
ManagedWriteBatch.Handler {
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 @@ public class OMDBUpdatesHandler extends
ManagedWriteBatch.Handler {
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 2e276c3c65..5227cd4277 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.protocol.proto.HddsProtos;
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 class TestOMDBUpdatesHandler {
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<byte[]> writeBatches = getBytesFromOmMetaManager(0);
OMDBUpdatesHandler omdbUpdatesHandler = captureEvents(writeBatches);
List<OMDBUpdateEvent> events = omdbUpdatesHandler.getEvents();
- assertEquals(3, events.size());
+ assertEquals(4, events.size());
OMDBUpdateEvent volEvent = events.get(0);
assertEquals(PUT, volEvent.getAction());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]