Skip to content

Commit cfe1294

Browse files
authored
Merge pull request #300 from scalecube/feature/jackson-smile
Feature/jackson smile
2 parents 42a988d + 319734e commit cfe1294

File tree

19 files changed

+424
-60
lines changed

19 files changed

+424
-60
lines changed

cluster/src/main/java/io/scalecube/cluster/fdetector/FailureDetectorImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private void doPing() {
151151
publishPingResult(period, pingMember, computeMemberStatus(message, period));
152152
},
153153
ex -> {
154-
LOGGER.warn(
154+
LOGGER.debug(
155155
"[{}][{}] Failed to get PingAck from {} within {} ms",
156156
localMember,
157157
period,
@@ -198,7 +198,7 @@ private void doPingReq(
198198
publishPingResult(period, pingMember, computeMemberStatus(message, period));
199199
},
200200
throwable -> {
201-
LOGGER.warn(
201+
LOGGER.debug(
202202
"[{}][{}] Timeout getting transit PingAck from {} to {} within {} ms",
203203
localMember,
204204
period,
@@ -250,7 +250,7 @@ private void onPing(Message message) {
250250
.subscribe(
251251
null,
252252
ex ->
253-
LOGGER.warn(
253+
LOGGER.debug(
254254
"[{}][{}] Failed to send PingAck to {}, cause: {}",
255255
localMember,
256256
period,
@@ -276,7 +276,7 @@ private void onPingReq(Message message) {
276276
.subscribe(
277277
null,
278278
ex ->
279-
LOGGER.warn(
279+
LOGGER.debug(
280280
"[{}][{}] Failed to send transit Ping to {}, cause: {}",
281281
localMember,
282282
period,
@@ -306,7 +306,7 @@ private void onTransitPingAck(Message message) {
306306
.subscribe(
307307
null,
308308
ex ->
309-
LOGGER.warn(
309+
LOGGER.debug(
310310
"[{}][{}] Failed to resend transit PingAck to {}, cause: {}",
311311
localMember,
312312
period,

cluster/src/main/java/io/scalecube/cluster/gossip/GossipProtocolImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ private void spreadGossipsTo(long period, Member member) {
299299
.subscribe(
300300
null,
301301
ex ->
302-
LOGGER.warn(
302+
LOGGER.debug(
303303
"[{}][{}] Failed to send GossipReq({}) to {}, cause: {}",
304304
localMember,
305305
period,

cluster/src/main/java/io/scalecube/cluster/membership/MembershipProtocolImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ private void start0(MonoSink<Object> sink) {
289289
.subscribe(
290290
null,
291291
ex ->
292-
LOGGER.warn(
292+
LOGGER.debug(
293293
"[{}] Exception on initial SyncAck, cause: {}", localMember, ex.toString()));
294294
}
295295

@@ -352,7 +352,7 @@ private void doSync() {
352352
.subscribe(
353353
null,
354354
ex ->
355-
LOGGER.warn(
355+
LOGGER.debug(
356356
"[{}][doSync] Failed to send Sync to {}, cause: {}",
357357
localMember,
358358
address,
@@ -403,7 +403,7 @@ private Mono<Void> onSync(Message syncMsg) {
403403
.subscribe(
404404
null,
405405
ex ->
406-
LOGGER.warn(
406+
LOGGER.debug(
407407
"[{}] Failed to send SyncAck to {}, cause: {}",
408408
localMember,
409409
sender,
@@ -433,7 +433,7 @@ private void onFailureDetectorEvent(FailureDetectorEvent fdEvent) {
433433
.subscribe(
434434
null,
435435
ex ->
436-
LOGGER.warn(
436+
LOGGER.debug(
437437
"[{}][onFailureDetectorEvent] Failed to send Sync to {}, cause: {}",
438438
localMember,
439439
address,
@@ -794,7 +794,7 @@ private Mono<Void> spreadMembershipGossip(MembershipRecord r) {
794794
.spread(msg)
795795
.doOnError(
796796
ex ->
797-
LOGGER.warn(
797+
LOGGER.debug(
798798
"[{}] Failed to send membership with gossip, cause: {}",
799799
localMember,
800800
ex.toString()))
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>io.scalecube</groupId>
9+
<artifactId>scalecube-codec-parent</artifactId>
10+
<version>2.4.10-SNAPSHOT</version>
11+
</parent>
12+
13+
<artifactId>scalecube-codec-jackson-smile</artifactId>
14+
<name>ScaleCube/ClusterCodecJacksonSmile</name>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>com.fasterxml.jackson.dataformat</groupId>
19+
<artifactId>jackson-dataformat-smile</artifactId>
20+
</dependency>
21+
<dependency>
22+
<groupId>com.fasterxml.jackson.core</groupId>
23+
<artifactId>jackson-core</artifactId>
24+
</dependency>
25+
<dependency>
26+
<groupId>com.fasterxml.jackson.core</groupId>
27+
<artifactId>jackson-databind</artifactId>
28+
</dependency>
29+
<dependency>
30+
<groupId>com.fasterxml.jackson.datatype</groupId>
31+
<artifactId>jackson-datatype-jsr310</artifactId>
32+
</dependency>
33+
</dependencies>
34+
35+
</project>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.scalecube.cluster.codec.jackson.smile;
2+
3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.JsonInclude;
5+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
6+
import com.fasterxml.jackson.annotation.PropertyAccessor;
7+
import com.fasterxml.jackson.databind.DeserializationFeature;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
10+
import com.fasterxml.jackson.databind.SerializationFeature;
11+
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
12+
import com.fasterxml.jackson.dataformat.smile.SmileFactory;
13+
14+
final class DefaultObjectMapper {
15+
16+
public static final ObjectMapper OBJECT_MAPPER = initMapper();
17+
18+
private DefaultObjectMapper() {
19+
// Do not instantiate
20+
}
21+
22+
private static ObjectMapper initMapper() {
23+
ObjectMapper mapper = new ObjectMapper(new SmileFactory());
24+
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
25+
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
26+
mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
27+
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
28+
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
29+
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
30+
mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
31+
mapper.enableDefaultTyping(
32+
LaissezFaireSubTypeValidator.instance,
33+
DefaultTyping.JAVA_LANG_OBJECT,
34+
JsonTypeInfo.As.WRAPPER_OBJECT);
35+
return mapper;
36+
}
37+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.scalecube.cluster.codec.jackson.smile;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import io.scalecube.cluster.transport.api.Message;
5+
import io.scalecube.cluster.transport.api.MessageCodec;
6+
import java.io.InputStream;
7+
import java.io.OutputStream;
8+
9+
public class JacksonSmileMessageCodec implements MessageCodec {
10+
11+
private final ObjectMapper delegate;
12+
13+
public JacksonSmileMessageCodec() {
14+
this(DefaultObjectMapper.OBJECT_MAPPER);
15+
}
16+
17+
public JacksonSmileMessageCodec(ObjectMapper delegate) {
18+
this.delegate = delegate;
19+
}
20+
21+
@Override
22+
public Message deserialize(InputStream stream) throws Exception {
23+
return this.delegate.readValue(stream, Message.class);
24+
}
25+
26+
@Override
27+
public void serialize(Message message, OutputStream stream) throws Exception {
28+
stream.write(this.delegate.writeValueAsBytes(message));
29+
}
30+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package io.scalecube.cluster.codec.jackson.smile;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import io.scalecube.cluster.metadata.MetadataCodec;
5+
import java.io.IOException;
6+
import java.nio.ByteBuffer;
7+
import reactor.core.Exceptions;
8+
9+
public class JacksonSmileMetadataCodec implements MetadataCodec {
10+
11+
private final ObjectMapper delegate;
12+
13+
public JacksonSmileMetadataCodec() {
14+
this(DefaultObjectMapper.OBJECT_MAPPER);
15+
}
16+
17+
public JacksonSmileMetadataCodec(ObjectMapper delegate) {
18+
this.delegate = delegate;
19+
}
20+
21+
@Override
22+
public Object deserialize(ByteBuffer buffer) {
23+
if (buffer.remaining() == 0) {
24+
return null;
25+
}
26+
try {
27+
final MetadataWrapper metadataWrapper =
28+
this.delegate.readValue(buffer.array(), MetadataWrapper.class);
29+
return metadataWrapper.getMetadata();
30+
} catch (IOException e) {
31+
throw Exceptions.propagate(e);
32+
}
33+
}
34+
35+
@Override
36+
public ByteBuffer serialize(Object metadata) {
37+
if (metadata == null) {
38+
return null;
39+
}
40+
try {
41+
final MetadataWrapper metadataWrapper = new MetadataWrapper(metadata);
42+
return ByteBuffer.wrap(this.delegate.writeValueAsBytes(metadataWrapper));
43+
} catch (IOException e) {
44+
throw Exceptions.propagate(e);
45+
}
46+
}
47+
48+
public static class MetadataWrapper {
49+
50+
private Object metadata;
51+
52+
public MetadataWrapper() {}
53+
54+
public MetadataWrapper(Object metadata) {
55+
this.metadata = metadata;
56+
}
57+
58+
public Object getMetadata() {
59+
return metadata;
60+
}
61+
62+
public void setMetadata(Object metadata) {
63+
this.metadata = metadata;
64+
}
65+
}
66+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.scalecube.cluster.codec.jackson.smile.JacksonSmileMetadataCodec
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.scalecube.cluster.codec.jackson.smile.JacksonSmileMessageCodec

0 commit comments

Comments
 (0)