Skip to content

Commit 67f42ea

Browse files
vjkoskelaBrandonArp
authored andcommitted
Switched from Java serialization to Kyro serialization for remoting. (#48)
1 parent cdeacbd commit 67f42ea

File tree

4 files changed

+48
-6
lines changed

4 files changed

+48
-6
lines changed

config/config.hocon

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,25 @@ databaseConfigurations {
4242
}
4343
akkaConfiguration {
4444
akka {
45+
extensions=["com.romix.akka.serialization.kryo.KryoSerializationExtension$"]
4546
loggers=["akka.event.slf4j.Slf4jLogger"]
4647
loglevel="DEBUG"
4748
stdout-loglevel="DEBUG"
4849
logging-filter="akka.event.slf4j.Slf4jLoggingFilter"
4950
actor {
51+
serializers {
52+
kryo="com.romix.akka.serialization.kryo.KryoSerializer"
53+
}
54+
serialization-bindings {
55+
"java.lang.Object"="kryo"
56+
"java.io.Serializable"="none"
57+
}
58+
kryo {
59+
type="graph"
60+
idstrategy="default"
61+
buffer-size=4096
62+
max-buffer-size=-1
63+
}
5064
debug {
5165
unhandled="on"
5266
}

pom.xml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,10 @@
101101

102102
<properties>
103103
<!--Dependency versions-->
104-
<akka.version>2.4.2</akka.version>
105-
<akka.http.version>2.4.2</akka.http.version>
104+
<akka.version>2.4.14</akka.version>
105+
<akka.http.version>2.4.11</akka.http.version>
106106
<akka.persistence.cassandra.version>0.6</akka.persistence.cassandra.version>
107+
<akka.kryo.version>0.5.0</akka.kryo.version>
107108
<apache.httpclient.version>4.5.1</apache.httpclient.version>
108109
<apache.httpcore.version>4.4.3</apache.httpcore.version>
109110
<arpnetworking.commons.version>1.7.1</arpnetworking.commons.version>
@@ -617,6 +618,12 @@
617618
<version>${leveldb.jni.version}</version>
618619
<scope>runtime</scope>
619620
</dependency>
621+
<dependency>
622+
<groupId>com.github.romix.akka</groupId>
623+
<artifactId>akka-kryo-serialization_${scala.version}</artifactId>
624+
<version>${akka.kryo.version}</version>
625+
<scope>runtime</scope>
626+
</dependency>
620627
<!-- Database -->
621628
<dependency>
622629
<groupId>javax.persistence</groupId>

src/main/java/com/arpnetworking/clusteraggregator/GuiceModule.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.arpnetworking.clusteraggregator.http.Routes;
4949
import com.arpnetworking.clusteraggregator.partitioning.DatabasePartitionSet;
5050
import com.arpnetworking.commons.builder.Builder;
51+
import com.arpnetworking.commons.jackson.databind.ObjectMapperFactory;
5152
import com.arpnetworking.configuration.jackson.DynamicConfiguration;
5253
import com.arpnetworking.configuration.jackson.HoconFileSource;
5354
import com.arpnetworking.configuration.jackson.JsonNodeFileSource;
@@ -65,6 +66,7 @@
6566
import com.arpnetworking.utility.partitioning.PartitionSet;
6667
import com.fasterxml.jackson.databind.ObjectMapper;
6768
import com.google.common.base.Optional;
69+
import com.google.common.base.Throwables;
6870
import com.google.inject.AbstractModule;
6971
import com.google.inject.Injector;
7072
import com.google.inject.Provides;
@@ -73,9 +75,12 @@
7375
import com.google.inject.name.Names;
7476
import com.typesafe.config.Config;
7577
import com.typesafe.config.ConfigFactory;
78+
import com.typesafe.config.ConfigParseOptions;
79+
import com.typesafe.config.ConfigSyntax;
7680
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
7781

7882
import java.io.File;
83+
import java.io.IOException;
7984
import java.util.Collections;
8085
import java.util.Locale;
8186
import java.util.Map;
@@ -117,7 +122,19 @@ protected void configure() {
117122
@Named("akka-config")
118123
@SuppressFBWarnings("UPM_UNCALLED_PRIVATE_METHOD") // Invoked reflectively by Guice
119124
private Config provideAkkaConfig() {
120-
return ConfigFactory.parseMap(_configuration.getAkkaConfiguration(), _configuration.toString());
125+
// This is necessary because the keys contain periods which when
126+
// transforming from a map are considered compound path elements. By
127+
// rendering to JSON and then parsing it this forces the keys to be
128+
// quoted and thus considered single path elements even with periods.
129+
try {
130+
final String akkaJsonConfig = OBJECT_MAPPER.writeValueAsString(_configuration.getAkkaConfiguration());
131+
return ConfigFactory.parseString(
132+
akkaJsonConfig,
133+
ConfigParseOptions.defaults()
134+
.setSyntax(ConfigSyntax.JSON));
135+
} catch (final IOException e) {
136+
throw Throwables.propagate(e);
137+
}
121138
}
122139

123140
@Provides
@@ -362,10 +379,10 @@ private PartitionSet provideDatabasePartitionSet(@Named("metrics_clusteragg") fi
362379
return new DatabasePartitionSet(database, partitionSet);
363380
}
364381

365-
366382
private final ClusterAggregatorConfiguration _configuration;
367383

368384
private static final String HOCON_FILE_EXTENSION = ".hocon";
385+
private static final ObjectMapper OBJECT_MAPPER = ObjectMapperFactory.getInstance();
369386

370387
private static final class RoundRobinEmitterFactory implements ConfiguredLaunchableFactory<Props, EmitterConfiguration> {
371388

src/main/java/com/arpnetworking/clusteraggregator/models/StatusResponse.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,13 +295,17 @@ private static final class MemberSerializer extends JsonSerializer<Member> {
295295
* {@inheritDoc}
296296
*/
297297
@Override
298-
public void serialize(final Member value, final JsonGenerator gen, final SerializerProvider serializers) throws IOException {
298+
public void serialize(
299+
final Member value,
300+
final JsonGenerator gen,
301+
final SerializerProvider serializers)
302+
throws IOException {
299303
gen.writeStartObject();
300304
gen.writeStringField("address", value.address().toString());
301305
gen.writeObjectField("roles", JavaConversions.setAsJavaSet(value.roles()));
302306
gen.writeNumberField("upNumber", value.upNumber());
303307
gen.writeStringField("status", value.status().toString());
304-
gen.writeNumberField("uniqueAddress", value.uniqueAddress().uid());
308+
gen.writeNumberField("uniqueAddress", value.uniqueAddress().longUid());
305309
gen.writeEndObject();
306310
}
307311
}

0 commit comments

Comments
 (0)