You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2020/12/12 05:47:33 UTC
[shardingsphere] branch master updated: Check configured frontend
database type and throw exception if necessary (#8591)
This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 e3c6e9d Check configured frontend database type and throw exception if necessary (#8591)
e3c6e9d is described below
commit e3c6e9df48f88af9e49232f51fe54f7139a16121
Author: Liang Zhang <te...@163.com>
AuthorDate: Sat Dec 12 13:47:06 2020 +0800
Check configured frontend database type and throw exception if necessary (#8591)
* Fix test case
* Check configured frontend database type and throw exception if necessary
---
.../proxy/frontend/ShardingSphereProxy.java | 3 +-
.../frontend/netty/ServerHandlerInitializer.java | 27 ++---------------
.../FrontDatabaseProtocolTypeFactory.java} | 35 ++++++++--------------
3 files changed, 18 insertions(+), 47 deletions(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java
index fbd51a4..cbdcf03 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/ShardingSphereProxy.java
@@ -34,6 +34,7 @@ import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
import org.apache.shardingsphere.proxy.frontend.netty.ServerHandlerInitializer;
+import org.apache.shardingsphere.proxy.frontend.protocol.FrontDatabaseProtocolTypeFactory;
/**
* ShardingSphere-Proxy.
@@ -80,6 +81,6 @@ public final class ShardingSphereProxy {
.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
.childOption(ChannelOption.TCP_NODELAY, true)
.handler(new LoggingHandler(LogLevel.INFO))
- .childHandler(new ServerHandlerInitializer());
+ .childHandler(new ServerHandlerInitializer(FrontDatabaseProtocolTypeFactory.getDatabaseType()));
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
index 031042f..e6b0a01 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
@@ -22,44 +22,23 @@ import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.db.protocol.codec.PacketCodec;
-import org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException;
-import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.frontend.protocol.DatabaseProtocolFrontendEngineFactory;
import org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
-import java.util.Optional;
-
/**
* Channel initializer.
*/
@RequiredArgsConstructor
public final class ServerHandlerInitializer extends ChannelInitializer<SocketChannel> {
+ private final DatabaseType databaseType;
+
@Override
protected void initChannel(final SocketChannel socketChannel) {
- DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine = DatabaseProtocolFrontendEngineFactory.newInstance(getFrontDatabaseType());
+ DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine = DatabaseProtocolFrontendEngineFactory.newInstance(databaseType);
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast(new PacketCodec(databaseProtocolFrontendEngine.getCodecEngine()));
pipeline.addLast(new FrontendChannelInboundHandler(databaseProtocolFrontendEngine));
}
-
- private DatabaseType getFrontDatabaseType() {
- Optional<DatabaseType> configuredDatabaseType = findConfiguredDatabaseType();
- if (configuredDatabaseType.isPresent()) {
- return configuredDatabaseType.get();
- }
- if (ProxyContext.getInstance().getMetaDataContexts().getMetaDataMap().isEmpty()) {
- throw new ShardingSphereConfigurationException("Can not find any configured data sources and database frontend protocol type.");
- }
- return ProxyContext.getInstance().getMetaDataContexts().getDatabaseType();
- }
-
- // TODO check database type config error in ShardingSphereProxy class
- private Optional<DatabaseType> findConfiguredDatabaseType() {
- String configuredDatabaseType = ProxyContext.getInstance().getMetaDataContexts().getProps().getValue(ConfigurationPropertyKey.PROXY_FRONTEND_DATABASE_PROTOCOL_TYPE);
- return configuredDatabaseType.isEmpty() ? Optional.empty() : Optional.of(DatabaseTypeRegistry.getTrunkDatabaseType(configuredDatabaseType));
- }
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
similarity index 62%
copy from shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
copy to shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
index 031042f..169798b 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/ServerHandlerInitializer.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
@@ -15,38 +15,30 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.frontend.netty;
+package org.apache.shardingsphere.proxy.frontend.protocol;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelPipeline;
-import io.netty.channel.socket.SocketChannel;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.db.protocol.codec.PacketCodec;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException;
import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.frontend.protocol.DatabaseProtocolFrontendEngineFactory;
-import org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
import java.util.Optional;
/**
- * Channel initializer.
+ * Front database protocol type factory.
*/
-@RequiredArgsConstructor
-public final class ServerHandlerInitializer extends ChannelInitializer<SocketChannel> {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class FrontDatabaseProtocolTypeFactory {
- @Override
- protected void initChannel(final SocketChannel socketChannel) {
- DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine = DatabaseProtocolFrontendEngineFactory.newInstance(getFrontDatabaseType());
- ChannelPipeline pipeline = socketChannel.pipeline();
- pipeline.addLast(new PacketCodec(databaseProtocolFrontendEngine.getCodecEngine()));
- pipeline.addLast(new FrontendChannelInboundHandler(databaseProtocolFrontendEngine));
- }
-
- private DatabaseType getFrontDatabaseType() {
+ /**
+ * Get front database protocol type.
+ *
+ * @return front database protocol type
+ */
+ public static DatabaseType getDatabaseType() {
Optional<DatabaseType> configuredDatabaseType = findConfiguredDatabaseType();
if (configuredDatabaseType.isPresent()) {
return configuredDatabaseType.get();
@@ -57,8 +49,7 @@ public final class ServerHandlerInitializer extends ChannelInitializer<SocketCha
return ProxyContext.getInstance().getMetaDataContexts().getDatabaseType();
}
- // TODO check database type config error in ShardingSphereProxy class
- private Optional<DatabaseType> findConfiguredDatabaseType() {
+ private static Optional<DatabaseType> findConfiguredDatabaseType() {
String configuredDatabaseType = ProxyContext.getInstance().getMetaDataContexts().getProps().getValue(ConfigurationPropertyKey.PROXY_FRONTEND_DATABASE_PROTOCOL_TYPE);
return configuredDatabaseType.isEmpty() ? Optional.empty() : Optional.of(DatabaseTypeRegistry.getTrunkDatabaseType(configuredDatabaseType));
}