Add RegisteredType 44/104744/10
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 2 Mar 2023 20:01:09 +0000 (21:01 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 27 Mar 2023 12:14:57 +0000 (14:14 +0200)
Reduce verbosity by introducing a private DTO to hold the combination of
a Serializer and its associated classes.

JIRA: CONTROLLER-2072
Change-Id: I9cdf32d6107740d5a07cfdb884bd4641c242450e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/EntrySerializer.java
third-party/atomix/storage/src/main/java/io/atomix/utils/serializer/Namespace.java

index f0258047be53f344773bbc26624096dd0c5eb817..0508f1eee58f00f114c61f81d495cce8c86c14de 100644 (file)
@@ -23,6 +23,7 @@ import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 import com.esotericsoftware.kryo.serializers.JavaSerializer;
+import com.google.common.base.MoreObjects;
 import io.atomix.storage.journal.JournalSerdes.EntrySerdes;
 import java.io.IOException;
 
@@ -52,4 +53,9 @@ final class EntrySerializer<T> extends Serializer<T> {
             throw new KryoException(e);
         }
     }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this).addValue(serdes).toString();
+    }
 }
index 866068b83e3a1d5c56b5a00a4195d194c315b89a..5e6814c63572386e04129ef791ac4e9c41c76fdc 100644 (file)
@@ -36,8 +36,6 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 import org.objenesis.strategy.StdInstantiatorStrategy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,8 +65,7 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool {
     private final KryoOutputPool kryoOutputPool = new KryoOutputPool();
     private final KryoInputPool kryoInputPool = new KryoInputPool();
 
-    private final List<Entry<Class<?>[], EntrySerializer<?>>> registeredTypes;
-
+    private final List<RegisteredType> registeredTypes;
     private final ClassLoader classLoader;
     private final String friendlyName;
 
@@ -80,7 +77,7 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool {
      * @param friendlyName         friendly name for the namespace
      */
     private Namespace(
-            final List<Entry<Class<?>[], EntrySerializer<?>>> registeredTypes,
+            final List<RegisteredType> registeredTypes,
             final ClassLoader classLoader,
             final String friendlyName) {
         this.registeredTypes = List.copyOf(registeredTypes);
@@ -203,8 +200,8 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool {
             new Kryo.DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
 
         int id = INITIAL_ID;
-        for (Entry<Class<?>[], EntrySerializer<?>> entry : registeredTypes) {
-            register(kryo, entry.getKey(), entry.getValue(), id++);
+        for (RegisteredType registeredType : registeredTypes) {
+            register(kryo, registeredType.types(), registeredType.serializer(), id++);
         }
         return kryo;
     }
@@ -287,13 +284,20 @@ public final class Namespace implements JournalSerdes, KryoFactory, KryoPool {
         return MoreObjects.toStringHelper(getClass()).add("registeredTypes", registeredTypes).toString();
     }
 
+    private static record RegisteredType(EntrySerializer<?> serializer, Class<?>[] types) {
+        RegisteredType {
+            requireNonNull(serializer);
+            requireNonNull(types);
+        }
+    }
+
     private static final class Builder implements JournalSerdes.Builder {
-        private final List<Entry<Class<?>[], EntrySerializer<?>>> types = new ArrayList<>();
+        private final List<RegisteredType> types = new ArrayList<>();
         private ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
 
         @Override
         public Builder register(final EntrySerdes<?> serdes, final Class<?>... classes) {
-            types.add(Map.entry(classes, new EntrySerializer<>(serdes)));
+            types.add(new RegisteredType(new EntrySerializer<>(serdes), classes));
             return this;
         }