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");
}
}