Skip to content

Commit

Permalink
For alibaba#10566, Use ClientReleaseEvent replace ClientDisconnectEve…
Browse files Browse the repository at this point in the history
…nt. (alibaba#10557)
  • Loading branch information
KomachiSion authored May 26, 2023
1 parent 83ee4c8 commit 9d70b40
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.alibaba.nacos.naming.core.v2.client.impl.ConnectionBasedClient;
import com.alibaba.nacos.naming.core.v2.client.manager.ClientManager;
import com.alibaba.nacos.naming.core.v2.event.client.ClientEvent;
import com.alibaba.nacos.naming.core.v2.event.client.ClientOperationEvent;
import com.alibaba.nacos.naming.misc.GlobalExecutor;
import com.alibaba.nacos.naming.misc.Loggers;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -102,7 +103,9 @@ public boolean clientDisconnected(String clientId) {
return true;
}
client.release();
NotifyCenter.publishEvent(new ClientEvent.ClientDisconnectEvent(client, isResponsibleClient(client)));
boolean isResponsible = isResponsibleClient(client);
NotifyCenter.publishEvent(new ClientOperationEvent.ClientReleaseEvent(client, isResponsible));
NotifyCenter.publishEvent(new ClientEvent.ClientDisconnectEvent(client, isResponsible));
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.alibaba.nacos.naming.core.v2.client.impl.IpPortBasedClient;
import com.alibaba.nacos.naming.core.v2.client.manager.ClientManager;
import com.alibaba.nacos.naming.core.v2.event.client.ClientEvent;
import com.alibaba.nacos.naming.core.v2.event.client.ClientOperationEvent;
import com.alibaba.nacos.naming.healthcheck.heartbeat.ClientBeatUpdateTask;
import com.alibaba.nacos.naming.misc.ClientConfig;
import com.alibaba.nacos.naming.misc.GlobalExecutor;
Expand Down Expand Up @@ -92,8 +93,10 @@ public boolean clientDisconnected(String clientId) {
if (null == client) {
return true;
}
NotifyCenter.publishEvent(new ClientEvent.ClientDisconnectEvent(client, isResponsibleClient(client)));
boolean isResponsible = isResponsibleClient(client);
NotifyCenter.publishEvent(new ClientEvent.ClientDisconnectEvent(client, isResponsible));
client.release();
NotifyCenter.publishEvent(new ClientOperationEvent.ClientReleaseEvent(client, isResponsible));
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.alibaba.nacos.naming.core.v2.client.impl.IpPortBasedClient;
import com.alibaba.nacos.naming.core.v2.client.manager.ClientManager;
import com.alibaba.nacos.naming.core.v2.event.client.ClientEvent;
import com.alibaba.nacos.naming.core.v2.event.client.ClientOperationEvent;
import com.alibaba.nacos.naming.misc.Loggers;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -81,8 +82,10 @@ public boolean clientDisconnected(String clientId) {
if (null == client) {
return true;
}
NotifyCenter.publishEvent(new ClientEvent.ClientDisconnectEvent(client, isResponsibleClient(client)));
boolean isResponsible = isResponsibleClient(client);
NotifyCenter.publishEvent(new ClientEvent.ClientDisconnectEvent(client, isResponsible));
client.release();
NotifyCenter.publishEvent(new ClientOperationEvent.ClientReleaseEvent(client, isResponsible));
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.alibaba.nacos.naming.core.v2.event.client;

import com.alibaba.nacos.common.notify.Event;
import com.alibaba.nacos.naming.core.v2.client.Client;
import com.alibaba.nacos.naming.core.v2.pojo.Service;

/**
Expand Down Expand Up @@ -92,4 +93,27 @@ public ClientUnsubscribeServiceEvent(Service service, String clientId) {
super(clientId, service);
}
}

public static class ClientReleaseEvent extends ClientOperationEvent {

private static final long serialVersionUID = -281486927726245701L;

private final Client client;

private final boolean isNative;

public ClientReleaseEvent(Client client, boolean isNative) {
super(client.getClientId(), null);
this.client = client;
this.isNative = isNative;
}

public Client getClient() {
return client;
}

public boolean isNative() {
return isNative;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import com.alibaba.nacos.common.trace.event.naming.DeregisterInstanceTraceEvent;
import com.alibaba.nacos.common.utils.ConcurrentHashSet;
import com.alibaba.nacos.naming.core.v2.client.Client;
import com.alibaba.nacos.naming.core.v2.event.client.ClientEvent;
import com.alibaba.nacos.naming.core.v2.event.client.ClientOperationEvent;
import com.alibaba.nacos.naming.core.v2.event.publisher.NamingEventPublisherFactory;
import com.alibaba.nacos.naming.core.v2.event.service.ServiceEvent;
Expand Down Expand Up @@ -84,20 +83,20 @@ public List<Class<? extends Event>> subscribeTypes() {
result.add(ClientOperationEvent.ClientDeregisterServiceEvent.class);
result.add(ClientOperationEvent.ClientSubscribeServiceEvent.class);
result.add(ClientOperationEvent.ClientUnsubscribeServiceEvent.class);
result.add(ClientEvent.ClientDisconnectEvent.class);
result.add(ClientOperationEvent.ClientReleaseEvent.class);
return result;
}

@Override
public void onEvent(Event event) {
if (event instanceof ClientEvent.ClientDisconnectEvent) {
handleClientDisconnect((ClientEvent.ClientDisconnectEvent) event);
if (event instanceof ClientOperationEvent.ClientReleaseEvent) {
handleClientDisconnect((ClientOperationEvent.ClientReleaseEvent) event);
} else if (event instanceof ClientOperationEvent) {
handleClientOperation((ClientOperationEvent) event);
}
}

private void handleClientDisconnect(ClientEvent.ClientDisconnectEvent event) {
private void handleClientDisconnect(ClientOperationEvent.ClientReleaseEvent event) {
Client client = event.getClient();
for (Service each : client.getAllSubscribeService()) {
removeSubscriberIndexes(each, client.getClientId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

import com.alibaba.nacos.common.notify.Event;
import com.alibaba.nacos.naming.core.v2.client.Client;
import com.alibaba.nacos.naming.core.v2.event.client.ClientEvent;
import com.alibaba.nacos.naming.core.v2.event.client.ClientOperationEvent;
import com.alibaba.nacos.naming.core.v2.pojo.Service;
import org.junit.Assert;
Expand Down Expand Up @@ -46,7 +45,7 @@ public class ClientServiceIndexesManagerTest {
private Service service;

@Mock
private ClientEvent.ClientDisconnectEvent clientDisconnectEvent;
private ClientOperationEvent.ClientReleaseEvent clientReleaseEvent;

@Mock
private ClientOperationEvent clientOperationEvent;
Expand Down Expand Up @@ -126,10 +125,10 @@ public void testSubscribeTypes() {

@Test
public void testOnEvent() {
Mockito.when(clientDisconnectEvent.getClient()).thenReturn(client);
clientServiceIndexesManager.onEvent(clientDisconnectEvent);
Mockito.when(clientReleaseEvent.getClient()).thenReturn(client);
clientServiceIndexesManager.onEvent(clientReleaseEvent);

Mockito.verify(clientDisconnectEvent).getClient();
Mockito.verify(clientReleaseEvent).getClient();

clientServiceIndexesManager.onEvent(clientOperationEvent);

Expand Down

0 comments on commit 9d70b40

Please sign in to comment.