Skip to content

Commit 6be65e8

Browse files
authored
Merge pull request #305 from scalecube/develop
New release
2 parents 4ce8f93 + d39589a commit 6be65e8

File tree

66 files changed

+1570
-559
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1570
-559
lines changed

.github/release-drafter.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
template: |
2+
## What’s Changed
3+
4+
$CHANGES

.travis.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
env:
2+
global:
3+
- clusterTransport=warn
4+
- clusterFdetector=warn
5+
- clusterGossip=warn
6+
- clusterMembership=warn
7+
- clusterMetadata=warn
8+
- clusterUtils=warn
19
addons:
210
apt:
311
packages:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public interface Cluster {
7474
<T> Optional<T> metadata();
7575

7676
/**
77-
* Returns cluster member metadata by given member with default metadata type.
77+
* Returns cluster member metadata by given member.
7878
*
7979
* @param member cluster member
8080
* @return cluster member metadata

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

Lines changed: 119 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.scalecube.cluster.fdetector.FailureDetectorConfig;
44
import io.scalecube.cluster.gossip.GossipConfig;
55
import io.scalecube.cluster.membership.MembershipConfig;
6+
import io.scalecube.cluster.metadata.MetadataCodec;
67
import io.scalecube.cluster.metadata.MetadataDecoder;
78
import io.scalecube.cluster.metadata.MetadataEncoder;
89
import io.scalecube.cluster.transport.api.TransportConfig;
@@ -32,12 +33,13 @@ public final class ClusterConfig implements Cloneable {
3233

3334
private Object metadata;
3435
private int metadataTimeout = DEFAULT_METADATA_TIMEOUT;
36+
private MetadataCodec metadataCodec = MetadataCodec.INSTANCE;
3537
private MetadataEncoder metadataEncoder = MetadataEncoder.INSTANCE;
3638
private MetadataDecoder metadataDecoder = MetadataDecoder.INSTANCE;
3739

3840
private String memberAlias;
39-
private String memberHost;
40-
private Integer memberPort;
41+
private String containerHost;
42+
private Integer containerPort;
4143

4244
private TransportConfig transportConfig = TransportConfig.defaultConfig();
4345
private FailureDetectorConfig failureDetectorConfig = FailureDetectorConfig.defaultConfig();
@@ -93,7 +95,7 @@ public <T> T metadata() {
9395
}
9496

9597
/**
96-
* Sets a metadata.
98+
* Setter for metadata.
9799
*
98100
* @param metadata metadata
99101
* @return new {@code ClusterConfig} instance
@@ -109,7 +111,7 @@ public int metadataTimeout() {
109111
}
110112

111113
/**
112-
* Sets a metadataTimeout.
114+
* Setter for metadataTimeout.
113115
*
114116
* @param metadataTimeout metadata timeout
115117
* @return new {@code ClusterConfig} instance
@@ -120,60 +122,129 @@ public ClusterConfig metadataTimeout(int metadataTimeout) {
120122
return c;
121123
}
122124

125+
public MetadataCodec metadataCodec() {
126+
return metadataCodec;
127+
}
128+
129+
/**
130+
* Setter for metadataCodec.
131+
*
132+
* @param metadataCodec metadata codec
133+
* @return new {@code ClusterConfig} instance
134+
*/
135+
public ClusterConfig metadataCodec(MetadataCodec metadataCodec) {
136+
ClusterConfig c = clone();
137+
c.metadataCodec = metadataCodec;
138+
return c;
139+
}
140+
141+
/**
142+
* Deprecated since {@code 2.4.10} in favor of {@link MetadataCodec}.
143+
*
144+
* @return metadataEncoder
145+
*/
146+
@Deprecated
123147
public MetadataEncoder metadataEncoder() {
124148
return metadataEncoder;
125149
}
126150

127151
/**
128-
* Sets a metadataEncoder.
152+
* Setter for metadataEncoder. Deprecated since {@code 2.4.10} in favor of {@link MetadataCodec}.
129153
*
130154
* @param metadataEncoder metadata encoder
131155
* @return new {@code ClusterConfig} instance
132156
*/
157+
@Deprecated
133158
public ClusterConfig metadataEncoder(MetadataEncoder metadataEncoder) {
134159
ClusterConfig c = clone();
135160
c.metadataEncoder = metadataEncoder;
136161
return c;
137162
}
138163

164+
/**
165+
* Deprecated since {@code 2.4.10} in favor of {@link MetadataCodec}.
166+
*
167+
* @return metadataDecoder
168+
*/
169+
@Deprecated
139170
public MetadataDecoder metadataDecoder() {
140171
return metadataDecoder;
141172
}
142173

143174
/**
144-
* Sets a metadataDecoder.
175+
* Setter for metadataDecoder. Deprecated since {@code 2.4.10} in favor of {@link MetadataCodec}.
145176
*
146177
* @param metadataDecoder metadata decoder
147178
* @return new {@code ClusterConfig} instance
148179
*/
180+
@Deprecated
149181
public ClusterConfig metadataDecoder(MetadataDecoder metadataDecoder) {
150182
ClusterConfig c = clone();
151183
c.metadataDecoder = metadataDecoder;
152184
return c;
153185
}
154186

187+
/**
188+
* Deprecated since {@code 2.4.10} in favor of {@link #containerHost()}.
189+
*
190+
* @return member host
191+
*/
192+
@Deprecated
155193
public String memberHost() {
156-
return memberHost;
194+
return containerHost;
157195
}
158196

159197
/**
160-
* Sets a memberHost.
198+
* Deprecated since {@code 2.4.10} in favor of {@link #containerHost(String)}.
161199
*
162200
* @param memberHost member host
163201
* @return new {@code ClusterConfig} instance
164202
*/
203+
@Deprecated
165204
public ClusterConfig memberHost(String memberHost) {
166205
ClusterConfig c = clone();
167-
c.memberHost = memberHost;
206+
c.containerHost = memberHost;
168207
return c;
169208
}
170209

210+
/**
211+
* Returns mappedHost. {@code mappedHost} is a config property for container environments, it's
212+
* being set for advertising to scalecube cluster some connectable hostname which maps to
213+
* scalecube transport's hostname on which scalecube transport is listening.
214+
*
215+
* @return mapped host
216+
*/
217+
public String containerHost() {
218+
return containerHost;
219+
}
220+
221+
/**
222+
* Setter for mappedHost. {@code mappedHost} is a config property for container environments, it's
223+
* being set for advertising to scalecube cluster some connectable hostname which maps to
224+
* scalecube transport's hostname on which scalecube transport is listening.
225+
*
226+
* @param mappedHost mapped host
227+
* @return new {@code ClusterConfig} instance
228+
*/
229+
public ClusterConfig containerHost(String mappedHost) {
230+
ClusterConfig c = clone();
231+
c.containerHost = mappedHost;
232+
return c;
233+
}
234+
235+
/**
236+
* Returns memberAlias. {@code memberAlias} is a config property which facilitates {@link
237+
* io.scalecube.cluster.Member#toString()}.
238+
*
239+
* @return member alias.
240+
*/
171241
public String memberAlias() {
172242
return memberAlias;
173243
}
174244

175245
/**
176-
* Sets a memberAlias.
246+
* Setter for memberAlias. {@code memberAlias} is a config property which facilitates {@link
247+
* io.scalecube.cluster.Member#toString()}.
177248
*
178249
* @param memberAlias member alias
179250
* @return new {@code ClusterConfig} instance
@@ -184,19 +255,51 @@ public ClusterConfig memberAlias(String memberAlias) {
184255
return c;
185256
}
186257

258+
/**
259+
* Returns mappedPort. {@code mappedPort} is a config property for container environments, it's
260+
* being set for advertising to scalecube cluster a port which mapped to scalecube transport's
261+
* listening port.
262+
*
263+
* @return mapped port
264+
*/
265+
public Integer containerPort() {
266+
return containerPort;
267+
}
268+
269+
/**
270+
* Setter for mappedPort. {@code mappedPort} is a config property for container environments, it's
271+
* being set for advertising to scalecube cluster a port which mapped to scalecube transport's
272+
* listening port.
273+
*
274+
* @param mappedPort mapped port
275+
* @return new {@code ClusterConfig} instance
276+
*/
277+
public ClusterConfig containerPort(Integer mappedPort) {
278+
ClusterConfig c = clone();
279+
c.containerPort = mappedPort;
280+
return c;
281+
}
282+
283+
/**
284+
* Deprecated since {@code 2.4.10} in favor of {@link #containerPort()}.
285+
*
286+
* @return member port
287+
*/
288+
@Deprecated
187289
public Integer memberPort() {
188-
return memberPort;
290+
return containerPort;
189291
}
190292

191293
/**
192-
* Sets a memberPort.
294+
* Deprecated since {@code 2.4.10} in favor of {@link #containerPort(Integer)}.
193295
*
194296
* @param memberPort member port
195297
* @return new {@code ClusterConfig} instance
196298
*/
299+
@Deprecated
197300
public ClusterConfig memberPort(Integer memberPort) {
198301
ClusterConfig c = clone();
199-
c.memberPort = memberPort;
302+
c.containerPort = memberPort;
200303
return c;
201304
}
202305

@@ -283,11 +386,12 @@ public String toString() {
283386
return new StringJoiner(", ", ClusterConfig.class.getSimpleName() + "[", "]")
284387
.add("metadata=" + metadataAsString())
285388
.add("metadataTimeout=" + metadataTimeout)
389+
.add("metadataCodec=" + metadataCodec)
286390
.add("metadataEncoder=" + metadataEncoder)
287391
.add("metadataDecoder=" + metadataDecoder)
288392
.add("memberAlias='" + memberAlias + "'")
289-
.add("memberHost='" + memberHost + "'")
290-
.add("memberPort=" + memberPort)
393+
.add("containerHost='" + containerHost + "'")
394+
.add("containerPort=" + containerPort)
291395
.add("transportConfig=" + transportConfig)
292396
.add("failureDetectorConfig=" + failureDetectorConfig)
293397
.add("gossipConfig=" + gossipConfig)

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

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
package io.scalecube.cluster;
22

33
import io.scalecube.net.Address;
4+
import java.io.Externalizable;
5+
import java.io.IOException;
6+
import java.io.ObjectInput;
7+
import java.io.ObjectOutput;
48
import java.util.Objects;
59
import java.util.UUID;
610

711
/**
812
* Cluster member which represents node in the cluster and contains its id and address. This class
913
* is essentially immutable.
1014
*/
11-
public final class Member {
15+
public final class Member implements Externalizable {
16+
17+
private static final long serialVersionUID = 1L;
1218

1319
private String id;
1420
private String alias;
1521
private Address address;
1622

17-
/** Instantiates empty member for deserialization purpose. */
18-
Member() {}
23+
public Member() {}
1924

2025
/**
2126
* Constructor.
@@ -63,6 +68,33 @@ public int hashCode() {
6368
return Objects.hash(id, address);
6469
}
6570

71+
@Override
72+
public void writeExternal(ObjectOutput out) throws IOException {
73+
// id
74+
out.writeUTF(id);
75+
// alias
76+
boolean aliasNotNull = alias != null;
77+
out.writeBoolean(aliasNotNull);
78+
if (aliasNotNull) {
79+
out.writeUTF(alias);
80+
}
81+
// address
82+
out.writeUTF(address.toString());
83+
}
84+
85+
@Override
86+
public void readExternal(ObjectInput in) throws IOException {
87+
// id
88+
id = in.readUTF();
89+
// alias
90+
boolean aliasNotNull = in.readBoolean();
91+
if (aliasNotNull) {
92+
alias = in.readUTF();
93+
}
94+
// address
95+
address = Address.from(in.readUTF());
96+
}
97+
6698
@Override
6799
public String toString() {
68100
if (alias == null) {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.scalecube.cluster.metadata;
2+
3+
import java.io.ByteArrayInputStream;
4+
import java.io.ByteArrayOutputStream;
5+
import java.io.ObjectInputStream;
6+
import java.io.ObjectOutputStream;
7+
import java.nio.ByteBuffer;
8+
import reactor.core.Exceptions;
9+
10+
public class JdkMetadataCodec implements MetadataCodec {
11+
12+
@Override
13+
public Object deserialize(ByteBuffer buffer) {
14+
byte[] bytes = buffer.array();
15+
try (ObjectInputStream is = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
16+
return is.readObject();
17+
} catch (Exception e) {
18+
throw Exceptions.propagate(e);
19+
}
20+
}
21+
22+
@Override
23+
public ByteBuffer serialize(Object metadata) {
24+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
25+
try (ObjectOutputStream os = new ObjectOutputStream(baos)) {
26+
os.writeObject(metadata);
27+
os.flush();
28+
return ByteBuffer.wrap(baos.toByteArray());
29+
} catch (Exception e) {
30+
throw Exceptions.propagate(e);
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)