Skip to content

Commit 801c7d3

Browse files
committed
Deprecated MetadataEncoder/Decoder; ++ MetadataCode interface + impl
1 parent 3b7dfd2 commit 801c7d3

File tree

8 files changed

+50
-60
lines changed

8 files changed

+50
-60
lines changed

cluster-api/src/main/java/io/scalecube/cluster/Cluster.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.scalecube.cluster.transport.api.Message;
44
import io.scalecube.net.Address;
5-
import java.lang.reflect.Type;
65
import java.util.Collection;
76
import java.util.Optional;
87
import reactor.core.publisher.Mono;
@@ -74,24 +73,13 @@ public interface Cluster {
7473
*/
7574
<T> Optional<T> metadata();
7675

77-
/**
78-
* Returns cluster member metadata by given member. Deprecated since {@code 2.4.10} in favor of
79-
* {@link #metadata(Member, Type)}.
80-
*
81-
* @param member cluster member
82-
* @return cluster member metadata
83-
*/
84-
@Deprecated
85-
<T> Optional<T> metadata(Member member);
86-
8776
/**
8877
* Returns cluster member metadata by given member.
8978
*
9079
* @param member cluster member
91-
* @param type metadata type
9280
* @return cluster member metadata
9381
*/
94-
<T> Optional<T> metadata(Member member, Type type);
82+
<T> Optional<T> metadata(Member member);
9583

9684
/**
9785
* Returns local cluster member which corresponds to this cluster instance.

cluster-api/src/main/java/io/scalecube/cluster/metadata/MetadataCodec.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.scalecube.cluster.metadata;
22

33
import io.scalecube.utils.ServiceLoaderUtil;
4-
import java.lang.reflect.Type;
54
import java.nio.ByteBuffer;
65

76
/** Contains methods for metadata serializing/deserializing logic. */
@@ -13,10 +12,9 @@ public interface MetadataCodec {
1312
* Deserializes metadata from buffer.
1413
*
1514
* @param buffer metadata buffer; if {@code buffer} is empty then returned result shall be null.
16-
* @param type metadata object type
1715
* @return metadata object from metadata buffer or null
1816
*/
19-
Object deserialize(ByteBuffer buffer, Type type);
17+
Object deserialize(ByteBuffer buffer);
2018

2119
/**
2220
* Serializes given metadata into buffer.

cluster/src/main/java/io/scalecube/cluster/ClusterImpl.java

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import io.scalecube.net.Address;
2222
import io.scalecube.transport.netty.TransportImpl;
2323
import java.lang.management.ManagementFactory;
24-
import java.lang.reflect.Type;
24+
import java.nio.ByteBuffer;
2525
import java.util.Collection;
2626
import java.util.Collections;
2727
import java.util.Objects;
@@ -438,27 +438,16 @@ public <T> Optional<T> metadata(Member member) {
438438
if (member().equals(member)) {
439439
return metadata();
440440
}
441-
return metadataStore
442-
.metadata(member)
443-
.map(
444-
buffer -> {
445-
//noinspection unchecked
446-
return (T) config.metadataDecoder().decode(buffer);
447-
});
441+
return metadataStore.metadata(member).map(this::toMetadata);
448442
}
449443

450-
@Override
451-
public <T> Optional<T> metadata(Member member, Type type) {
452-
if (member().equals(member)) {
453-
return metadata();
444+
@SuppressWarnings("unchecked")
445+
private <T> T toMetadata(ByteBuffer buffer) {
446+
if (config.metadataDecoder() != null) {
447+
return (T) config.metadataDecoder().decode(buffer);
448+
} else {
449+
return (T) config.metadataCodec().deserialize(buffer);
454450
}
455-
return metadataStore
456-
.metadata(member)
457-
.map(
458-
buffer -> {
459-
//noinspection unchecked
460-
return (T) config.metadataCodec().deserialize(buffer, type);
461-
});
462451
}
463452

464453
@Override

cluster/src/test/java/io/scalecube/cluster/ClusterTest.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public void onMembershipEvent(MembershipEvent event) {
226226
Optional<Member> memberOptional = node.member(metadataNode.member().id());
227227
assertTrue(memberOptional.isPresent());
228228
Member member = memberOptional.get();
229-
assertEquals(metadata, node.metadata(member, Map.class).orElse(null));
229+
assertEquals(metadata, node.metadata(member).orElse(null));
230230
}
231231

232232
// Update metadata
@@ -238,7 +238,7 @@ public void onMembershipEvent(MembershipEvent event) {
238238
Optional<Member> memberOptional = node.member(metadataNode.member().id());
239239
assertTrue(memberOptional.isPresent());
240240
Member member = memberOptional.get();
241-
assertEquals(updatedMetadata, node.metadata(member, Map.class).orElse(null));
241+
assertEquals(updatedMetadata, node.metadata(member).orElse(null));
242242
}
243243
} finally {
244244
// Shutdown all nodes
@@ -299,7 +299,7 @@ public void onMembershipEvent(MembershipEvent event) {
299299
Optional<Member> memberOptional = node.member(metadataNode.member().id());
300300
assertTrue(memberOptional.isPresent());
301301
Member member = memberOptional.get();
302-
assertEquals(metadata, node.metadata(member, Map.class).orElse(null));
302+
assertEquals(metadata, node.metadata(member).orElse(null));
303303
}
304304

305305
// Update metadata
@@ -313,8 +313,7 @@ public void onMembershipEvent(MembershipEvent event) {
313313
assertTrue(memberOptional.isPresent());
314314
Member member = memberOptional.get();
315315
//noinspection unchecked,OptionalGetWithoutIsPresent
316-
Map<String, String> actualMetadata =
317-
(Map<String, String>) node.metadata(member, Map.class).get();
316+
Map<String, String> actualMetadata = (Map<String, String>) node.metadata(member).get();
318317
assertEquals(2, actualMetadata.size());
319318
assertEquals("value1", actualMetadata.get("key1"));
320319
assertEquals("value3", actualMetadata.get("key2"));
@@ -378,7 +377,7 @@ public void onMembershipEvent(MembershipEvent event) {
378377
Optional<Member> memberOptional = node.member(metadataNode.member().id());
379378
assertTrue(memberOptional.isPresent());
380379
Member member = memberOptional.get();
381-
assertEquals(metadata, node.metadata(member, Map.class).orElse(null));
380+
assertEquals(metadata, node.metadata(member).orElse(null));
382381
}
383382

384383
// Update metadata
@@ -393,8 +392,7 @@ public void onMembershipEvent(MembershipEvent event) {
393392
assertTrue(memberOptional.isPresent());
394393
Member member = memberOptional.get();
395394
//noinspection unchecked,OptionalGetWithoutIsPresent
396-
Map<String, String> actualMetadata =
397-
(Map<String, String>) node.metadata(member, Map.class).get();
395+
Map<String, String> actualMetadata = (Map<String, String>) node.metadata(member).get();
398396
assertEquals(1, actualMetadata.size());
399397
assertEquals("value1", actualMetadata.get("key1"));
400398
assertNull(actualMetadata.get("key2"));
@@ -503,8 +501,8 @@ public void onMembershipEvent(MembershipEvent event) {
503501
assertEquals(Type.ADDED, seedAddedEvent.type());
504502

505503
// Check metadata
506-
assertEquals(node1Metadata, seedNode.metadata(node1.member(), Map.class).orElse(null));
507-
assertEquals(seedMetadata, node1.metadata(seedNode.member(), Map.class).orElse(null));
504+
assertEquals(node1Metadata, seedNode.metadata(node1.member()).orElse(null));
505+
assertEquals(seedMetadata, node1.metadata(seedNode.member()).orElse(null));
508506

509507
// Remove node1 from cluster
510508
CountDownLatch latch = new CountDownLatch(1);
@@ -513,7 +511,7 @@ public void onMembershipEvent(MembershipEvent event) {
513511
.filter(MembershipEvent::isRemoved)
514512
.subscribe(
515513
event -> {
516-
Object metadata = MetadataCodec.INSTANCE.deserialize(event.oldMetadata(), Map.class);
514+
Object metadata = MetadataCodec.INSTANCE.deserialize(event.oldMetadata());
517515
//noinspection unchecked
518516
removedMetadata.set((Map<String, String>) metadata);
519517
latch.countDown();

codec-parent/codec-jackson/src/main/java/io/scalecube/cluster/codec/jackson/DefaultObjectMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private static ObjectMapper initMapper() {
3030
mapper.enableDefaultTyping(
3131
LaissezFaireSubTypeValidator.instance,
3232
DefaultTyping.JAVA_LANG_OBJECT,
33-
JsonTypeInfo.As.PROPERTY);
33+
JsonTypeInfo.As.WRAPPER_OBJECT);
3434
return mapper;
3535
}
3636
}

codec-parent/codec-jackson/src/main/java/io/scalecube/cluster/codec/jackson/JacksonMetadataCodec.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import io.scalecube.cluster.metadata.MetadataCodec;
55
import java.io.IOException;
6-
import java.lang.reflect.Type;
76
import java.nio.ByteBuffer;
87
import reactor.core.Exceptions;
98

@@ -25,13 +24,14 @@ public JacksonMetadataCodec() {
2524
}
2625

2726
@Override
28-
public Object deserialize(ByteBuffer buffer, Type type) {
27+
public Object deserialize(ByteBuffer buffer) {
2928
if (buffer.remaining() == 0) {
3029
return null;
3130
}
3231
try {
33-
return this.delegate.readValue(
34-
buffer.array(), this.delegate.getTypeFactory().constructType(type));
32+
final MetadataWrapper metadataWrapper =
33+
this.delegate.readValue(buffer.array(), MetadataWrapper.class);
34+
return metadataWrapper.getMetadata();
3535
} catch (IOException e) {
3636
throw Exceptions.propagate(e);
3737
}
@@ -43,9 +43,29 @@ public ByteBuffer serialize(Object metadata) {
4343
return null;
4444
}
4545
try {
46-
return ByteBuffer.wrap(this.delegate.writeValueAsBytes(metadata));
46+
final MetadataWrapper metadataWrapper = new MetadataWrapper(metadata);
47+
return ByteBuffer.wrap(this.delegate.writeValueAsBytes(metadataWrapper));
4748
} catch (IOException e) {
4849
throw Exceptions.propagate(e);
4950
}
5051
}
52+
53+
public static class MetadataWrapper {
54+
55+
private Object metadata;
56+
57+
public MetadataWrapper() {}
58+
59+
public MetadataWrapper(Object metadata) {
60+
this.metadata = metadata;
61+
}
62+
63+
public Object getMetadata() {
64+
return metadata;
65+
}
66+
67+
public void setMetadata(Object metadata) {
68+
this.metadata = metadata;
69+
}
70+
}
5171
}

examples/src/main/java/io/scalecube/examples/ClusterCustomMetadataEncodingExample.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
import io.scalecube.cluster.Cluster;
44
import io.scalecube.cluster.ClusterImpl;
55
import io.scalecube.cluster.metadata.MetadataCodec;
6-
import java.lang.reflect.Type;
76
import java.nio.ByteBuffer;
8-
import java.util.Map;
97
import java.util.concurrent.TimeUnit;
108

119
public class ClusterCustomMetadataEncodingExample {
@@ -40,23 +38,23 @@ public static void main(String[] args) throws Exception {
4038
.otherMembers()
4139
.forEach(
4240
member -> {
43-
Long metadata = (Long) alice.metadata(member, Map.class).orElse(null);
41+
Long metadata = (Long) alice.metadata(member).orElse(null);
4442
System.out.println(
4543
"Alice knows [" + member.id() + "] has `" + metadata + "` as a metadata");
4644
});
4745

4846
joe.otherMembers()
4947
.forEach(
5048
member -> {
51-
Long metadata = (Long) alice.metadata(member, Map.class).orElse(null);
49+
Long metadata = (Long) alice.metadata(member).orElse(null);
5250
System.out.println(
5351
"Joe knows [" + member.id() + "] has `" + metadata + "` as a metadata");
5452
});
5553

5654
bob.otherMembers()
5755
.forEach(
5856
member -> {
59-
Long metadata = (Long) alice.metadata(member, Map.class).orElse(null);
57+
Long metadata = (Long) alice.metadata(member).orElse(null);
6058
System.out.println(
6159
"Bob knows [" + member.id() + "] has `" + metadata + "` as a metadata");
6260
});
@@ -67,7 +65,7 @@ public static void main(String[] args) throws Exception {
6765
static class LongMetadataCodec implements MetadataCodec {
6866

6967
@Override
70-
public Object deserialize(ByteBuffer buffer, Type type) {
68+
public Object deserialize(ByteBuffer buffer) {
7169
return buffer.remaining() == 0 ? null : buffer.getLong();
7270
}
7371

examples/src/main/java/io/scalecube/examples/ClusterMetadataExample.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ public void onMessage(Message message) {
4949
.filter(
5050
member -> {
5151
//noinspection unchecked,OptionalGetWithoutIsPresent
52-
Map<String, String> metadata =
53-
(Map<String, String>) alice.metadata(member, Map.class).get();
52+
Map<String, String> metadata = (Map<String, String>) alice.metadata(member).get();
5453
return "Joe".equals(metadata.get("name"));
5554
})
5655
.findAny();

0 commit comments

Comments
 (0)