You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2017/01/25 20:35:41 UTC
tinkerpop git commit: AkkaGraphActors now confgiures the
GryoSerializer registration using the ActorProgram getMessageTypes().
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1564 df5992755 -> d013d4052
AkkaGraphActors now confgiures the GryoSerializer registration using the ActorProgram getMessageTypes().
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d013d405
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d013d405
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d013d405
Branch: refs/heads/TINKERPOP-1564
Commit: d013d4052a01a33d89a25baf6fdd1e64955ace9a
Parents: df59927
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Jan 25 13:35:36 2017 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Jan 25 13:35:36 2017 -0700
----------------------------------------------------------------------
.../akka/process/actors/AkkaConfigFactory.java | 2 +-
.../gremlin/akka/process/actors/Constants.java | 1 +
.../process/actors/io/gryo/GryoSerializer.java | 57 +++++++++++---------
3 files changed, 34 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d013d405/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
index a49b545..1422e07 100644
--- a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
+++ b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/AkkaConfigFactory.java
@@ -48,7 +48,7 @@ final class AkkaConfigFactory {
static Config generateAkkaConfig(final ActorProgram<?> actorProgram, final Configuration configuration) {
Config config = ConfigFactory.defaultApplication().
- withValue("akka.actor.serialization-bindings", ConfigValueFactory.fromMap(GryoSerializer.getSerializerBindings(configuration))).
+ withValue(Constants.AKKA_ACTOR_SERIALIZATION_BINDINGS, ConfigValueFactory.fromMap(GryoSerializer.getSerializerBindings(actorProgram, configuration))).
withValue("custom-dispatcher.mailbox-requirement", ConfigValueFactory.fromAnyRef(ActorMailbox.class.getCanonicalName() + "$" + ActorMailbox.ActorSemantics.class.getSimpleName())).
withValue("custom-dispatcher-mailbox.mailbox-type", ConfigValueFactory.fromAnyRef(ActorMailbox.class.getCanonicalName())).
withValue("akka.actor.mailbox.requirements", ConfigValueFactory.fromMap(Collections.singletonMap(ActorMailbox.class.getCanonicalName() + "$" + ActorMailbox.ActorSemantics.class.getSimpleName(), "custom-dispatcher-mailbox"))).
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d013d405/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/Constants.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/Constants.java b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/Constants.java
index ed4f383..c54f81a 100644
--- a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/Constants.java
+++ b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/Constants.java
@@ -38,5 +38,6 @@ public final class Constants {
public static final String AKKA_CLUSTER_SEED_NODES = "akka.cluster.seed-nodes";
public static final String AKKA_CLUSTER_AUTO_DOWN_UNREACHABLE_AFTER = "akka.cluster.auto-down-unreachable-after";
public static final String GREMLIN_AKKA_SYSTEM_NAME = "gremlin.akka.system-name";
+ public static final String AKKA_ACTOR_SERIALIZATION_BINDINGS = "akka.actor.serialization-bindings";
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d013d405/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/io/gryo/GryoSerializer.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/io/gryo/GryoSerializer.java b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/io/gryo/GryoSerializer.java
index 733528c..8d567ba 100644
--- a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/io/gryo/GryoSerializer.java
+++ b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actors/io/gryo/GryoSerializer.java
@@ -24,11 +24,7 @@ import akka.serialization.Serializer;
import com.typesafe.config.Config;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.commons.configuration.Configuration;
-import org.apache.tinkerpop.gremlin.process.actors.traversal.message.BarrierAddMessage;
-import org.apache.tinkerpop.gremlin.process.actors.traversal.message.BarrierDoneMessage;
-import org.apache.tinkerpop.gremlin.process.actors.traversal.message.SideEffectAddMessage;
-import org.apache.tinkerpop.gremlin.process.actors.traversal.message.SideEffectSetMessage;
-import org.apache.tinkerpop.gremlin.process.actors.traversal.message.Terminate;
+import org.apache.tinkerpop.gremlin.process.actors.ActorProgram;
import org.apache.tinkerpop.gremlin.process.actors.util.DefaultActorsResult;
import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper;
@@ -43,8 +39,12 @@ import scala.Option;
import java.io.ByteArrayOutputStream;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+
+import static org.apache.tinkerpop.gremlin.akka.process.actors.Constants.AKKA_ACTOR_SERIALIZATION_BINDINGS;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -55,6 +55,22 @@ public final class GryoSerializer implements Serializer {
public GryoSerializer(final ExtendedActorSystem actorSystem) {
final Config config = actorSystem.settings().config();
+ final Set<Class> gryoClasses = new HashSet<>();
+ for (final Map.Entry<String, String> entry : ((Map<String, String>) config.getAnyRef(AKKA_ACTOR_SERIALIZATION_BINDINGS)).entrySet()) {
+ if (entry.getValue().equals("gryo")) {
+ gryoClasses.add(ClassUtil.getClassOrEnum(entry.getKey()));
+ }
+ }
+ // remove Gryo 3.0 classes
+ GryoVersion.V3_0.getRegistrations().forEach(type -> gryoClasses.remove(type.getTargetClass()));
+ // this sucks. how to do this automatically?
+ gryoClasses.remove(Short.class);
+ gryoClasses.remove(Integer.class);
+ gryoClasses.remove(Float.class);
+ gryoClasses.remove(Double.class);
+ gryoClasses.remove(Long.class);
+ gryoClasses.remove(String.class);
+ //
final List<IoRegistry> registryList;
if (config.hasPath(IoRegistry.IO_REGISTRY)) {
final Configuration configuration = new BaseConfiguration();
@@ -66,33 +82,24 @@ public final class GryoSerializer implements Serializer {
this.gryoPool = GryoPool.build().
poolSize(10).
initializeMapper(builder ->
- builder.referenceTracking(true).
- registrationRequired(true).
+ builder.referenceTracking(true). // config.getBoolean("gremlin.gryo.referenceTracking")).
+ registrationRequired(true). // config.getBoolean("gremlin.gryo.registrationRequired")).
version(GryoVersion.V3_0).
- addRegistries(registryList).
- addCustom(
- Terminate.class,
- BarrierAddMessage.class,
- BarrierDoneMessage.class,
- SideEffectSetMessage.class,
- SideEffectAddMessage.class,
- DefaultActorsResult.class)).create();
+ addCustom(gryoClasses.toArray(new Class[gryoClasses.size()])).
+ addRegistries(registryList)).create();
}
- public static Map<String, String> getSerializerBindings(final Configuration configuration) {
+ public static Map<String, String> getSerializerBindings(final ActorProgram<?> actorProgram, final Configuration configuration) {
+ final Set<Class> programMessageClasses = new HashSet<>(actorProgram.getMessageTypes().keySet());
+ programMessageClasses.add(DefaultActorsResult.class); // todo: may make this a Gryo3.0 class in the near future
+ GryoVersion.V3_0.getRegistrations().forEach(type -> programMessageClasses.remove(type.getTargetClass()));
final Map<String, String> bindings = new HashMap<>();
GryoMapper.build().
- referenceTracking(true).
- registrationRequired(true).
+ referenceTracking(configuration.getBoolean("gremlin.gryo.referenceTracking", true)).
+ registrationRequired(configuration.getBoolean("gremlin.gryo.registrationRequired", true)).
version(GryoVersion.V3_0).
+ addCustom(programMessageClasses.toArray(new Class[programMessageClasses.size()])).
addRegistries(IoRegistryHelper.createRegistries(configuration)).
- addCustom(
- Terminate.class,
- BarrierAddMessage.class,
- BarrierDoneMessage.class,
- SideEffectSetMessage.class,
- SideEffectAddMessage.class,
- DefaultActorsResult.class).
create().
getRegisteredClasses().
stream().