Skip to content

Commit

Permalink
Polish apache#3984 : Refactor implementation by the event/listener ab…
Browse files Browse the repository at this point in the history
…stract
  • Loading branch information
mercyblitz committed May 19, 2019
1 parent 8b2fdd7 commit 128a1d7
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,6 @@ public Page<ServiceInstance> getInstances(String serviceName, int offset, int re
return page;
}

@Override
public void registerListener(ServiceDiscoveryChangeListener listener) {
for (ServiceDiscovery serviceDiscovery : serviceDiscoveries) {
serviceDiscovery.registerListener(listener);
}
}

@Override
public String toString() {
return format("%s [composite : %s]", this.getClass().getSimpleName(), valueOf(serviceDiscoveries));
Expand All @@ -116,4 +109,19 @@ public String toString() {
public int getPriority() {
return Integer.MIN_VALUE;
}

@Override
public void addEventListener(ServiceDiscoveryChangeListener listener) throws NullPointerException, IllegalArgumentException {
serviceDiscoveries.forEach(serviceDiscovery -> serviceDiscovery.addEventListener(listener));
}

@Override
public void removeEventListener(ServiceDiscoveryChangeListener listener) throws NullPointerException, IllegalArgumentException {
serviceDiscoveries.forEach(serviceDiscovery -> serviceDiscovery.removeEventListener(listener));
}

@Override
public List<ServiceDiscoveryChangeListener> getAllEventListeners() {
return serviceDiscoveries.stream().findFirst().get().getAllEventListeners();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ public class DefaultServiceInstance implements ServiceInstance {

private final int port;

private boolean enabled = true;
private boolean enabled;

private boolean healthy = true;
private boolean healthy;

private Map<String, String> metadata = new HashMap<>();

Expand All @@ -46,6 +46,8 @@ public DefaultServiceInstance(String id, String serviceName, String host, int po
this.serviceName = serviceName;
this.host = host;
this.port = port;
this.enabled = true;
this.healthy = true;
}

public DefaultServiceInstance(String serviceName, String host, int port) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@

import org.apache.dubbo.common.event.Event;
import org.apache.dubbo.common.event.EventDispatcher;
import org.apache.dubbo.common.event.EventListener;
import org.apache.dubbo.registry.client.event.ServiceInstancePreRegisteredEvent;
import org.apache.dubbo.registry.client.event.ServiceInstanceRegisteredEvent;

import java.util.List;
import java.util.Optional;

import static java.util.Optional.empty;
Expand Down Expand Up @@ -127,19 +125,4 @@ protected final void executeWithEvents(Optional<? extends Event> beforeEvent,
* Stops the ServiceRegistry. This is a lifecycle method.
*/
protected abstract void doStop();

@Override
public void addEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {
eventDispatcher.addEventListener(listener);
}

@Override
public void removeEventListener(EventListener<?> listener) throws NullPointerException, IllegalArgumentException {
eventDispatcher.removeEventListener(listener);
}

@Override
public List<EventListener<?>> getAllEventListeners() {
return eventDispatcher.getAllEventListeners();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package org.apache.dubbo.registry.client;

import org.apache.dubbo.common.event.Listenable;
import org.apache.dubbo.common.utils.DefaultPage;
import org.apache.dubbo.common.utils.Page;
import org.apache.dubbo.registry.client.event.ServiceDiscoveryChangeListener;
Expand All @@ -26,17 +27,20 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import static java.lang.Integer.compare;
import static java.util.Collections.emptyList;
import static java.util.Collections.unmodifiableList;
import static java.util.Collections.unmodifiableMap;
import static org.apache.dubbo.common.event.EventDispatcher.getDefaultExtension;

/**
* The common operations of Service Discovery
*
* @since 2.7.2
*/
public interface ServiceDiscovery extends Comparable<ServiceDiscovery> {
public interface ServiceDiscovery extends Listenable<ServiceDiscoveryChangeListener>, Comparable<ServiceDiscovery> {

/**
* A human-readable description of the implementation
Expand Down Expand Up @@ -161,13 +165,6 @@ default Map<String, Page<ServiceInstance>> getInstances(Iterable<String> service
return unmodifiableMap(instances);
}

/**
* Register {@link ServiceDiscoveryChangeListener the service chagne event listener}
*
* @param listener {@link ServiceDiscoveryChangeListener the service change event listener}
*/
void registerListener(ServiceDiscoveryChangeListener listener);

/**
* The priority of current {@link ServiceDiscovery}
*
Expand All @@ -188,4 +185,26 @@ default int getPriority() {
default int compareTo(ServiceDiscovery that) {
return compare(this.getPriority(), that.getPriority());
}

@Override
default void addEventListener(ServiceDiscoveryChangeListener listener) throws NullPointerException, IllegalArgumentException {
Listenable.assertListener(listener);
getDefaultExtension().addEventListener(listener);
}

@Override
default void removeEventListener(ServiceDiscoveryChangeListener listener) throws NullPointerException, IllegalArgumentException {
Listenable.assertListener(listener);
getDefaultExtension().removeEventListener(listener);
}

@Override
default List<ServiceDiscoveryChangeListener> getAllEventListeners() {
return unmodifiableList(getDefaultExtension()
.getAllEventListeners()
.stream()
.filter(listener -> listener instanceof ServiceDiscoveryChangeListener)
.map(listener -> ServiceDiscoveryChangeListener.class.cast(listener))
.collect(Collectors.toList()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,12 @@
*/
package org.apache.dubbo.registry.client;

import org.apache.dubbo.common.event.Listenable;

/**
* The common interface to register and unregister for a service registry
*
* @since 2.7.2
*/
public interface ServiceRegistry extends Listenable {
public interface ServiceRegistry {

/**
* A human-readable description of the implementation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package org.apache.dubbo.registry.client;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
Expand All @@ -29,9 +30,14 @@
*/
public class DefaultServiceInstanceTest {

public static final DefaultServiceInstance INSTANCE =
public static DefaultServiceInstance INSTANCE =
new DefaultServiceInstance("A", "127.0.0.1", 8080);

@BeforeEach
public void init() {
INSTANCE = new DefaultServiceInstance("A", "127.0.0.1", 8080);
}

@Test
public void testDefaultValues() {
assertTrue(INSTANCE.isEnabled());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,9 @@
*/
package org.apache.dubbo.registry.client;

import org.apache.dubbo.common.event.EventListener;
import org.apache.dubbo.registry.client.event.ServiceInstanceEvent;
import org.apache.dubbo.registry.client.event.ServiceInstancePreRegisteredEvent;
import org.apache.dubbo.registry.client.event.ServiceInstanceRegisteredEvent;

import org.junit.jupiter.api.Test;

import static org.apache.dubbo.registry.client.DefaultServiceInstanceTest.INSTANCE;
import static org.apache.dubbo.registry.client.EventPublishingServiceRegistryTest.handleEvent;
import static org.junit.jupiter.api.Assertions.assertEquals;

/**
Expand All @@ -40,8 +34,6 @@ public class EventPublishingServiceRegistryTest {

@Test
public void testRegister() {
serviceRegistry.addEventListener(new BeforeEventListener());
serviceRegistry.addEventListener(new AfterEventListener());
serviceRegistry.register(serviceInstance);
}

Expand All @@ -54,27 +46,6 @@ public void testUpdate() {
public void testUnregister() {
serviceRegistry.unregister(serviceInstance);
}

static void handleEvent(ServiceInstanceEvent event) {
assertEquals(INSTANCE, event.getServiceInstance());
assertEquals(serviceRegistry, event.getSource());
}
}

class BeforeEventListener implements EventListener<ServiceInstancePreRegisteredEvent> {

@Override
public void onEvent(ServiceInstancePreRegisteredEvent event) {
handleEvent(event);
}
}

class AfterEventListener implements EventListener<ServiceInstanceRegisteredEvent> {

@Override
public void onEvent(ServiceInstanceRegisteredEvent event) {
handleEvent(event);
}
}

class DefaultServiceRegistry extends EventPublishingServiceRegistry {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,7 @@ public List<ServiceInstance> getInstances(String serviceName) throws NullPointer
return repository.computeIfAbsent(serviceName, s -> new LinkedList<>());
}

@Override
public void registerListener(ServiceDiscoveryChangeListener listener) {
dispatcher.addEventListener(listener);
}

protected InMemoryServiceDiscovery addServiceInstance(ServiceInstance serviceInstance) {
public InMemoryServiceDiscovery addServiceInstance(ServiceInstance serviceInstance) {
String serviceName = serviceInstance.getServiceName();
List<ServiceInstance> serviceInstances = repository.computeIfAbsent(serviceName, s -> new LinkedList<>());
if (!serviceInstances.contains(serviceInstance)) {
Expand All @@ -66,4 +61,18 @@ public String toString() {
return "InMemoryServiceDiscovery";
}

@Override
public void addEventListener(ServiceDiscoveryChangeListener listener) throws NullPointerException, IllegalArgumentException {

}

@Override
public void removeEventListener(ServiceDiscoveryChangeListener listener) throws NullPointerException, IllegalArgumentException {

}

@Override
public List<ServiceDiscoveryChangeListener> getAllEventListeners() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,14 @@
*/
package org.apache.dubbo.registry.client;

import org.apache.dubbo.common.event.EventDispatcher;
import org.apache.dubbo.common.event.EventListener;
import org.apache.dubbo.common.utils.Page;
import org.apache.dubbo.registry.client.event.ServiceInstanceEvent;
import org.apache.dubbo.registry.client.event.ServiceInstancePreRegisteredEvent;
import org.apache.dubbo.registry.client.event.ServiceInstanceRegisteredEvent;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.HashSet;
Expand All @@ -26,6 +32,8 @@

import static java.lang.Integer.MAX_VALUE;
import static java.util.Arrays.asList;
import static org.apache.dubbo.registry.client.DefaultServiceInstanceTest.INSTANCE;
import static org.apache.dubbo.registry.client.ServiceDiscoveryTest.handleEvent;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
Expand All @@ -37,7 +45,17 @@
*/
public class ServiceDiscoveryTest {

private InMemoryServiceDiscovery instance = new InMemoryServiceDiscovery();
private static InMemoryServiceDiscovery instance;

private EventDispatcher dispatcher = EventDispatcher.getDefaultExtension();

@BeforeEach
public void init() {
instance = new InMemoryServiceDiscovery();
dispatcher.addEventListener(new BeforeEventListener());
dispatcher.addEventListener(new AfterEventListener());
dispatcher.removeAllEventListeners();
}

@Test
public void testToString() {
Expand Down Expand Up @@ -212,4 +230,24 @@ public void testGetInstancesWithHealthy() {
}


static void handleEvent(ServiceInstanceEvent event) {
assertEquals(INSTANCE, event.getServiceInstance());
assertEquals(instance, event.getSource());
}
}

class BeforeEventListener implements EventListener<ServiceInstancePreRegisteredEvent> {

@Override
public void onEvent(ServiceInstancePreRegisteredEvent event) {
handleEvent(event);
}
}

class AfterEventListener implements EventListener<ServiceInstanceRegisteredEvent> {

@Override
public void onEvent(ServiceInstanceRegisteredEvent event) {
handleEvent(event);
}
}

0 comments on commit 128a1d7

Please sign in to comment.