Skip to content

Commit b666666

Browse files
authored
Merge pull request #380 from rpuch/configure-local-member-id-explicitly
Make local member ID explicitly configurable via ClusterConfig
2 parents 4c8d351 + f0b1c5a commit b666666

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public final class ClusterConfig implements Cloneable {
3333
private int metadataTimeout = DEFAULT_METADATA_TIMEOUT;
3434
private MetadataCodec metadataCodec = MetadataCodec.INSTANCE;
3535

36+
private String memberId;
3637
private String memberAlias;
3738
private String externalHost;
3839
private Integer externalPort;
@@ -159,6 +160,28 @@ public ClusterConfig externalHost(String externalHost) {
159160
return c;
160161
}
161162

163+
/**
164+
* Returns ID to use for the local member. If {@code null}, the ID will be generated
165+
* automatically.
166+
*
167+
* @return local member ID.
168+
*/
169+
public String memberId() {
170+
return memberId;
171+
}
172+
173+
/**
174+
* Sets ID to use for the local member. If {@code null}, the ID will be generated automatically.
175+
*
176+
* @param memberId local member ID
177+
* @return new {@code ClusterConfig} instance
178+
*/
179+
public ClusterConfig memberId(String memberId) {
180+
ClusterConfig c = clone();
181+
c.memberId = memberId;
182+
return c;
183+
}
184+
162185
/**
163186
* Returns memberAlias. {@code memberAlias} is a config property which facilitates {@link
164187
* io.scalecube.cluster.Member#toString()}.
@@ -291,6 +314,7 @@ public String toString() {
291314
.add("metadata=" + metadataAsString())
292315
.add("metadataTimeout=" + metadataTimeout)
293316
.add("metadataCodec=" + metadataCodec)
317+
.add("memberId='" + memberId + "'")
294318
.add("memberAlias='" + memberAlias + "'")
295319
.add("externalHost='" + externalHost + "'")
296320
.add("externalPort=" + externalPort)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ private Member createLocalMember(Address address) {
378378
.orElseGet(() -> Address.create(address.host(), port));
379379

380380
return new Member(
381-
UUID.randomUUID().toString(),
381+
config.memberId() != null ? config.memberId() : UUID.randomUUID().toString(),
382382
config.memberAlias(),
383383
memberAddress,
384384
config.membershipConfig().namespace());

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,4 +587,23 @@ private void shutdown(List<Cluster> nodes) {
587587
LOGGER.error("Exception on cluster shutdown", ex);
588588
}
589589
}
590+
591+
@Test
592+
public void testExplicitLocalMemberId() {
593+
ClusterConfig config = ClusterConfig.defaultConfig()
594+
.memberId("test-member");
595+
596+
ClusterImpl cluster = null;
597+
try {
598+
cluster = (ClusterImpl) new ClusterImpl(config)
599+
.transportFactory(TcpTransportFactory::new)
600+
.startAwait();
601+
602+
assertEquals("test-member", cluster.member().id());
603+
} finally {
604+
if (cluster != null) {
605+
shutdown(Arrays.asList(cluster));
606+
}
607+
}
608+
}
590609
}

0 commit comments

Comments
 (0)