You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by ra...@apache.org on 2026/03/28 14:06:34 UTC

(storm) branch master updated: Passing Conf object to KryoDecorator (#8452)

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

rabreu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/storm.git


The following commit(s) were added to refs/heads/master by this push:
     new 9fdacaee8 Passing Conf object to KryoDecorator (#8452)
9fdacaee8 is described below

commit 9fdacaee83a0fd6968a91e9b3ef2142956d55dd4
Author: reiabreu <ru...@gmail.com>
AuthorDate: Sat Mar 28 14:06:26 2026 +0000

    Passing Conf object to KryoDecorator (#8452)
---
 .../apache/storm/serialization/IKryoDecorator.java | 18 +++++++++++++++++-
 .../storm/serialization/SerializationFactory.java  |  2 +-
 .../serialization/SerializationFactoryTest.java    | 22 ++++++++++++++++++++++
 3 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/storm-client/src/jvm/org/apache/storm/serialization/IKryoDecorator.java b/storm-client/src/jvm/org/apache/storm/serialization/IKryoDecorator.java
index 706c386ae..2d6dc9898 100644
--- a/storm-client/src/jvm/org/apache/storm/serialization/IKryoDecorator.java
+++ b/storm-client/src/jvm/org/apache/storm/serialization/IKryoDecorator.java
@@ -13,7 +13,23 @@
 package org.apache.storm.serialization;
 
 import com.esotericsoftware.kryo.Kryo;
+import java.util.Map;
 
 public interface IKryoDecorator {
-    void decorate(Kryo k);
+    /**
+     * Decorate the Kryo instance with custom serializations.
+     * @deprecated use {@link #decorate(Kryo, Map)} instead.
+     */
+    @Deprecated
+    default void decorate(Kryo k) {
+    }
+
+    /**
+     * Decorate the Kryo instance with custom serializations.
+     * @param k the Kryo instance to decorate
+     * @param conf the topology configuration
+     */
+    default void decorate(Kryo k, Map<String, Object> conf) {
+        decorate(k);
+    }
 }
diff --git a/storm-client/src/jvm/org/apache/storm/serialization/SerializationFactory.java b/storm-client/src/jvm/org/apache/storm/serialization/SerializationFactory.java
index ad7a4339e..eb734aee3 100644
--- a/storm-client/src/jvm/org/apache/storm/serialization/SerializationFactory.java
+++ b/storm-client/src/jvm/org/apache/storm/serialization/SerializationFactory.java
@@ -101,7 +101,7 @@ public class SerializationFactory {
                 try {
                     Class klass = Class.forName(klassName);
                     IKryoDecorator decorator = (IKryoDecorator) klass.newInstance();
-                    decorator.decorate(k);
+                    decorator.decorate(k, conf);
                 } catch (ClassNotFoundException e) {
                     if (skipMissing) {
                         LOG.info("Could not find kryo decorator named " + klassName + ". Skipping registration...");
diff --git a/storm-client/test/jvm/org/apache/storm/serialization/SerializationFactoryTest.java b/storm-client/test/jvm/org/apache/storm/serialization/SerializationFactoryTest.java
index 7d9a96dfe..d7e7bfcd4 100644
--- a/storm-client/test/jvm/org/apache/storm/serialization/SerializationFactoryTest.java
+++ b/storm-client/test/jvm/org/apache/storm/serialization/SerializationFactoryTest.java
@@ -55,4 +55,26 @@ public class SerializationFactoryTest {
 
     }
 
+    @Test
+    public void test_registers_decorator_with_conf() {
+        Map<String, Object> conf = Utils.readDefaultConfig();
+        conf.put(Config.TOPOLOGY_KRYO_DECORATORS, java.util.Collections.singletonList(MockKryoDecorator.class.getName()));
+        conf.put("test_key", "test_value");
+        Kryo kryo = SerializationFactory.getKryo(conf);
+        assertEquals(com.esotericsoftware.kryo.serializers.DefaultSerializers.StringSerializer.class,
+                kryo.getSerializer(MockSerObject.class).getClass());
+    }
+
+    public static class MockKryoDecorator implements IKryoDecorator {
+        @Override
+        public void decorate(Kryo k, Map<String, Object> conf) {
+            if ("test_value".equals(conf.get("test_key"))) {
+                k.register(MockSerObject.class, new com.esotericsoftware.kryo.serializers.DefaultSerializers.StringSerializer());
+            }
+        }
+    }
+
+    public static class MockSerObject {
+    }
+
 }