提交 91c6676b 编写于 作者: T terrymanu

Add ExpectedExceptions for proxy

上级 6c91b6eb
......@@ -31,6 +31,7 @@ import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.Bac
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.ConnectionStatusHandler;
import org.apache.shardingsphere.proxy.frontend.command.executor.CommandExecutor;
import org.apache.shardingsphere.proxy.frontend.command.executor.QueryCommandExecutor;
import org.apache.shardingsphere.proxy.frontend.exception.ExpectedExceptions;
import org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
import java.sql.SQLException;
......@@ -77,7 +78,7 @@ public final class CommandExecutorTask implements Runnable {
context.writeAndFlush(databaseProtocolFrontendEngine.getCommandExecuteEngine().getErrorPacket(ex));
Optional<DatabasePacket<?>> databasePacket = databaseProtocolFrontendEngine.getCommandExecuteEngine().getOtherPacket();
databasePacket.ifPresent(context::writeAndFlush);
if (!isExpectedException(ex)) {
if (!ExpectedExceptions.isExpected(ex.getClass())) {
log.error("Exception occur: ", ex);
}
} finally {
......@@ -88,11 +89,6 @@ public final class CommandExecutorTask implements Runnable {
}
}
// TODO finish expected exception
private boolean isExpectedException(final Exception ex) {
return ex instanceof RuntimeException;
}
private boolean executeCommand(final ChannelHandlerContext context, final PacketPayload payload, final BackendConnection backendConnection) throws SQLException {
CommandExecuteEngine commandExecuteEngine = databaseProtocolFrontendEngine.getCommandExecuteEngine();
CommandPacketType type = commandExecuteEngine.getCommandPacketType(payload);
......
/*
* 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.proxy.frontend.exception;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.proxy.backend.exception.BackendException;
import org.apache.shardingsphere.proxy.backend.text.sctl.exception.ShardingCTLException;
import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
import java.util.Collection;
import java.util.HashSet;
/**
* Expected exceptions.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ExpectedExceptions {
private static final Collection<Class<? extends Exception>> EXCEPTIONS = new HashSet<>();
static {
EXCEPTIONS.add(ShardingSphereException.class);
EXCEPTIONS.add(ShardingSphereConfigurationException.class);
EXCEPTIONS.add(SQLParsingException.class);
EXCEPTIONS.add(ShardingCTLException.class);
EXCEPTIONS.add(BackendException.class);
}
/**
* Judge whether expected exception.
* @param exceptionClass exception class
* @return is expected exception or not
*/
public static boolean isExpected(final Class<?> exceptionClass) {
return EXCEPTIONS.contains(exceptionClass);
}
}
......@@ -63,9 +63,9 @@ public final class PostgreSQLCommandExecuteEngine implements CommandExecuteEngin
@Override
public DatabasePacket<?> getErrorPacket(final Exception cause) {
PostgreSQLErrorResponsePacket errorResponsePacket = new PostgreSQLErrorResponsePacket();
errorResponsePacket.addField(PostgreSQLErrorResponsePacket.FIELD_TYPE_MESSAGE, cause.getMessage());
return errorResponsePacket;
PostgreSQLErrorResponsePacket result = new PostgreSQLErrorResponsePacket();
result.addField(PostgreSQLErrorResponsePacket.FIELD_TYPE_MESSAGE, cause.getMessage());
return result;
}
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册