Skip to content

Commit 0573b39

Browse files
authored
Get rid of commons (#849)
* Removed RetryNonSerializedEmitFailureHandler * Removed dependency on commons * Added `Address` (copied from commons)
1 parent eda1057 commit 0573b39

File tree

50 files changed

+241
-130
lines changed

Some content is hidden

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

50 files changed

+241
-130
lines changed

pom.xml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
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/maven-v4_0_0.xsd">
35
<modelVersion>4.0.0</modelVersion>
46

57
<parent>
@@ -57,8 +59,7 @@
5759
</scm>
5860

5961
<properties>
60-
<scalecube-cluster.version>2.6.17</scalecube-cluster.version>
61-
<scalecube-commons.version>1.0.24</scalecube-commons.version>
62+
<scalecube-cluster.version>2.6.18.rc1</scalecube-cluster.version>
6263
<scalecube-security.version>1.0.32</scalecube-security.version>
6364

6465
<reactor.version>2020.0.32</reactor.version>
@@ -93,13 +94,6 @@
9394

9495
<dependencyManagement>
9596
<dependencies>
96-
<!-- Scalecube commons -->
97-
<dependency>
98-
<groupId>io.scalecube</groupId>
99-
<artifactId>scalecube-commons</artifactId>
100-
<version>${scalecube-commons.version}</version>
101-
</dependency>
102-
10397
<!-- Scalecube security tokens -->
10498
<dependency>
10599
<groupId>io.scalecube</groupId>

services-api/pom.xml

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
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">
35

46
<modelVersion>4.0.0</modelVersion>
57

@@ -11,20 +13,11 @@
1113

1214
<artifactId>scalecube-services-api</artifactId>
1315

14-
<properties>
15-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16-
</properties>
17-
1816
<dependencies>
19-
<dependency>
20-
<groupId>io.scalecube</groupId>
21-
<artifactId>scalecube-commons</artifactId>
22-
</dependency>
2317
<dependency>
2418
<groupId>io.projectreactor</groupId>
2519
<artifactId>reactor-core</artifactId>
2620
</dependency>
27-
2821
<dependency>
2922
<groupId>org.slf4j</groupId>
3023
<artifactId>slf4j-api</artifactId>
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
package io.scalecube.services;
2+
3+
import java.net.InetAddress;
4+
import java.net.UnknownHostException;
5+
import java.util.Objects;
6+
import java.util.regex.Matcher;
7+
import java.util.regex.Pattern;
8+
9+
public class Address {
10+
11+
public static final Address NULL_ADDRESS = Address.create("nullhost", 0);
12+
13+
public static final Pattern ADDRESS_FORMAT = Pattern.compile("(?<host>^.*):(?<port>\\d+$)");
14+
15+
private String host;
16+
private int port;
17+
18+
Address() {}
19+
20+
private Address(String host, int port) {
21+
this.host = host;
22+
this.port = port;
23+
}
24+
25+
/**
26+
* Parses given host:port string to create Address instance.
27+
*
28+
* @param hostandport must come in form {@code host:port}
29+
*/
30+
public static Address from(String hostandport) {
31+
if (hostandport == null || hostandport.isEmpty()) {
32+
throw new IllegalArgumentException("host-and-port string must be present");
33+
}
34+
35+
Matcher matcher = ADDRESS_FORMAT.matcher(hostandport);
36+
if (!matcher.find()) {
37+
throw new IllegalArgumentException("can't parse host-and-port string from: " + hostandport);
38+
}
39+
40+
String host = matcher.group(1);
41+
if (host == null || host.isEmpty()) {
42+
throw new IllegalArgumentException("can't parse host from: " + hostandport);
43+
}
44+
45+
int port;
46+
try {
47+
port = Integer.parseInt(matcher.group(2));
48+
} catch (NumberFormatException ex) {
49+
throw new IllegalArgumentException("can't parse port from: " + hostandport, ex);
50+
}
51+
52+
return new Address(host, port);
53+
}
54+
55+
/**
56+
* Create address from host and port.
57+
*
58+
* @param host host
59+
* @param port port
60+
* @return address
61+
*/
62+
public static Address create(String host, int port) {
63+
return new Address(host, port);
64+
}
65+
66+
/**
67+
* Getting local IP address by the address of local host. <b>NOTE:</b> returned IP address is
68+
* expected to be a publicly visible IP address.
69+
*
70+
* @throws RuntimeException wrapped {@link UnknownHostException}
71+
*/
72+
public static InetAddress getLocalIpAddress() {
73+
try {
74+
return InetAddress.getLocalHost();
75+
} catch (UnknownHostException e) {
76+
throw new RuntimeException(e);
77+
}
78+
}
79+
80+
/**
81+
* Returns host.
82+
*
83+
* @return host
84+
*/
85+
public String host() {
86+
return host;
87+
}
88+
89+
/**
90+
* Returns port.
91+
*
92+
* @return port
93+
*/
94+
public int port() {
95+
return port;
96+
}
97+
98+
/**
99+
* Returns new address instance with the specified port.
100+
*
101+
* @param port port
102+
* @return address instance
103+
*/
104+
public Address port(int port) {
105+
return Address.create(host, port);
106+
}
107+
108+
/**
109+
* Returns new address instance with applied port offset.
110+
*
111+
* @param portOffset portOffset
112+
* @return address instance
113+
*/
114+
public Address withPortOffset(int portOffset) {
115+
return Address.create(host, port + portOffset);
116+
}
117+
118+
@Override
119+
public boolean equals(Object other) {
120+
if (this == other) {
121+
return true;
122+
}
123+
if (other == null || getClass() != other.getClass()) {
124+
return false;
125+
}
126+
Address that = (Address) other;
127+
return Objects.equals(host, that.host) && Objects.equals(port, that.port);
128+
}
129+
130+
@Override
131+
public int hashCode() {
132+
return Objects.hash(host, port);
133+
}
134+
135+
@Override
136+
public String toString() {
137+
return host + ":" + port;
138+
}
139+
}

services-api/src/main/java/io/scalecube/services/ServiceEndpoint.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.scalecube.services;
22

3-
import io.scalecube.net.Address;
43
import java.io.Externalizable;
54
import java.io.IOException;
65
import java.io.ObjectInput;

services-api/src/main/java/io/scalecube/services/ServiceReference.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.scalecube.services;
22

3-
import io.scalecube.net.Address;
43
import io.scalecube.services.api.Qualifier;
54
import java.util.Collections;
65
import java.util.HashMap;

services-api/src/main/java/io/scalecube/services/discovery/api/ServiceDiscovery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.scalecube.services.discovery.api;
22

3-
import io.scalecube.net.Address;
3+
import io.scalecube.services.Address;
44
import reactor.core.publisher.Flux;
55

66
public interface ServiceDiscovery {

services-api/src/main/java/io/scalecube/services/gateway/Gateway.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.scalecube.services.gateway;
22

3-
import io.scalecube.net.Address;
3+
import io.scalecube.services.Address;
44
import reactor.core.publisher.Mono;
55

66
public interface Gateway {

services-api/src/main/java/io/scalecube/services/transport/api/ServerTransport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.scalecube.services.transport.api;
22

3-
import io.scalecube.net.Address;
3+
import io.scalecube.services.Address;
44

55
public interface ServerTransport {
66

services-discovery/src/main/java/io/scalecube/services/discovery/ScalecubeServiceDiscovery.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.scalecube.services.discovery;
22

3-
import static io.scalecube.reactor.RetryNonSerializedEmitFailureHandler.RETRY_NON_SERIALIZED;
43
import static io.scalecube.services.discovery.api.ServiceDiscoveryEvent.newEndpointAdded;
54
import static io.scalecube.services.discovery.api.ServiceDiscoveryEvent.newEndpointLeaving;
65
import static io.scalecube.services.discovery.api.ServiceDiscoveryEvent.newEndpointRemoved;
6+
import static reactor.core.publisher.Sinks.EmitFailureHandler.busyLooping;
77

88
import io.scalecube.cluster.Cluster;
99
import io.scalecube.cluster.ClusterConfig;
@@ -14,11 +14,12 @@
1414
import io.scalecube.cluster.membership.MembershipConfig;
1515
import io.scalecube.cluster.membership.MembershipEvent;
1616
import io.scalecube.cluster.transport.api.TransportConfig;
17-
import io.scalecube.net.Address;
17+
import io.scalecube.services.Address;
1818
import io.scalecube.services.ServiceEndpoint;
1919
import io.scalecube.services.discovery.api.ServiceDiscovery;
2020
import io.scalecube.services.discovery.api.ServiceDiscoveryEvent;
2121
import java.nio.ByteBuffer;
22+
import java.time.Duration;
2223
import java.util.StringJoiner;
2324
import java.util.function.UnaryOperator;
2425
import org.slf4j.Logger;
@@ -89,7 +90,7 @@ public void onMembershipEvent(MembershipEvent event) {
8990

9091
@Override
9192
public Address address() {
92-
return cluster != null ? cluster.address() : null;
93+
return cluster != null ? Address.from(cluster.address()) : null;
9394
}
9495

9596
@Override
@@ -99,7 +100,7 @@ public Flux<ServiceDiscoveryEvent> listen() {
99100

100101
@Override
101102
public void shutdown() {
102-
sink.emitComplete(RETRY_NON_SERIALIZED);
103+
sink.emitComplete(busyLooping(Duration.ofSeconds(3)));
103104
if (cluster != null) {
104105
cluster.shutdown();
105106
}
@@ -117,7 +118,7 @@ private void onMembershipEvent(MembershipEvent membershipEvent) {
117118
}
118119

119120
LOGGER.debug("Publish discoveryEvent: {}", discoveryEvent);
120-
sink.emitNext(discoveryEvent, RETRY_NON_SERIALIZED);
121+
sink.emitNext(discoveryEvent, busyLooping(Duration.ofSeconds(3)));
121122
}
122123

123124
private ServiceDiscoveryEvent toServiceDiscoveryEvent(MembershipEvent membershipEvent) {

services-discovery/src/test/java/io/scalecube/services/discovery/ScalecubeServiceDiscoveryTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import io.scalecube.cluster.membership.MembershipConfig;
1313
import io.scalecube.cluster.metadata.JdkMetadataCodec;
1414
import io.scalecube.cluster.metadata.MetadataCodec;
15-
import io.scalecube.net.Address;
15+
import io.scalecube.services.Address;
1616
import io.scalecube.services.ServiceEndpoint;
1717
import io.scalecube.services.ServiceMethodDefinition;
1818
import io.scalecube.services.ServiceRegistration;
@@ -234,13 +234,13 @@ private Mono<ServiceDiscovery> newServiceDiscovery(
234234
.gossip(cfg -> GOSSIP_CONFIG)
235235
.failureDetector(cfg -> FAILURE_DETECTOR_CONFIG)
236236
.membership(cfg -> MEMBERSHIP_CONFIG)
237-
.membership(cfg -> cfg.seedMembers(seedAddress)));
237+
.membership(cfg -> cfg.seedMembers(seedAddress.toString())));
238238
}
239239

240240
private void startSeed(MetadataCodec metadataCodec) {
241241
new ScalecubeServiceDiscovery()
242242
.transport(cfg -> cfg.transportFactory(new WebsocketTransportFactory()))
243-
.membership(opts -> opts.seedMembers(SEED_ADDRESS))
243+
.membership(opts -> opts.seedMembers(SEED_ADDRESS.toString()))
244244
.options(opts -> opts.metadata(newServiceEndpoint()))
245245
.options(opts -> opts.metadataCodec(metadataCodec))
246246
.gossip(cfg -> GOSSIP_CONFIG)

0 commit comments

Comments
 (0)