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/05 09:22:04 UTC
[shardingsphere] branch master updated: Remove StandardLock for
proxy without governance (#9598)
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 d261cf9 Remove StandardLock for proxy without governance (#9598)
d261cf9 is described below
commit d261cf93cc716de4d4d6eff56e91c678dd1ab2b6
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Fri Mar 5 17:21:34 2021 +0800
Remove StandardLock for proxy without governance (#9598)
---
.../metadata/GovernanceMetaDataContexts.java | 4 +-
.../shardingsphere/infra/lock/StandardLock.java | 53 ----------------------
.../infra/lock/StandardLockTest.java | 39 ----------------
.../infra/context/metadata/MetaDataContexts.java | 5 +-
.../metadata/impl/StandardMetaDataContexts.java | 16 ++++---
.../driver/executor/DriverJDBCExecutor.java | 8 ++--
.../internal/state/impl/LockDriverState.java | 2 +-
.../communication/DatabaseCommunicationEngine.java | 8 ++--
.../proxy/backend/context/ProxyContext.java | 3 +-
.../proxy/frontend/state/impl/LockProxyState.java | 2 +-
10 files changed, 28 insertions(+), 112 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 8bbd5a0..0c7c1d7 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
@@ -143,8 +143,8 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
}
@Override
- public ShardingSphereLock getLock() {
- return lock;
+ public Optional<ShardingSphereLock> getLock() {
+ return Optional.of(lock);
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/StandardLock.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/StandardLock.java
deleted file mode 100644
index 14c63e1..0000000
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/lock/StandardLock.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.lock;
-
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
-import org.apache.shardingsphere.infra.state.StateEvent;
-import org.apache.shardingsphere.infra.state.StateType;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * Standard lock.
- */
-public final class StandardLock extends AbstractShardingSphereLock {
-
- private final ReentrantLock lock = new ReentrantLock();
-
- @Override
- public boolean tryGlobalLock(final long timeoutMilliseconds) {
- boolean result = false;
- try {
- result = lock.tryLock(timeoutMilliseconds, TimeUnit.MILLISECONDS);
- } catch (final InterruptedException ignored) {
- }
- if (result) {
- ShardingSphereEventBus.getInstance().post(new StateEvent(StateType.LOCK, true));
- }
- return result;
- }
-
- @Override
- public void releaseGlobalLock() {
- lock.unlock();
- ShardingSphereEventBus.getInstance().post(new StateEvent(StateType.LOCK, false));
- signalAll();
- }
-}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/lock/StandardLockTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/lock/StandardLockTest.java
deleted file mode 100644
index 72df9a1..0000000
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/lock/StandardLockTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.lock;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertTrue;
-
-public final class StandardLockTest {
-
- private final StandardLock lock = new StandardLock();
-
- @Test
- public void assertTryLock() {
- assertTrue(lock.tryGlobalLock(50L));
- lock.releaseGlobalLock();
- }
-
- @Test
- public void assertReleaseLock() {
- assertTrue(lock.tryGlobalLock(50L));
- lock.releaseGlobalLock();
- }
-}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
index 4f9dd32..31fa440 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
@@ -17,16 +17,17 @@
package org.apache.shardingsphere.infra.context.metadata;
-import org.apache.shardingsphere.infra.metadata.auth.Authentication;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.metadata.auth.Authentication;
import org.apache.shardingsphere.infra.optimize.context.CalciteContextFactory;
import org.apache.shardingsphere.infra.state.StateContext;
import java.io.Closeable;
import java.util.Collection;
+import java.util.Optional;
/**
* Meta data contexts.
@@ -88,7 +89,7 @@ public interface MetaDataContexts extends Closeable {
*
* @return lock
*/
- ShardingSphereLock getLock();
+ Optional<ShardingSphereLock> getLock();
/**
* Get state context.
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java
index 167594a..8233d39 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java
@@ -18,22 +18,22 @@
package org.apache.shardingsphere.infra.context.metadata.impl;
import lombok.Getter;
-import org.apache.shardingsphere.infra.metadata.auth.Authentication;
-import org.apache.shardingsphere.infra.metadata.auth.AuthenticationEngine;
-import org.apache.shardingsphere.infra.metadata.auth.builtin.DefaultAuthentication;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import org.apache.shardingsphere.infra.database.DefaultSchema;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
-import org.apache.shardingsphere.infra.lock.StandardLock;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.metadata.auth.Authentication;
+import org.apache.shardingsphere.infra.metadata.auth.AuthenticationEngine;
+import org.apache.shardingsphere.infra.metadata.auth.builtin.DefaultAuthentication;
import org.apache.shardingsphere.infra.optimize.context.CalciteContextFactory;
import org.apache.shardingsphere.infra.state.StateContext;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Optional;
import java.util.Properties;
/**
@@ -52,8 +52,6 @@ public final class StandardMetaDataContexts implements MetaDataContexts {
private final ConfigurationProperties props;
- private final ShardingSphereLock lock;
-
private final StateContext stateContext;
public StandardMetaDataContexts() {
@@ -67,7 +65,6 @@ public final class StandardMetaDataContexts implements MetaDataContexts {
calciteContextFactory = new CalciteContextFactory(metaDataMap);
this.authentication = AuthenticationEngine.findSPIAuthentication().orElse(authentication);
this.props = props;
- lock = new StandardLock();
stateContext = new StateContext();
}
@@ -87,6 +84,11 @@ public final class StandardMetaDataContexts implements MetaDataContexts {
}
@Override
+ public Optional<ShardingSphereLock> getLock() {
+ return Optional.empty();
+ }
+
+ @Override
public void close() {
executorEngine.close();
}
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 741d86f..562e8a9 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
@@ -134,8 +134,8 @@ public final class DriverJDBCExecutor {
}
private boolean tryGlobalLock(final SQLStatement sqlStatement, final long lockTimeoutMilliseconds) {
- if (needLock(sqlStatement)) {
- if (!metaDataContexts.getLock().tryGlobalLock(lockTimeoutMilliseconds)) {
+ if (metaDataContexts.getLock().isPresent() && needLock(sqlStatement)) {
+ if (!metaDataContexts.getLock().get().tryGlobalLock(lockTimeoutMilliseconds)) {
throw new ShardingSphereException("Service lock wait timeout of %s ms exceeded", lockTimeoutMilliseconds);
}
return true;
@@ -164,6 +164,8 @@ public final class DriverJDBCExecutor {
}
private void releaseGlobalLock() {
- metaDataContexts.getLock().releaseGlobalLock();
+ if (metaDataContexts.getLock().isPresent()) {
+ metaDataContexts.getLock().get().releaseGlobalLock();
+ }
}
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/state/impl/LockDriverState.java b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/state/impl/LockDriverState.java
index 48bf050..d297f6a 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/state/impl/LockDriverState.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/state/impl/LockDriverState.java
@@ -43,7 +43,7 @@ public final class LockDriverState implements DriverState {
private void block(final MetaDataContexts metaDataContexts) {
long lockTimeoutMilliseconds = metaDataContexts.getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS);
- if (!metaDataContexts.getLock().await(lockTimeoutMilliseconds)) {
+ if (metaDataContexts.getLock().isPresent() && !metaDataContexts.getLock().get().await(lockTimeoutMilliseconds)) {
throw new ShardingSphereException("Service lock wait timeout of %s ms exceeded", lockTimeoutMilliseconds);
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index 811640a..b9b6c13 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -120,8 +120,8 @@ public final class DatabaseCommunicationEngine {
}
private boolean tryGlobalLock(final ExecutionContext executionContext, final Long lockTimeoutMilliseconds) {
- if (needLock(executionContext.getSqlStatementContext().getSqlStatement())) {
- if (!ProxyContext.getInstance().getLock().tryGlobalLock(lockTimeoutMilliseconds)) {
+ if (ProxyContext.getInstance().getLock().isPresent() && needLock(executionContext.getSqlStatementContext().getSqlStatement())) {
+ if (!ProxyContext.getInstance().getLock().get().tryGlobalLock(lockTimeoutMilliseconds)) {
throw new LockWaitTimeoutException(lockTimeoutMilliseconds);
}
return true;
@@ -134,7 +134,9 @@ public final class DatabaseCommunicationEngine {
}
private void releaseGlobalLock() {
- ProxyContext.getInstance().getLock().releaseGlobalLock();
+ if (ProxyContext.getInstance().getLock().isPresent()) {
+ ProxyContext.getInstance().getLock().get().releaseGlobalLock();
+ }
}
private QueryResponseHeader processExecuteQuery(final ExecutionContext executionContext, final List<QueryResult> queryResults, final QueryResult queryResultSample) throws SQLException {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
index d4d0d73..457ae54 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
@@ -31,6 +31,7 @@ import org.apache.shardingsphere.transaction.context.impl.StandardTransactionCon
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
/**
* Proxy context.
@@ -109,7 +110,7 @@ public final class ProxyContext {
*
* @return lock
*/
- public ShardingSphereLock getLock() {
+ public Optional<ShardingSphereLock> getLock() {
return metaDataContexts.getLock();
}
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 fd7b102..b730ad1 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
@@ -43,7 +43,7 @@ public final class LockProxyState implements ProxyState {
private void block(final ChannelHandlerContext context, final DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine) {
Long lockTimeoutMilliseconds = ProxyContext.getInstance().getMetaDataContexts().getProps().<Long>getValue(ConfigurationPropertyKey.LOCK_WAIT_TIMEOUT_MILLISECONDS);
- if (!ProxyContext.getInstance().getLock().await(lockTimeoutMilliseconds)) {
+ if (ProxyContext.getInstance().getLock().isPresent() && !ProxyContext.getInstance().getLock().get().await(lockTimeoutMilliseconds)) {
doError(context, databaseProtocolFrontendEngine, new LockWaitTimeoutException(lockTimeoutMilliseconds));
}
}