This is an automated email from the ASF dual-hosted git repository.

adoroszlai 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 586a20274c HDDS-8559. Codec implementations should be singleton (#4775)
586a20274c is described below

commit 586a20274c5505c0ea083101a4d4e681529098fb
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri May 26 06:59:21 2023 +0200

    HDDS-8559. Codec implementations should be singleton (#4775)
---
 .../hdds/datanode/metadata/CRLDBDefinition.java    |  2 +-
 .../metadata/DatanodeSchemaOneDBDefinition.java    |  8 ++--
 .../metadata/DatanodeSchemaThreeDBDefinition.java  |  8 ++--
 .../metadata/DatanodeSchemaTwoDBDefinition.java    |  6 +--
 .../metadata/SchemaOneChunkInfoListCodec.java      | 14 ++++++-
 .../container/metadata/SchemaOneKeyCodec.java      | 12 +++++-
 .../hadoop/hdds/utils/db/ByteArrayCodec.java       | 12 +++++-
 .../apache/hadoop/hdds/utils/db/CodecRegistry.java |  6 +--
 .../hdds/utils/db/FixedLengthStringCodec.java      | 13 +++++-
 .../apache/hadoop/hdds/utils/db/IntegerCodec.java  | 13 +++++-
 .../org/apache/hadoop/hdds/utils/db/RDBStore.java  |  2 +-
 .../apache/hadoop/hdds/utils/db/ShortCodec.java    | 14 ++++++-
 .../apache/hadoop/hdds/utils/db/StringCodec.java   |  6 ++-
 .../org/apache/hadoop/hdds/utils/db/TestCodec.java |  4 +-
 .../hadoop/hdds/utils/db/TestDBStoreBuilder.java   |  4 +-
 .../hadoop/hdds/scm/metadata/BigIntegerCodec.java  | 15 ++++++-
 .../hadoop/hdds/scm/metadata/SCMDBDefinition.java  | 26 ++++++------
 .../hdds/scm/metadata/X509CertificateCodec.java    | 16 +++++++-
 .../ozone/om/codec/TokenIdentifierCodec.java       | 15 ++++++-
 .../hadoop/ozone/om/OmMetadataManagerImpl.java     |  2 +-
 .../apache/hadoop/ozone/om/OmSnapshotManager.java  |  3 +-
 .../hadoop/ozone/om/codec/OMDBDefinition.java      | 46 +++++++++++-----------
 .../hadoop/ozone/om/snapshot/SnapshotDiffJob.java  | 11 +++++-
 .../om/service/TestSnapshotDiffCleanupService.java |  3 +-
 .../ozone/security/TestOzoneTokenIdentifier.java   |  3 +-
 .../hadoop/ozone/recon/codec/NSSummaryCodec.java   | 20 +++++++---
 .../recon/spi/impl/ContainerKeyPrefixCodec.java    | 16 +++++++-
 .../recon/spi/impl/KeyPrefixContainerCodec.java    | 16 +++++++-
 .../ozone/recon/spi/impl/ReconDBDefinition.java    | 10 ++---
 .../apache/hadoop/ozone/recon/TestReconCodecs.java |  4 +-
 30 files changed, 237 insertions(+), 93 deletions(-)

diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/datanode/metadata/CRLDBDefinition.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/datanode/metadata/CRLDBDefinition.java
index 213e0e072c..bdd53a3341 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/datanode/metadata/CRLDBDefinition.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/datanode/metadata/CRLDBDefinition.java
@@ -52,7 +52,7 @@ public class CRLDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           "crlSequenceId",
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           Long.class,
           LongCodec.get());
 
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaOneDBDefinition.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaOneDBDefinition.java
index 4f32787d1b..62c617eb04 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaOneDBDefinition.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaOneDBDefinition.java
@@ -48,7 +48,7 @@ public class DatanodeSchemaOneDBDefinition
       new DBColumnFamilyDefinition<>(
           StringUtils.bytes2String(DEFAULT_COLUMN_FAMILY),
           String.class,
-          new SchemaOneKeyCodec(),
+          SchemaOneKeyCodec.get(),
           BlockData.class,
           BlockData.getCodec());
 
@@ -57,7 +57,7 @@ public class DatanodeSchemaOneDBDefinition
         new DBColumnFamilyDefinition<>(
             StringUtils.bytes2String(DEFAULT_COLUMN_FAMILY),
             String.class,
-            new SchemaOneKeyCodec(),
+            SchemaOneKeyCodec.get(),
             Long.class,
             LongCodec.get());
 
@@ -66,9 +66,9 @@ public class DatanodeSchemaOneDBDefinition
         new DBColumnFamilyDefinition<>(
             StringUtils.bytes2String(DEFAULT_COLUMN_FAMILY),
             String.class,
-            new SchemaOneKeyCodec(),
+            SchemaOneKeyCodec.get(),
             ChunkInfoList.class,
-            new SchemaOneChunkInfoListCodec());
+            SchemaOneChunkInfoListCodec.get());
 
   public DatanodeSchemaOneDBDefinition(String dbPath,
       ConfigurationSource config) {
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
index 679478230d..983dfb2c28 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
@@ -58,7 +58,7 @@ public class DatanodeSchemaThreeDBDefinition
       new DBColumnFamilyDefinition<>(
           "block_data",
           String.class,
-          new FixedLengthStringCodec(),
+          FixedLengthStringCodec.get(),
           BlockData.class,
           BlockData.getCodec());
 
@@ -67,7 +67,7 @@ public class DatanodeSchemaThreeDBDefinition
       new DBColumnFamilyDefinition<>(
           "metadata",
           String.class,
-          new FixedLengthStringCodec(),
+          FixedLengthStringCodec.get(),
           Long.class,
           LongCodec.get());
 
@@ -76,7 +76,7 @@ public class DatanodeSchemaThreeDBDefinition
       new DBColumnFamilyDefinition<>(
           "deleted_blocks",
           String.class,
-          new FixedLengthStringCodec(),
+          FixedLengthStringCodec.get(),
           ChunkInfoList.class,
           ChunkInfoList.getCodec());
 
@@ -85,7 +85,7 @@ public class DatanodeSchemaThreeDBDefinition
       new DBColumnFamilyDefinition<>(
           "delete_txns",
           String.class,
-          new FixedLengthStringCodec(),
+          FixedLengthStringCodec.get(),
           DeletedBlocksTransaction.class,
           Proto2Codec.get(DeletedBlocksTransaction.class));
 
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaTwoDBDefinition.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaTwoDBDefinition.java
index a777139fb2..bf47207f13 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaTwoDBDefinition.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaTwoDBDefinition.java
@@ -41,7 +41,7 @@ public class DatanodeSchemaTwoDBDefinition extends
           new DBColumnFamilyDefinition<>(
                   "block_data",
                   String.class,
-                  new StringCodec(),
+                  StringCodec.get(),
                   BlockData.class,
                   BlockData.getCodec());
 
@@ -50,7 +50,7 @@ public class DatanodeSchemaTwoDBDefinition extends
           new DBColumnFamilyDefinition<>(
           "metadata",
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           Long.class,
           LongCodec.get());
 
@@ -59,7 +59,7 @@ public class DatanodeSchemaTwoDBDefinition extends
           new DBColumnFamilyDefinition<>(
                   "deleted_blocks",
                   String.class,
-                  new StringCodec(),
+                  StringCodec.get(),
                   ChunkInfoList.class,
                   ChunkInfoList.getCodec());
 
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneChunkInfoListCodec.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneChunkInfoListCodec.java
index bca625c1e8..4beb207543 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneChunkInfoListCodec.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneChunkInfoListCodec.java
@@ -43,7 +43,19 @@ import java.io.IOException;
  * future, callers should be aware that the associated chunk information may 
not
  * always be present.
  */
-public class SchemaOneChunkInfoListCodec implements Codec<ChunkInfoList> {
+public final class SchemaOneChunkInfoListCodec implements Codec<ChunkInfoList> 
{
+
+  private static final Codec<ChunkInfoList> INSTANCE =
+      new SchemaOneChunkInfoListCodec();
+
+  public static Codec<ChunkInfoList> get() {
+    return INSTANCE;
+  }
+
+  private SchemaOneChunkInfoListCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(ChunkInfoList chunkList) {
     return chunkList.getProtoBufMessage().toByteArray();
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneKeyCodec.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneKeyCodec.java
index 588ff45496..7604e9efdf 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneKeyCodec.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/SchemaOneKeyCodec.java
@@ -34,10 +34,20 @@ import org.slf4j.LoggerFactory;
  * prefixes in the data, and determining which format it should be
  * encoded/decoded to/from.
  */
-public class SchemaOneKeyCodec implements Codec<String> {
+public final class SchemaOneKeyCodec implements Codec<String> {
   private static final Logger LOG = LoggerFactory.getLogger(
       SchemaOneKeyCodec.class);
 
+  private static final Codec<String> INSTANCE = new SchemaOneKeyCodec();
+
+  public static Codec<String> get() {
+    return INSTANCE;
+  }
+
+  private SchemaOneKeyCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(String stringObject) {
     try {
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ByteArrayCodec.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ByteArrayCodec.java
index 293775641c..f62d3ac19c 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ByteArrayCodec.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ByteArrayCodec.java
@@ -19,10 +19,20 @@
 package org.apache.hadoop.hdds.utils.db;
 
 /**
- * Codec to convert byte array to/from byte array.
+ * No-op codec for byte arrays.
  */
 public final class ByteArrayCodec implements Codec<byte[]> {
 
+  private static final Codec<byte[]> INSTANCE = new ByteArrayCodec();
+
+  public static Codec<byte[]> get() {
+    return INSTANCE;
+  }
+
+  private ByteArrayCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(byte[] bytes) {
     return bytes;
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/CodecRegistry.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/CodecRegistry.java
index 0879749973..34e1d1c8fa 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/CodecRegistry.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/CodecRegistry.java
@@ -49,10 +49,10 @@ public final class CodecRegistry {
 
   public static Builder newBuilder() {
     return new Builder()
-        .addCodec(String.class, new StringCodec())
+        .addCodec(String.class, StringCodec.get())
         .addCodec(Long.class, LongCodec.get())
-        .addCodec(Integer.class, new IntegerCodec())
-        .addCodec(byte[].class, new ByteArrayCodec());
+        .addCodec(Integer.class, IntegerCodec.get())
+        .addCodec(byte[].class, ByteArrayCodec.get());
   }
 
   private static final class CodecMap {
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/FixedLengthStringCodec.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/FixedLengthStringCodec.java
index eff703919d..cca0e0da29 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/FixedLengthStringCodec.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/FixedLengthStringCodec.java
@@ -24,7 +24,18 @@ import java.io.IOException;
  * Codec to convert a prefixed String to/from byte array.
  * The prefix has to be of fixed-length.
  */
-public class FixedLengthStringCodec implements Codec<String> {
+public final class FixedLengthStringCodec implements Codec<String> {
+
+  private static final Codec<String> INSTANCE = new FixedLengthStringCodec();
+
+  public static Codec<String> get() {
+    return INSTANCE;
+  }
+
+  private FixedLengthStringCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(String object) throws IOException {
     if (object != null) {
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
index eeea286d61..4f97b19190 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
@@ -24,9 +24,20 @@ import javax.annotation.Nonnull;
 import java.util.function.IntFunction;
 
 /**
- * Codec to convert Integer to/from byte array.
+ * Codec to serialize/deserialize {@link Integer}.
  */
 public final class IntegerCodec implements Codec<Integer> {
+
+  private static final Codec<Integer> INSTANCE = new IntegerCodec();
+
+  public static Codec<Integer> get() {
+    return INSTANCE;
+  }
+
+  private IntegerCodec() {
+    // singleton
+  }
+
   @Override
   public boolean supportCodecBuffer() {
     return true;
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
index f5b71a5573..d1a2402063 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
@@ -333,7 +333,7 @@ public class RDBStore implements DBStore {
   @Override
   public Map<Integer, String> getTableNames() {
     Map<Integer, String> tableNames = new HashMap<>();
-    StringCodec stringCodec = new StringCodec();
+    StringCodec stringCodec = StringCodec.get();
 
     for (ColumnFamily columnFamily : getColumnFamilies()) {
       tableNames.put(columnFamily.getID(), columnFamily.getName(stringCodec));
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ShortCodec.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ShortCodec.java
index a7c4c068ef..72770b6f0a 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ShortCodec.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/ShortCodec.java
@@ -22,9 +22,19 @@ import java.io.IOException;
 import com.google.common.primitives.Shorts;
 
 /**
- * Codec to convert Short to/from byte array.
+ * Codec to serialize/deserialize {@link Short}.
  */
-public class ShortCodec implements Codec<Short> {
+public final class ShortCodec implements Codec<Short> {
+
+  private static final Codec<Short> INSTANCE = new ShortCodec();
+
+  public static Codec<Short> get() {
+    return INSTANCE;
+  }
+
+  private ShortCodec() {
+    // singleton
+  }
 
   @Override
   public byte[] toPersistedFormat(Short object) throws IOException {
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/StringCodec.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/StringCodec.java
index 7c63aa1ece..531381714e 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/StringCodec.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/StringCodec.java
@@ -24,7 +24,7 @@ import javax.annotation.Nonnull;
 import org.apache.hadoop.hdds.StringUtils;
 
 /**
- * Codec to convert String to/from byte array.
+ * Codec to serialize/deserialize {@link String}.
  */
 public final class StringCodec implements Codec<String> {
   private static final StringCodec CODEC = new StringCodec();
@@ -33,6 +33,10 @@ public final class StringCodec implements Codec<String> {
     return CODEC;
   }
 
+  private StringCodec() {
+    // singleton
+  }
+
   @Override
   public boolean supportCodecBuffer() {
     return true;
diff --git 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestCodec.java
 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestCodec.java
index ab94814b2e..1737e948f9 100644
--- 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestCodec.java
+++ 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestCodec.java
@@ -55,7 +55,7 @@ public final class TestCodec {
 
   @Test
   public void testIntegerCodec() throws Exception {
-    final IntegerCodec codec = new IntegerCodec();
+    final Codec<Integer> codec = IntegerCodec.get();
     runTest(codec, 0, Integer.BYTES);
     runTest(codec, 1, Integer.BYTES);
     runTest(codec, -1, Integer.BYTES);
@@ -87,7 +87,7 @@ public final class TestCodec {
 
   @Test
   public void testStringCodec() throws Exception {
-    final StringCodec codec = new StringCodec();
+    final StringCodec codec = StringCodec.get();
     runTest(codec, "", 0);
 
     for (int i = 0; i < NUM_LOOPS; i++) {
diff --git 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestDBStoreBuilder.java
 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestDBStoreBuilder.java
index e13f6468da..66efc36aa2 100644
--- 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestDBStoreBuilder.java
+++ 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestDBStoreBuilder.java
@@ -176,7 +176,7 @@ public class TestDBStoreBuilder {
 
       private final DBColumnFamilyDefinition<String, Long> sampleTable =
           new DBColumnFamilyDefinition<>(sampleTableName,
-              String.class, new StringCodec(), Long.class, LongCodec.get());
+              String.class, StringCodec.get(), Long.class, LongCodec.get());
       {
         ManagedColumnFamilyOptions cfOptions = new 
ManagedColumnFamilyOptions();
         // reverse the default option for check
@@ -253,7 +253,7 @@ public class TestDBStoreBuilder {
 
       private final DBColumnFamilyDefinition<String, Long> sampleTable =
               new DBColumnFamilyDefinition<>(sampleTableName, String.class,
-                      new StringCodec(), Long.class, LongCodec.get());
+                      StringCodec.get(), Long.class, LongCodec.get());
 
 
       @Override
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/BigIntegerCodec.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/BigIntegerCodec.java
index 2d4898d41e..5a7e86e99c 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/BigIntegerCodec.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/BigIntegerCodec.java
@@ -24,9 +24,20 @@ import java.math.BigInteger;
 import org.apache.hadoop.hdds.utils.db.Codec;
 
 /**
- * Encode and decode BigInteger.
+ * Codec to serialize/deserialize {@link BigInteger}.
  */
-public class BigIntegerCodec implements Codec<BigInteger> {
+public final class BigIntegerCodec implements Codec<BigInteger> {
+
+  private static final Codec<BigInteger> INSTANCE = new BigIntegerCodec();
+
+  public static Codec<BigInteger> get() {
+    return INSTANCE;
+  }
+
+  private BigIntegerCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(BigInteger object) throws IOException {
     return object.toByteArray();
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/SCMDBDefinition.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/SCMDBDefinition.java
index 47a1b0259f..1caf8021e5 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/SCMDBDefinition.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/SCMDBDefinition.java
@@ -57,18 +57,18 @@ public class SCMDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           "validCerts",
           BigInteger.class,
-          new BigIntegerCodec(),
+          BigIntegerCodec.get(),
           X509Certificate.class,
-          new X509CertificateCodec());
+          X509CertificateCodec.get());
 
   public static final DBColumnFamilyDefinition<BigInteger, X509Certificate>
       VALID_SCM_CERTS =
       new DBColumnFamilyDefinition<>(
           "validSCMCerts",
           BigInteger.class,
-          new BigIntegerCodec(),
+          BigIntegerCodec.get(),
           X509Certificate.class,
-          new X509CertificateCodec());
+          X509CertificateCodec.get());
 
   /**
    * This column family is Deprecated in favor of REVOKED_CERTS_V2.
@@ -79,16 +79,16 @@ public class SCMDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           "revokedCerts",
           BigInteger.class,
-          new BigIntegerCodec(),
+          BigIntegerCodec.get(),
           X509Certificate.class,
-          new X509CertificateCodec());
+          X509CertificateCodec.get());
 
   public static final DBColumnFamilyDefinition<BigInteger, CertInfo>
       REVOKED_CERTS_V2 =
       new DBColumnFamilyDefinition<>(
           "revokedCertsV2",
           BigInteger.class,
-          new BigIntegerCodec(),
+          BigIntegerCodec.get(),
           CertInfo.class,
           CertInfo.getCodec());
 
@@ -115,7 +115,7 @@ public class SCMDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           "scmTransactionInfos",
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           TransactionInfo.class,
           TransactionInfo.getCodec());
 
@@ -132,7 +132,7 @@ public class SCMDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           "crlSequenceId",
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           Long.class,
           LongCodec.get());
 
@@ -141,7 +141,7 @@ public class SCMDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           "sequenceId",
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           Long.class,
           LongCodec.get());
 
@@ -163,16 +163,16 @@ public class SCMDBDefinition implements DBDefinition {
       META = new DBColumnFamilyDefinition<>(
           "meta",
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           String.class,
-          new StringCodec());
+          StringCodec.get());
 
   public static final DBColumnFamilyDefinition<String, ByteString>
       STATEFUL_SERVICE_CONFIG =
       new DBColumnFamilyDefinition<>(
           "statefulServiceConfig",
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           ByteString.class,
           ByteStringCodec.getInstance());
 
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/X509CertificateCodec.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/X509CertificateCodec.java
index bf2559b8ab..56a0165c22 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/X509CertificateCodec.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/metadata/X509CertificateCodec.java
@@ -28,9 +28,21 @@ import 
org.apache.hadoop.hdds.security.x509.certificate.utils.CertificateCodec;
 import org.apache.hadoop.hdds.utils.db.Codec;
 
 /**
- * Encodes and Decodes X509Certificate Class.
+ * Codec to serialize/deserialize {@link X509Certificate}.
  */
-public class X509CertificateCodec implements Codec<X509Certificate> {
+public final class X509CertificateCodec implements Codec<X509Certificate> {
+
+  private static final Codec<X509Certificate> INSTANCE =
+      new X509CertificateCodec();
+
+  public static Codec<X509Certificate> get() {
+    return INSTANCE;
+  }
+
+  private X509CertificateCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(X509Certificate object) throws IOException {
     try {
diff --git 
a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/TokenIdentifierCodec.java
 
b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/TokenIdentifierCodec.java
index 592cae3a36..ba54a44ac7 100644
--- 
a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/TokenIdentifierCodec.java
+++ 
b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/TokenIdentifierCodec.java
@@ -27,9 +27,20 @@ import java.io.IOException;
 import java.nio.BufferUnderflowException;
 
 /**
- * Codec to encode TokenIdentifierCodec as byte array.
+ * Codec to serialize/deserialize {@link OzoneTokenIdentifier}.
  */
-public class TokenIdentifierCodec implements Codec<OzoneTokenIdentifier> {
+public final class TokenIdentifierCodec implements Codec<OzoneTokenIdentifier> 
{
+
+  private static final Codec<OzoneTokenIdentifier> INSTANCE =
+      new TokenIdentifierCodec();
+
+  public static Codec<OzoneTokenIdentifier> get() {
+    return INSTANCE;
+  }
+
+  private TokenIdentifierCodec() {
+    // singleton
+  }
 
   @Override
   public byte[] toPersistedFormat(OzoneTokenIdentifier object) {
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
index 81b6292bd6..a59d6f7e1b 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
@@ -577,7 +577,7 @@ public class OmMetadataManagerImpl implements 
OMMetadataManager,
         .addTable(TENANT_STATE_TABLE)
         .addTable(SNAPSHOT_INFO_TABLE)
         .addTable(SNAPSHOT_RENAMED_TABLE)
-        .addCodec(OzoneTokenIdentifier.class, new TokenIdentifierCodec())
+        .addCodec(OzoneTokenIdentifier.class, TokenIdentifierCodec.get())
         .addCodec(OmKeyInfo.class, OmKeyInfo.getCodec(true))
         .addCodec(RepeatedOmKeyInfo.class, RepeatedOmKeyInfo.getCodec(true))
         .addCodec(OmBucketInfo.class, OmBucketInfo.getCodec())
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
index 81aa443587..537e9c712f 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
@@ -353,8 +353,7 @@ public final class OmSnapshotManager implements 
AutoCloseable {
     // DiffReportEntry codec for Diff Report.
     registry.addCodec(SnapshotDiffReportOzone.DiffReportEntry.class,
         SnapshotDiffReportOzone.getDiffReportEntryCodec());
-    registry.addCodec(SnapshotDiffJob.class,
-        new SnapshotDiffJob.SnapshotDiffJobCodec());
+    registry.addCodec(SnapshotDiffJob.class, SnapshotDiffJob.getCodec());
     return registry.build();
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java
index 9169a07bf3..2acb964b55 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/codec/OMDBDefinition.java
@@ -54,7 +54,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.DELETED_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     RepeatedOmKeyInfo.class,
                     RepeatedOmKeyInfo.getCodec(true));
 
@@ -63,7 +63,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.USER_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     PersistedUserVolumeInfo.class,
                     Proto2Codec.get(PersistedUserVolumeInfo.class));
 
@@ -72,7 +72,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.VOLUME_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmVolumeArgs.class,
                     OmVolumeArgs.getCodec());
 
@@ -81,7 +81,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.OPEN_KEY_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmKeyInfo.class,
                     OmKeyInfo.getCodec(true));
 
@@ -90,7 +90,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.KEY_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmKeyInfo.class,
                     OmKeyInfo.getCodec(true));
 
@@ -99,7 +99,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.BUCKET_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmBucketInfo.class,
                     OmBucketInfo.getCodec());
 
@@ -108,7 +108,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.MULTIPARTINFO_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmMultipartKeyInfo.class,
                     OmMultipartKeyInfo.getCodec());
 
@@ -117,7 +117,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.PREFIX_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmPrefixInfo.class,
                     OmPrefixInfo.getCodec());
 
@@ -126,7 +126,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.DELEGATION_TOKEN_TABLE,
                     OzoneTokenIdentifier.class,
-                    new TokenIdentifierCodec(),
+                    TokenIdentifierCodec.get(),
                     Long.class,
                     LongCodec.get());
 
@@ -135,7 +135,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.S3_SECRET_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     S3SecretValue.class,
                     S3SecretValue.getCodec());
 
@@ -144,7 +144,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.TRANSACTION_INFO_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     TransactionInfo.class,
                     TransactionInfo.getCodec());
 
@@ -153,7 +153,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.DIRECTORY_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmDirectoryInfo.class,
                     OmDirectoryInfo.getCodec());
 
@@ -162,7 +162,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.FILE_TABLE,
                     String.class,
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmKeyInfo.class,
                     OmKeyInfo.getCodec(true));
 
@@ -171,23 +171,23 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                   OmMetadataManagerImpl.OPEN_FILE_TABLE,
                   String.class,
-                  new StringCodec(),
+                  StringCodec.get(),
                   OmKeyInfo.class,
                   OmKeyInfo.getCodec(true));
 
   public static final DBColumnFamilyDefinition<String, OmKeyInfo>
       DELETED_DIR_TABLE =
       new DBColumnFamilyDefinition<>(OmMetadataManagerImpl.DELETED_DIR_TABLE,
-          String.class, new StringCodec(), OmKeyInfo.class,
+          String.class, StringCodec.get(), OmKeyInfo.class,
           OmKeyInfo.getCodec(true));
 
   public static final DBColumnFamilyDefinition<String, String>
       META_TABLE = new DBColumnFamilyDefinition<>(
           OmMetadataManagerImpl.META_TABLE,
           String.class,
-          new StringCodec(),
+          StringCodec.get(),
           String.class,
-          new StringCodec());
+          StringCodec.get());
 
   // Tables for multi-tenancy
 
@@ -196,7 +196,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.TENANT_ACCESS_ID_TABLE,
                     String.class,  // accessId
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmDBAccessIdInfo.class,  // tenantId, secret, principal
                     OmDBAccessIdInfo.getCodec());
 
@@ -205,7 +205,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.PRINCIPAL_TO_ACCESS_IDS_TABLE,
                     String.class,  // User principal
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmDBUserPrincipalInfo.class,  // List of accessIds
                     OmDBUserPrincipalInfo.getCodec());
 
@@ -214,7 +214,7 @@ public class OMDBDefinition implements DBDefinition {
             new DBColumnFamilyDefinition<>(
                     OmMetadataManagerImpl.TENANT_STATE_TABLE,
                     String.class,  // tenantId (tenant name)
-                    new StringCodec(),
+                    StringCodec.get(),
                     OmDBTenantState.class,
                     OmDBTenantState.getCodec());
 
@@ -225,7 +225,7 @@ public class OMDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           OmMetadataManagerImpl.SNAPSHOT_INFO_TABLE,
           String.class,  // snapshot path
-          new StringCodec(),
+          StringCodec.get(),
           SnapshotInfo.class,
           SnapshotInfo.getCodec());
 
@@ -244,9 +244,9 @@ public class OMDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           OmMetadataManagerImpl.SNAPSHOT_RENAMED_TABLE,
           String.class,  // /volumeName/bucketName/objectID
-          new StringCodec(),
+          StringCodec.get(),
           String.class, // path to key in prev snapshot's key(file)/dir Table.
-          new StringCodec());
+          StringCodec.get());
 
   @Override
   public String getName() {
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffJob.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffJob.java
index 7258c7d3aa..50e968a75c 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffJob.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/SnapshotDiffJob.java
@@ -29,6 +29,14 @@ import 
org.apache.hadoop.ozone.snapshot.SnapshotDiffResponse.JobStatus;
  * POJO for Snapshot diff job.
  */
 public class SnapshotDiffJob {
+
+  private static final Codec<SnapshotDiffJob> CODEC =
+      new SnapshotDiffJobCodec();
+
+  public static Codec<SnapshotDiffJob> getCodec() {
+    return CODEC;
+  }
+
   private long creationTime;
   private String jobId;
   private JobStatus status;
@@ -180,7 +188,8 @@ public class SnapshotDiffJob {
   /**
    * Codec to encode SnapshotDiffJob as byte array.
    */
-  public static class SnapshotDiffJobCodec implements Codec<SnapshotDiffJob> {
+  private static final class SnapshotDiffJobCodec
+      implements Codec<SnapshotDiffJob> {
 
     private static final ObjectMapper MAPPER = new ObjectMapper()
         .setSerializationInclusion(JsonInclude.Include.NON_NULL)
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDiffCleanupService.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDiffCleanupService.java
index 7056cc873d..9cbddb4e5b 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDiffCleanupService.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDiffCleanupService.java
@@ -171,8 +171,7 @@ public class TestSnapshotDiffCleanupService {
     // DiffReportEntry codec for Diff Report.
     b.addCodec(SnapshotDiffReportOzone.DiffReportEntry.class,
         SnapshotDiffReportOzone.getDiffReportEntryCodec());
-    b.addCodec(SnapshotDiffJob.class,
-        new SnapshotDiffJob.SnapshotDiffJobCodec());
+    b.addCodec(SnapshotDiffJob.class, SnapshotDiffJob.getCodec());
     codecRegistry = b.build();
     emptyReportEntry = codecRegistry.asRawData("{}");
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
index a7ce58a285..d8fe395fe0 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
@@ -46,6 +46,7 @@ import java.util.Map;
 import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.utils.db.Codec;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.ozone.om.codec.TokenIdentifierCodec;
 import org.apache.hadoop.security.ssl.KeyStoreTestUtil;
@@ -335,7 +336,7 @@ public class TestOzoneTokenIdentifier {
     idWrite.setOmServiceId("defaultServiceId");
 
     byte[] oldIdBytes = idWrite.getBytes();
-    TokenIdentifierCodec idCodec = new TokenIdentifierCodec();
+    Codec<OzoneTokenIdentifier> idCodec = TokenIdentifierCodec.get();
 
     OzoneTokenIdentifier idRead = null;
     try {
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/codec/NSSummaryCodec.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/codec/NSSummaryCodec.java
index f9a1acdae0..09e0b25879 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/codec/NSSummaryCodec.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/codec/NSSummaryCodec.java
@@ -35,19 +35,29 @@ import java.util.HashSet;
 import java.util.Set;
 
 /**
- * Codec for Namespace Summary.
+ * Codec to serialize/deserialize {@link NSSummary}.
  */
-public class NSSummaryCodec implements Codec<NSSummary> {
+public final class NSSummaryCodec implements Codec<NSSummary> {
 
-  private final Codec<Integer> integerCodec = new IntegerCodec();
-  private final Codec<Short> shortCodec = new ShortCodec();
+  private static final Codec<NSSummary> INSTANCE = new NSSummaryCodec();
+
+  public static Codec<NSSummary> get() {
+    return INSTANCE;
+  }
+
+  private final Codec<Integer> integerCodec = IntegerCodec.get();
+  private final Codec<Short> shortCodec = ShortCodec.get();
   private final Codec<Long> longCodec = LongCodec.get();
-  private final Codec<String> stringCodec = new StringCodec();
+  private final Codec<String> stringCodec = StringCodec.get();
   // 1 int fields + 41-length int array
   // + 2 dummy field to track list size/dirName length
   private static final int NUM_OF_INTS =
       3 + ReconConstants.NUM_OF_FILE_SIZE_BINS;
 
+  private NSSummaryCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(NSSummary object) throws IOException {
     Set<Long> childDirs = object.getChildDir();
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
index 1ebeeddb2b..460d6b08d0 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
@@ -32,12 +32,24 @@ import com.google.common.base.Preconditions;
 import com.google.common.primitives.Longs;
 
 /**
- * Codec to encode ContainerKeyPrefix as byte array.
+ * Codec to serialize/deserialize {@link ContainerKeyPrefix}.
  */
-public class ContainerKeyPrefixCodec implements Codec<ContainerKeyPrefix> {
+public final class ContainerKeyPrefixCodec
+    implements Codec<ContainerKeyPrefix> {
 
   private static final String KEY_DELIMITER = "_";
 
+  private static final Codec<ContainerKeyPrefix> INSTANCE =
+      new ContainerKeyPrefixCodec();
+
+  public static Codec<ContainerKeyPrefix> get() {
+    return INSTANCE;
+  }
+
+  private ContainerKeyPrefixCodec() {
+    // singleton
+  }
+
   @Override
   public byte[] toPersistedFormat(ContainerKeyPrefix containerKeyPrefix)
       throws IOException {
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
index ca5b37ed44..4c54dad6f8 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
@@ -30,9 +30,21 @@ import java.nio.ByteBuffer;
 import static org.apache.commons.compress.utils.CharsetNames.UTF_8;
 
 /**
- * Codec to encode KeyPrefixContainer as byte array.
+ * Codec to serialize/deserialize {@link KeyPrefixContainer}.
  */
-public class KeyPrefixContainerCodec implements Codec<KeyPrefixContainer> {
+public final class KeyPrefixContainerCodec
+    implements Codec<KeyPrefixContainer> {
+
+  private static final Codec<KeyPrefixContainer> INSTANCE =
+      new KeyPrefixContainerCodec();
+
+  public static Codec<KeyPrefixContainer> get() {
+    return INSTANCE;
+  }
+
+  private KeyPrefixContainerCodec() {
+    // singleton
+  }
 
   private static final String KEY_DELIMITER = "_";
 
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
index 5c8a2baf3f..59e51d6204 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBDefinition.java
@@ -44,18 +44,18 @@ public class ReconDBDefinition implements DBDefinition {
       new DBColumnFamilyDefinition<>(
           "containerKeyTable",
           ContainerKeyPrefix.class,
-          new ContainerKeyPrefixCodec(),
+          ContainerKeyPrefixCodec.get(),
           Integer.class,
-          new IntegerCodec());
+          IntegerCodec.get());
 
   public static final DBColumnFamilyDefinition<KeyPrefixContainer, Integer>
       KEY_CONTAINER =
       new DBColumnFamilyDefinition<>(
           "keyContainerTable",
           KeyPrefixContainer.class,
-          new KeyPrefixContainerCodec(),
+          KeyPrefixContainerCodec.get(),
           Integer.class,
-          new IntegerCodec());
+          IntegerCodec.get());
 
   public static final DBColumnFamilyDefinition<Long, Long>
       CONTAINER_KEY_COUNT =
@@ -81,7 +81,7 @@ public class ReconDBDefinition implements DBDefinition {
           Long.class,
           LongCodec.get(),
           NSSummary.class,
-          new NSSummaryCodec());
+          NSSummaryCodec.get());
 
   // Container Replica History with bcsId tracking.
   public static final DBColumnFamilyDefinition
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconCodecs.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconCodecs.java
index 6545f08103..cdc0bdf5ec 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconCodecs.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconCodecs.java
@@ -37,7 +37,7 @@ public class TestReconCodecs {
     ContainerKeyPrefix containerKeyPrefix = new ContainerKeyPrefix(
         System.currentTimeMillis(), "TestKeyPrefix", 0);
 
-    Codec<ContainerKeyPrefix> codec = new ContainerKeyPrefixCodec();
+    Codec<ContainerKeyPrefix> codec = ContainerKeyPrefixCodec.get();
     byte[] persistedFormat = codec.toPersistedFormat(containerKeyPrefix);
     Assertions.assertTrue(persistedFormat != null);
     ContainerKeyPrefix fromPersistedFormat =
@@ -48,7 +48,7 @@ public class TestReconCodecs {
   @Test
   public void testIntegerCodec() throws IOException {
     Integer i = 1000;
-    Codec<Integer> codec = new IntegerCodec();
+    Codec<Integer> codec = IntegerCodec.get();
     byte[] persistedFormat = codec.toPersistedFormat(i);
     Assertions.assertTrue(persistedFormat != null);
     Integer fromPersistedFormat =


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to