This is an automated email from the ASF dual-hosted git repository.

totalo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new c67996a7a7b Close ContextManager and offline compute node instance 
when proxy shut down (#32214)
c67996a7a7b is described below

commit c67996a7a7b3ffb3cd7d1d984a817b71c047bd9f
Author: Haoran Meng <[email protected]>
AuthorDate: Tue Jul 23 00:15:39 2024 +0800

    Close ContextManager and offline compute node instance when proxy shut down 
(#32214)
---
 .../org/apache/shardingsphere/mode/manager/ContextManager.java   | 1 +
 .../mode/persist/service/ComputeNodePersistService.java          | 9 +++++++++
 .../apache/shardingsphere/mode/manager/ContextManagerTest.java   | 3 +++
 .../mode/persist/service/ComputeNodePersistServiceTest.java      | 7 +++++++
 .../shardingsphere/proxy/frontend/ShardingSphereProxy.java       | 1 +
 5 files changed, 21 insertions(+)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index d2ffe36e458..13629a99576 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -212,6 +212,7 @@ public final class ContextManager implements AutoCloseable {
         }
         executorEngine.close();
         metaDataContexts.get().close();
+        
persistServiceFacade.getComputeNodePersistService().offline(computeNodeInstanceContext.getInstance());
         persistServiceFacade.getRepository().close();
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistService.java
index 83b73bd187c..7809d422a3a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistService.java
@@ -183,4 +183,13 @@ public final class ComputeNodePersistService {
     public void updateComputeNodeState(final String instanceId, final 
InstanceState instanceState) {
         
repository.persistEphemeral(ComputeNode.getComputeNodeStateNodePath(instanceId),
 instanceState.name());
     }
+    
+    /**
+     * Compute node offline.
+     *
+     * @param computeNodeInstance compute node instance
+     */
+    public void offline(final ComputeNodeInstance computeNodeInstance) {
+        
repository.delete(ComputeNode.getOnlineInstanceNodePath(computeNodeInstance.getMetaData().getId(),
 computeNodeInstance.getMetaData().getType()));
+    }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index aa5965e287b..8e5dc0ca438 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -26,7 +26,9 @@ import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
 import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.UnknownDatabaseException;
+import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
@@ -95,6 +97,7 @@ class ContextManagerTest {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").containsSchema("foo_schema")).thenReturn(true);
         
when(metaDataContexts.getMetaData().getDatabases().values()).thenReturn(Collections.singleton(database));
         ComputeNodeInstanceContext computeNodeInstanceContext = 
mock(ComputeNodeInstanceContext.class);
+        when(computeNodeInstanceContext.getInstance()).thenReturn(new 
ComputeNodeInstance(new ProxyInstanceMetaData("foo_id", 3307), 
Collections.emptyList()));
         
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
         contextManager = new ContextManager(metaDataContexts, 
computeNodeInstanceContext, mock(PersistRepository.class));
     }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistServiceTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistServiceTest.java
index eca79c3acd6..0ade84a10ba 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistServiceTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/persist/service/ComputeNodePersistServiceTest.java
@@ -144,4 +144,11 @@ class ComputeNodePersistServiceTest {
         new 
ComputeNodePersistService(repository).updateComputeNodeState("foo_instance_id", 
InstanceState.OK);
         
verify(repository).persistEphemeral(ComputeNode.getComputeNodeStateNodePath("foo_instance_id"),
 InstanceState.OK.name());
     }
+    
+    @Test
+    void assertOffline() {
+        ComputeNodeInstance computeNodeInstance = new ComputeNodeInstance(new 
ProxyInstanceMetaData("foo_instance_id", 3307));
+        new ComputeNodePersistService(repository).offline(computeNodeInstance);
+        verify(repository).delete(eq("/nodes/compute_nodes/online/proxy/" + 
computeNodeInstance.getMetaData().getId()));
+    }
 }
diff --git 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java
 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java
index bc95e7ef7cf..13605c5f013 100644
--- 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java
+++ 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java
@@ -150,5 +150,6 @@ public final class ShardingSphereProxy {
         bossGroup.shutdownGracefully();
         workerGroup.shutdownGracefully();
         BackendExecutorContext.getInstance().getExecutorEngine().close();
+        ProxyContext.getInstance().getContextManager().close();
     }
 }

Reply via email to