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 {
+ }
+
}