You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by xi...@apache.org on 2021/03/19 12:01:59 UTC

[shardingsphere] branch master updated: Refactor lock node & add default lock time out (#9748)

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

xiaoyu 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 1fcf512  Refactor lock node & add default lock time out (#9748)
1fcf512 is described below

commit 1fcf51206f2ae818216b4008ac16e8def967c5d7
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Fri Mar 19 20:01:27 2021 +0800

    Refactor lock node & add default lock time out (#9748)
---
 .../metadata/GovernanceMetaDataContexts.java       |  4 +-
 .../governance/core/lock/GovernanceLock.java       | 86 +++++++++++-----------
 .../governance/core/lock/node/LockNode.java        | 16 +++-
 .../governance/core/registry/RegistryCenter.java   | 55 +++-----------
 .../registry/listener/LockChangedListener.java     |  4 +-
 .../governance/core/lock/GovernanceLockTest.java   | 19 ++---
 .../governance/core/lock/node/LockNodeTest.java    |  2 +-
 .../core/registry/RegistryCenterTest.java          | 10 +--
 .../registry/listener/LockChangedListenerTest.java | 17 -----
 .../infra/lock/ShardingSphereLock.java             | 34 ++++-----
 .../driver/executor/DriverJDBCExecutor.java        | 38 +---------
 .../proxy/frontend/state/impl/LockProxyState.java  |  2 +-
 12 files changed, 103 insertions(+), 184 deletions(-)

diff --git a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index cd6832c..5007420 100644
--- a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++ b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -38,6 +38,7 @@ import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
 import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContextsBuilder;
 import org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -86,7 +87,8 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
         ShardingSphereEventBus.getInstance().register(this);
         disableDataSources();
         persistMetaData();
-        lock = new GovernanceLock(governanceFacade.getRegistryCenter());
+        lock = new GovernanceLock(governanceFacade.getRegistryCenter(), 
+                metaDataContexts.getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS));
     }
     
     private void disableDataSources() {
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
index 6ece835..7465381 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
@@ -17,19 +17,14 @@
 
 package org.apache.shardingsphere.governance.core.lock;
 
-import com.google.common.base.Joiner;
 import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.governance.core.event.model.lock.LockNotificationEvent;
-import org.apache.shardingsphere.governance.core.event.model.lock.LockReleasedEvent;
+import org.apache.shardingsphere.governance.core.event.model.props.PropertiesChangedEvent;
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenterNodeStatus;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
+import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.stream.Collectors;
-
 /**
  * Governance lock.
  */
@@ -37,60 +32,67 @@ public final class GovernanceLock implements ShardingSphereLock {
     
     private final RegistryCenter registryCenter;
     
-    public GovernanceLock(final RegistryCenter registryCenter) {
+    private long lockTimeoutMilliseconds;
+    
+    public GovernanceLock(final RegistryCenter registryCenter, final long lockTimeoutMilliseconds) {
         this.registryCenter = registryCenter;
+        this.lockTimeoutMilliseconds = lockTimeoutMilliseconds;
         ShardingSphereEventBus.getInstance().register(this);
     }
     
+    /**
+     * Try to get lock with default time out.
+     *
+     * @param lockName lock name
+     * @return true if get the lock, false if not
+     */
     @Override
-    public boolean tryLock(final String schemaName, final String tableName, final long timeoutMilliseconds) {
-        boolean result = registryCenter.tryLock(timeoutMilliseconds);
-        if (result) {
-            registryCenter.addLockedResources(Arrays.asList(Joiner.on(".").join(schemaName, tableName)));
-        }
-        return result;
-    }
-    
-    @Override
-    public boolean tryLock(final String schemaName, final Collection<String> tableNames, final long timeoutMilliseconds) {
-        boolean result = registryCenter.tryLock(timeoutMilliseconds);
-        if (result) {
-            registryCenter.addLockedResources(tableNames.stream()
-                    .map(each -> Joiner.on(".").join(schemaName, each)).collect(Collectors.toList()));
-        }
-        return result;
+    public boolean tryLock(final String lockName) {
+        return registryCenter.tryLock(lockName, lockTimeoutMilliseconds);
     }
     
+    /**
+     * Try to get lock.
+     * 
+     * @param lockName lock name
+     * @param timeoutMilliseconds time out milliseconds to acquire lock
+     * @return true if get the lock, false if not
+     */
     @Override
-    public void releaseLock(final String schemaName, final String tableName) {
-        registryCenter.releaseLock();
-        registryCenter.deleteLockedResources(Arrays.asList(Joiner.on(".").join(schemaName, tableName)));
+    public boolean tryLock(final String lockName, final long timeoutMilliseconds) {
+        return registryCenter.tryLock(lockName, timeoutMilliseconds);
     }
     
+    /**
+     * Release lock.
+     * 
+     * @param lockName lock name
+     */
     @Override
-    public void releaseLock(final String schemaName, final Collection<String> tableNames) {
-        registryCenter.releaseLock();
-        registryCenter.deleteLockedResources(tableNames.stream()
-                .map(each -> Joiner.on(".").join(schemaName, each)).collect(Collectors.toList()));
+    public void releaseLock(final String lockName) {
+        registryCenter.releaseLock(lockName);
     }
     
     /**
-     * Lock instance.
-     *
-     * @param event lock notification event
+     * Check if the lock is exist.
+     * 
+     * @param lockName lockName
+     * @return true if exist, false if not
      */
-    @Subscribe
-    public void doLock(final LockNotificationEvent event) {
-        registryCenter.persistInstanceData(RegistryCenterNodeStatus.LOCKED.toString());
+    @Override
+    public boolean isLocked(final String lockName) {
+        //TODO
+        return false;
     }
     
     /**
-     * Unlock instance.
+     * Renew lock time out.
      *
-     * @param event lock released event
+     * @param event properties changed event
      */
     @Subscribe
-    public void unlock(final LockReleasedEvent event) {
-        registryCenter.persistInstanceData("");
+    public void renew(final PropertiesChangedEvent event) {
+        ConfigurationProperties props = new ConfigurationProperties(event.getProps());
+        lockTimeoutMilliseconds = props.<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS);
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
index aa4d52c..1eed1fb 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/node/LockNode.java
@@ -26,17 +26,25 @@ public final class LockNode {
     
     private static final String LOCK_NODE_ROOT = "lock";
     
-    private static final String LOCK_NODE = "glock";
-    
     private static final String LOCKED_RESOURCES_NODE = "locked_resources";
     
     /**
+     * Get lock root node path.
+     * 
+     * @return lock root node path
+     */
+    public String getLockRootNodePath() {
+        return Joiner.on("/").join("", LOCK_NODE_ROOT);
+    }
+    
+    /**
      * Get lock node path.
      * 
+     * @param lockName lock name
      * @return lock node path
      */
-    public String getLockNodePath() {
-        return Joiner.on("/").join("", LOCK_NODE_ROOT, LOCK_NODE);
+    public String getLockNodePath(final String lockName) {
+        return Joiner.on("/").join("", LOCK_NODE_ROOT, lockName);
     }
     
     /**
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index b0b8b9e..a1ff1c3 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -86,6 +86,7 @@ public final class RegistryCenter {
         repository = registryRepository;
         instance = GovernanceInstance.getInstance();
         lockNode = new LockNode();
+        initLockNode();
         registryCacheManager = new RegistryCacheManager(registryRepository, node);
         ShardingSphereEventBus.getInstance().register(this);
     }
@@ -492,25 +493,6 @@ public final class RegistryCenter {
     }
     
     /**
-     * Load instance data.
-     * 
-     * @param instanceId instance id
-     * @return instance data
-     */
-    public String loadInstanceData(final String instanceId) {
-        return repository.get(node.getProxyNodePath(instanceId));
-    }
-    
-    /**
-     * Load all instances.
-     * 
-     * @return collection of all instances
-     */
-    public Collection<String> loadAllInstances() {
-        return repository.getChildrenKeys(node.getProxyNodesPath());
-    }
-    
-    /**
      * Load disabled data sources.
      * 
      * @param schemaName schema name
@@ -529,42 +511,27 @@ public final class RegistryCenter {
         return repository.get(node.getDataSourcePath(schemaName, dataSourceName));
     }
     
+    private void initLockNode() {
+        repository.persist(lockNode.getLockRootNodePath(), "");
+    }
+    
     /**
      * Try to get lock.
      *
+     * @param lockName lock name
      * @param timeout the maximum time in milliseconds to acquire lock
      * @return true if get the lock, false if not
      */
-    public boolean tryLock(final long timeout) {
-        return repository.tryLock(lockNode.getLockNodePath(), timeout, TimeUnit.MILLISECONDS);
+    public boolean tryLock(final String lockName, final long timeout) {
+        return repository.tryLock(lockNode.getLockNodePath(lockName), timeout, TimeUnit.MILLISECONDS);
     }
     
     /**
      * Release lock.
-     */
-    public void releaseLock() {
-        repository.releaseLock(lockNode.getLockNodePath());
-    }
-    
-    /**
-     * Add locked resources.
      * 
-     * @param resources collection of resources
-     */
-    public void addLockedResources(final Collection<String> resources) {
-        List<String> lockedResources = Splitter.on(",").splitToList(repository.get(lockNode.getLockedResourcesNodePath()));
-        lockedResources.addAll(resources);
-        repository.persist(lockNode.getLockedResourcesNodePath(), Joiner.on(",").join(lockedResources));
-    }
-    
-    /**
-     * Delete locked resources.
-     *
-     * @param resources collection of resources
+     * @param lockName lock name
      */
-    public void deleteLockedResources(final Collection<String> resources) {
-        List<String> lockedResources = Splitter.on(",").splitToList(repository.get(lockNode.getLockedResourcesNodePath()));
-        lockedResources.removeAll(resources);
-        repository.persist(lockNode.getLockedResourcesNodePath(), Joiner.on(",").join(lockedResources));
+    public void releaseLock(final String lockName) {
+        repository.releaseLock(lockNode.getLockNodePath(lockName));
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListener.java b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListener.java
index cd6c683..b9f4edb 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListener.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListener.java
@@ -38,13 +38,13 @@ public final class LockChangedListener extends PostGovernanceRepositoryEventList
     private final LockNode lockNode;
     
     public LockChangedListener(final RegistryRepository registryRepository) {
-        super(registryRepository, Collections.singleton(new LockNode().getLockNodePath()));
+        super(registryRepository, Collections.singleton(new LockNode().getLockedResourcesNodePath()));
         lockNode = new LockNode();
     }
     
     @Override
     protected Optional<GovernanceEvent> createEvent(final DataChangedEvent event) {
-        if (event.getKey().startsWith(Joiner.on("/").join(lockNode.getLockNodePath(), ""))) {
+        if (event.getKey().startsWith(Joiner.on("/").join(lockNode.getLockedResourcesNodePath(), ""))) {
             if (event.getType() == Type.ADDED) {
                 return Optional.of(new LockNotificationEvent());
             } else if (event.getType() == Type.DELETED) {
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
index 2b47119..ba3e053 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
@@ -18,15 +18,12 @@
 package org.apache.shardingsphere.governance.core.lock;
 
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.util.Arrays;
-
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -37,25 +34,23 @@ public final class GovernanceLockTest {
     @Mock
     private RegistryCenter registryCenter;
     
-    private ShardingSphereLock lock;
+    private GovernanceLock lock;
     
     @Before
     public void setUp() {
-        lock = new GovernanceLock(registryCenter);
+        lock = new GovernanceLock(registryCenter, 50L);
     }
     
     @Test
     public void assertTryLock() {
-        when(registryCenter.tryLock(eq(50L))).thenReturn(Boolean.TRUE);
-        lock.tryLock("sharding_db", "t_order", 50L);
-        verify(registryCenter).tryLock(eq(50L));
-        verify(registryCenter).addLockedResources(eq(Arrays.asList("sharding_db.t_order")));
+        when(registryCenter.tryLock(eq("test"), eq(50L))).thenReturn(Boolean.TRUE);
+        lock.tryLock("test", 50L);
+        verify(registryCenter).tryLock(eq("test"), eq(50L));
     }
     
     @Test
     public void assertReleaseLock() {
-        lock.releaseLock("sharding_db", "t_order");
-        verify(registryCenter).releaseLock();
-        verify(registryCenter).deleteLockedResources(eq(Arrays.asList("sharding_db.t_order")));
+        lock.releaseLock("test");
+        verify(registryCenter).releaseLock(eq("test"));
     }
 }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
index 38d7a86..8182a87 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/node/LockNodeTest.java
@@ -34,7 +34,7 @@ public final class LockNodeTest {
     
     @Test
     public void assertGetLockNodePath() {
-        assertThat(lockNode.getLockNodePath(), is("/lock/glock"));
+        assertThat(lockNode.getLockNodePath("test"), is("/lock/test"));
     }
     
     @Test
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
index ded1b48..6f60016 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
@@ -141,7 +141,7 @@ public final class RegistryCenterTest {
     @Test
     public void assertPersistInstanceData() {
         registryCenter.persistInstanceData("test");
-        verify(registryRepository).persist(anyString(), anyString());
+        verify(registryRepository).persist(anyString(), eq("test"));
     }
     
     @Test
@@ -161,14 +161,14 @@ public final class RegistryCenterTest {
     
     @Test
     public void assertTryLock() {
-        registryCenter.tryLock(50L);
-        verify(registryRepository).tryLock(eq(new LockNode().getLockNodePath()), eq(50L), eq(TimeUnit.MILLISECONDS));
+        registryCenter.tryLock("test", 50L);
+        verify(registryRepository).tryLock(eq(new LockNode().getLockNodePath("test")), eq(50L), eq(TimeUnit.MILLISECONDS));
     }
     
     @Test
     public void assertReleaseLock() {
-        registryCenter.releaseLock();
-        verify(registryRepository).releaseLock(eq(new LockNode().getLockNodePath()));
+        registryCenter.releaseLock("test");
+        verify(registryRepository).releaseLock(eq(new LockNode().getLockNodePath("test")));
     }
     
     @Test
diff --git a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListenerTest.java b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListenerTest.java
index a272978..929ca79 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListenerTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/LockChangedListenerTest.java
@@ -18,8 +18,6 @@
 package org.apache.shardingsphere.governance.core.registry.listener;
 
 import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
-import org.apache.shardingsphere.governance.core.event.model.lock.LockNotificationEvent;
-import org.apache.shardingsphere.governance.core.event.model.lock.LockReleasedEvent;
 import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
 import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
 import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent.Type;
@@ -32,7 +30,6 @@ import org.mockito.junit.MockitoJUnitRunner;
 import java.util.Optional;
 
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 
 @RunWith(MockitoJUnitRunner.class)
 public final class LockChangedListenerTest {
@@ -52,18 +49,4 @@ public final class LockChangedListenerTest {
         Optional<GovernanceEvent> actual = lockChangedListener.createEvent(new DataChangedEvent("/lock/glock", "", Type.ADDED));
         assertFalse(actual.isPresent());
     }
-    
-    @Test
-    public void assertCreateAddedEvent() {
-        Optional<GovernanceEvent> actual = lockChangedListener.createEvent(new DataChangedEvent("/lock/glock/lock-test-id", "", Type.ADDED));
-        assertTrue(actual.isPresent());
-        assertTrue(actual.get() instanceof LockNotificationEvent);
-    }
-    
-    @Test
-    public void assertCreateDeletedEvent() {
-        Optional<GovernanceEvent> actual = lockChangedListener.createEvent(new DataChangedEvent("/lock/glock/lock-test-id", "", Type.DELETED));
-        assertTrue(actual.isPresent());
-        assertTrue(actual.get() instanceof LockReleasedEvent);
-    }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java
index c11fd40..903d86d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/ShardingSphereLock.java
@@ -17,8 +17,6 @@
 
 package org.apache.shardingsphere.infra.lock;
 
-import java.util.Collection;
-
 /**
  * ShardingSphere lock.
  */
@@ -27,34 +25,32 @@ public interface ShardingSphereLock {
     /**
      * Try to lock.
      *
-     * @param schemaName schema name
-     * @param tableName table name
-     * @param timeoutMilliseconds time out milliseconds to acquire lock
+     * @param lockName lock name
      * @return true if get the lock, false if not
      */
-    boolean tryLock(String schemaName, String tableName, long timeoutMilliseconds);
+    boolean tryLock(String lockName);
     
     /**
-     * Try to lock.
-     *
-     * @param schemaName schema name
-     * @param tableNames collections of table names
-     * @param timeoutMilliseconds time out milliseconds to acquire lock
+     * Try to lock with time out.
+     * 
+     * @param lockName lock name
+     * @param timeout the maximum time in milliseconds to acquire lock
      * @return true if get the lock, false if not
      */
-    boolean tryLock(String schemaName, Collection<String> tableNames, long timeoutMilliseconds);
+    boolean tryLock(String lockName, long timeout);
     
     /**
      * Release lock.
-     * @param schemaName schema name
-     * @param tableName table name
+     * 
+     * @param lockName lock name
      */
-    void releaseLock(String schemaName, String tableName);
+    void releaseLock(String lockName);
     
     /**
-     * Release lock.
-     * @param schemaName schema name
-     * @param tableNames collection of table names
+     * Check whether resource is locked.
+     * 
+     * @param lockName lock name
+     * @return true if locked ,false if not
      */
-    void releaseLock(String schemaName, Collection<String> tableNames);
+    boolean isLocked(String lockName);
 }
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
index 54b0b96..a5e4b08 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
@@ -21,11 +21,9 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.driver.executor.callback.ExecuteQueryCallback;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.database.DefaultSchema;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
-import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
@@ -43,7 +41,6 @@ import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.type.DataNodeContainedRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
@@ -124,35 +121,11 @@ public final class DriverJDBCExecutor {
     
     private <T> List<T> doExecute(final ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext, final SQLStatement sqlStatement,
                                   final Collection<RouteUnit> routeUnits, final JDBCExecutorCallback<T> callback) throws SQLException {
-        List<T> results;
-        boolean locked = false;
-        try {
-            locked = tryLock(sqlStatement, metaDataContexts.getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS));
-            results = jdbcExecutor.execute(executionGroupContext, callback);
-            refreshSchema(metaDataContexts.getDefaultMetaData(), sqlStatement, routeUnits);
-        } finally {
-            if (locked) {
-                releaseLock();
-            }
-        }
+        List<T> results = jdbcExecutor.execute(executionGroupContext, callback);
+        refreshSchema(metaDataContexts.getDefaultMetaData(), sqlStatement, routeUnits);
         return results;
     }
     
-    private boolean tryLock(final SQLStatement sqlStatement, final long lockTimeoutMilliseconds) {
-        if (metaDataContexts.getLock().isPresent() && needLock(sqlStatement)) {
-            // TODO
-            if (!metaDataContexts.getLock().get().tryLock("", "", lockTimeoutMilliseconds)) {
-                throw new ShardingSphereException("Service lock wait timeout of %s ms exceeded", lockTimeoutMilliseconds);
-            }
-            return true;
-        }
-        return false;
-    }
-    
-    private boolean needLock(final SQLStatement sqlStatement) {
-        return sqlStatement instanceof DDLStatement;
-    }
-    
     @SuppressWarnings("unchecked")
     private void refreshSchema(final ShardingSphereMetaData metaData, final SQLStatement sqlStatement, final Collection<RouteUnit> routeUnits) throws SQLException {
         Optional<MetadataRefresher> metadataRefresher = MetadataRefresherFactory.newInstance(sqlStatement);
@@ -168,11 +141,4 @@ public final class DriverJDBCExecutor {
     private void notifySchemaChanged(final ShardingSphereSchema schema) {
         ShardingSphereEventBus.getInstance().post(new SchemaAlteredEvent(DefaultSchema.LOGIC_NAME, schema));
     }
-    
-    private void releaseLock() {
-        // TODO
-        if (metaDataContexts.getLock().isPresent()) {
-            metaDataContexts.getLock().get().releaseLock("", "");
-        }
-    }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/LockProxyState.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/LockProxyState.java
index 4d2be54..727a62c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/LockProxyState.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/LockProxyState.java
@@ -29,6 +29,6 @@ public final class LockProxyState implements ProxyState {
     
     @Override
     public void execute(final ChannelHandlerContext context, final Object message, final DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine, final BackendConnection backendConnection) {
-        // TODO
+        throw new UnsupportedOperationException("LockProxyState");
     }
 }