From 2c6aba0da05300c9fd143f04f205098d69943304 Mon Sep 17 00:00:00 2001 From: Steven van Beelen Date: Thu, 26 Oct 2023 14:40:07 +0200 Subject: [PATCH 1/5] Adjust test to not update the local capabilities Adjust test to not update the local capabilities, as this reflects the behavior when a node never updates its capabilities since it has not command handlers #327 --- .../commandhandling/mode/RestCapabilityDiscoveryModeTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java b/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java index e9182eb..71a3f72 100644 --- a/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java +++ b/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java @@ -122,7 +122,6 @@ void testCapabilitiesReturnsLocalCapabilitiesIfServiceInstanceUriMatches() { @Test void testCapabilitiesGetsCapabilitiesThroughRestTemplate() { MemberCapabilities expectedCapabilities = new DefaultMemberCapabilities(LOAD_FACTOR, COMMAND_MESSAGE_FILTER); - testSubject.updateLocalCapabilities(localInstance, LOAD_FACTOR, COMMAND_MESSAGE_FILTER); URI testURI = URI.create("http://remote"); ServiceInstance testServiceInstance = mock(ServiceInstance.class); From 7e9ae3edaa4020b4aa7a14e9ff8a5581a6ba16af Mon Sep 17 00:00:00 2001 From: Steven van Beelen Date: Thu, 26 Oct 2023 14:41:14 +0200 Subject: [PATCH 2/5] Default the ServiceInstance to a fixed URI version i.o. null Default the ServiceInstance to a fixed URI version i.o. null. Doing so, #327 --- .../mode/AbstractCapabilityDiscoveryMode.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java b/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java index a839d48..4c161fe 100644 --- a/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java +++ b/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java @@ -18,8 +18,10 @@ import org.axonframework.commandhandling.distributed.CommandMessageFilter; import org.axonframework.common.AxonConfigurationException; +import org.springframework.cloud.client.DefaultServiceInstance; import org.springframework.cloud.client.ServiceInstance; +import java.net.URI; import java.util.concurrent.atomic.AtomicReference; /** @@ -42,7 +44,7 @@ public abstract class AbstractCapabilityDiscoveryMode builder) { builder.validate(); - localInstance = new AtomicReference<>(); + localInstance = new AtomicReference<>(NoopUriServiceInstance.INSTANCE); localCapabilities = new AtomicReference<>(DefaultMemberCapabilities.INCAPABLE_MEMBER); } @@ -76,4 +78,15 @@ protected abstract static class Builder { */ protected abstract void validate(); } + + private static class NoopUriServiceInstance extends DefaultServiceInstance { + + private static final ServiceInstance INSTANCE = new NoopUriServiceInstance(); + private static final URI FIXED_URI = URI.create(""); + + @Override + public URI getUri() { + return FIXED_URI; + } + } } From f181a056dd4f888e2c0596004bc544444b1810e4 Mon Sep 17 00:00:00 2001 From: Steven van Beelen Date: Thu, 26 Oct 2023 14:41:26 +0200 Subject: [PATCH 3/5] Drop test prefix from tests, as that's the new style Drop test prefix from tests, as that's the new style #327 --- .../mode/RestCapabilityDiscoveryModeTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java b/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java index 71a3f72..9f4ba80 100644 --- a/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java +++ b/springcloud/src/test/java/org/axonframework/extensions/springcloud/commandhandling/mode/RestCapabilityDiscoveryModeTest.java @@ -66,7 +66,7 @@ void setUp() { } @Test - void testGetLocalMemberCapabilitiesReturnsIncapableMemberIfLocalCapabilitiesIsNeverUpdated() { + void getLocalMemberCapabilitiesReturnsIncapableMemberIfLocalCapabilitiesIsNeverUpdated() { SerializedMemberCapabilities result = ((RestCapabilityDiscoveryMode) testSubject).getLocalMemberCapabilities(); DefaultMemberCapabilities deserializableResult = @@ -76,7 +76,7 @@ void testGetLocalMemberCapabilitiesReturnsIncapableMemberIfLocalCapabilitiesIsNe } @Test - void testGetLocalMemberCapabilitiesReturnsUpdatedLocalCapabilities() { + void getLocalMemberCapabilitiesReturnsUpdatedLocalCapabilities() { testSubject.updateLocalCapabilities(localInstance, LOAD_FACTOR, COMMAND_MESSAGE_FILTER); SerializedMemberCapabilities result = ((RestCapabilityDiscoveryMode) testSubject).getLocalMemberCapabilities(); @@ -88,7 +88,7 @@ void testGetLocalMemberCapabilitiesReturnsUpdatedLocalCapabilities() { } @Test - void testCapabilitiesReturnsLocalCapabilitiesIfLocalServiceInstanceIsUsed() { + void capabilitiesReturnsLocalCapabilitiesIfLocalServiceInstanceIsUsed() { testSubject.updateLocalCapabilities(localInstance, LOAD_FACTOR, COMMAND_MESSAGE_FILTER); Optional resultCapabilities = testSubject.capabilities(localInstance); @@ -101,7 +101,7 @@ void testCapabilitiesReturnsLocalCapabilitiesIfLocalServiceInstanceIsUsed() { } @Test - void testCapabilitiesReturnsLocalCapabilitiesIfServiceInstanceUriMatches() { + void capabilitiesReturnsLocalCapabilitiesIfServiceInstanceUriMatches() { URI testURI = URI.create("http://remote"); when(localInstance.getUri()).thenReturn(testURI); @@ -120,7 +120,7 @@ void testCapabilitiesReturnsLocalCapabilitiesIfServiceInstanceUriMatches() { } @Test - void testCapabilitiesGetsCapabilitiesThroughRestTemplate() { + void capabilitiesGetsCapabilitiesThroughRestTemplate() { MemberCapabilities expectedCapabilities = new DefaultMemberCapabilities(LOAD_FACTOR, COMMAND_MESSAGE_FILTER); URI testURI = URI.create("http://remote"); @@ -157,7 +157,7 @@ void testCapabilitiesGetsCapabilitiesThroughRestTemplate() { } @Test - void testCapabilitiesRethrowsHttpClientErrorExceptionAsServiceInstanceClientException() { + void capabilitiesRethrowsHttpClientErrorExceptionAsServiceInstanceClientException() { testSubject.updateLocalCapabilities(localInstance, LOAD_FACTOR, COMMAND_MESSAGE_FILTER); when(restTemplate.exchange( @@ -181,7 +181,7 @@ void testCapabilitiesRethrowsHttpClientErrorExceptionAsServiceInstanceClientExce } @Test - void testCapabilitiesReturnsIncapableMemberWhenNonHttpClientErrorExceptionIsThrown() { + void capabilitiesReturnsIncapableMemberWhenNonHttpClientErrorExceptionIsThrown() { testSubject.updateLocalCapabilities(localInstance, LOAD_FACTOR, COMMAND_MESSAGE_FILTER); when(restTemplate.exchange( From 2d70174ebcc83f8e31d9fffb49f0e58d5de01ab3 Mon Sep 17 00:00:00 2001 From: Steven van Beelen Date: Thu, 26 Oct 2023 14:44:10 +0200 Subject: [PATCH 4/5] Add descriptive JavaDoc to the NoopUriServiceInstance Add descriptive JavaDoc to the NoopUriServiceInstance #327 --- .../mode/AbstractCapabilityDiscoveryMode.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java b/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java index 4c161fe..ef5e700 100644 --- a/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java +++ b/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java @@ -79,6 +79,14 @@ protected abstract static class Builder { protected abstract void validate(); } + /** + * This no-op version of the {@link DefaultServiceInstance} enforces the {@link ServiceInstance#getUri()} to a fixed + * empty {@link URI}. Through this, there's always a {@code ServiceInstance} present that will never match others. + *

+ * This no-op version is the default local {@code ServiceInstance}, ensuring that when + * {@link #updateLocalCapabilities(ServiceInstance, int, CommandMessageFilter)} is never invoked (when an instance + * has zero command handlers) it will still play nicely in the discovery mechanism. + */ private static class NoopUriServiceInstance extends DefaultServiceInstance { private static final ServiceInstance INSTANCE = new NoopUriServiceInstance(); From fcbf52532b227afb064e195e538c6714171963eb Mon Sep 17 00:00:00 2001 From: Steven van Beelen Date: Thu, 26 Oct 2023 14:44:38 +0200 Subject: [PATCH 5/5] Rename the nop service instance to FixedURIServiceInstance Rename the nop service instance to FixedURIServiceInstance #327 --- .../mode/AbstractCapabilityDiscoveryMode.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java b/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java index ef5e700..3b93c0c 100644 --- a/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java +++ b/springcloud/src/main/java/org/axonframework/extensions/springcloud/commandhandling/mode/AbstractCapabilityDiscoveryMode.java @@ -44,7 +44,7 @@ public abstract class AbstractCapabilityDiscoveryMode builder) { builder.validate(); - localInstance = new AtomicReference<>(NoopUriServiceInstance.INSTANCE); + localInstance = new AtomicReference<>(FixedURIServiceInstance.INSTANCE); localCapabilities = new AtomicReference<>(DefaultMemberCapabilities.INCAPABLE_MEMBER); } @@ -87,9 +87,9 @@ protected abstract static class Builder { * {@link #updateLocalCapabilities(ServiceInstance, int, CommandMessageFilter)} is never invoked (when an instance * has zero command handlers) it will still play nicely in the discovery mechanism. */ - private static class NoopUriServiceInstance extends DefaultServiceInstance { + private static class FixedURIServiceInstance extends DefaultServiceInstance { - private static final ServiceInstance INSTANCE = new NoopUriServiceInstance(); + private static final ServiceInstance INSTANCE = new FixedURIServiceInstance(); private static final URI FIXED_URI = URI.create(""); @Override