diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHConnectionImpl.java b/src/main/java/ru/yandex/metrika/clickhouse/CHConnectionImpl.java index a4057da13041fd85f89ebdf3a1f12ce6c2af79e6..d0d1875462f8eacf8ef61f45f5ccada16af93e4b 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/CHConnectionImpl.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/CHConnectionImpl.java @@ -2,7 +2,7 @@ package ru.yandex.metrika.clickhouse; import org.apache.http.impl.client.CloseableHttpClient; import ru.yandex.metrika.clickhouse.copypaste.CHProperties; -import ru.yandex.metrika.clickhouse.except.ClickhouseUnhandledException; +import ru.yandex.metrika.clickhouse.except.CHUnknownException; import ru.yandex.metrika.clickhouse.util.CHHttpClientBuilder; import ru.yandex.metrika.clickhouse.util.LogProxy; import ru.yandex.metrika.clickhouse.util.Logger; @@ -118,7 +118,7 @@ public class CHConnectionImpl implements CHConnection { httpclient.close(); closed = true; } catch (IOException e) { - throw new ClickhouseUnhandledException("HTTP client close exception", e, dataSource.getHost(), dataSource.getPort()); + throw new CHUnknownException("HTTP client close exception", e, dataSource.getHost(), dataSource.getPort()); } } diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java b/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java index 54892ec0ea4112f4bc6764ef7c0c8d2a18b0ad37..42294bfa81bd82eecc8f1a5362de9ffcf8d77861 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/CHStatement.java @@ -1,7 +1,7 @@ package ru.yandex.metrika.clickhouse; import ru.yandex.metrika.clickhouse.copypaste.CHQueryParam; -import ru.yandex.metrika.clickhouse.copypaste.ClickhouseResponse; +import ru.yandex.metrika.clickhouse.copypaste.CHResponse; import java.io.InputStream; import java.sql.ResultSet; @@ -14,9 +14,9 @@ import java.util.Map; * @since 22.03.16 */ public interface CHStatement extends Statement { - ClickhouseResponse executeQueryClickhouseResponse(String sql) throws SQLException; - ClickhouseResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams) throws SQLException; - ClickhouseResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams, boolean ignoreDatabase) throws SQLException; + CHResponse executeQueryClickhouseResponse(String sql) throws SQLException; + CHResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams) throws SQLException; + CHResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams, boolean ignoreDatabase) throws SQLException; ResultSet executeQuery(String sql, Map<CHQueryParam, String> additionalDBParams) throws SQLException; void sendStream(InputStream content, String table) throws SQLException; } diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHStatementImpl.java b/src/main/java/ru/yandex/metrika/clickhouse/CHStatementImpl.java index f551e1f0c26143ceb3647badf438e3efbac4ef65..7ea82d47dbad712be1644f756d1680b605967423 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/CHStatementImpl.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/CHStatementImpl.java @@ -10,7 +10,8 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.util.EntityUtils; import ru.yandex.metrika.clickhouse.copypaste.*; -import ru.yandex.metrika.clickhouse.except.ClickhouseExceptionSpecifier; +import ru.yandex.metrika.clickhouse.except.CHException; +import ru.yandex.metrika.clickhouse.except.CHExceptionSpecifier; import ru.yandex.metrika.clickhouse.util.CopypasteUtils; import ru.yandex.metrika.clickhouse.util.Logger; @@ -68,7 +69,7 @@ public class CHStatementImpl implements CHStatement { InputStream is = getInputStream(sql, additionalDBParams, false); try { currentResult = new CHResultSet(properties.isCompress() - ? new ClickhouseLZ4Stream(is) : is, properties.getBufferSize(), + ? new CHLZ4Stream(is) : is, properties.getBufferSize(), extractDBName(sql), extractTableName(sql) ); @@ -76,29 +77,29 @@ public class CHStatementImpl implements CHStatement { return currentResult; } catch (Exception e){ CopypasteUtils.close(is); - throw ClickhouseExceptionSpecifier.specify(e, source.getHost(), source.getPort()); + throw CHExceptionSpecifier.specify(e, source.getHost(), source.getPort()); } } - public ClickhouseResponse executeQueryClickhouseResponse(String sql) throws SQLException { + public CHResponse executeQueryClickhouseResponse(String sql) throws SQLException { return executeQueryClickhouseResponse(sql, null); } - public ClickhouseResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams) throws SQLException { + public CHResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams) throws SQLException { return executeQueryClickhouseResponse(sql, additionalDBParams, false); } - public ClickhouseResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams, boolean ignoreDatabase) throws SQLException { + public CHResponse executeQueryClickhouseResponse(String sql, Map<CHQueryParam, String> additionalDBParams, boolean ignoreDatabase) throws SQLException { InputStream is = getInputStream(clickhousifySql(sql, "JSONCompact"), additionalDBParams, ignoreDatabase); try { byte[] bytes = null; try { if (properties.isCompress()){ - bytes = CopypasteUtils.toByteArray(new ClickhouseLZ4Stream(is)); + bytes = CopypasteUtils.toByteArray(new CHLZ4Stream(is)); } else { bytes = CopypasteUtils.toByteArray(is); } - return objectMapper.readValue(bytes, ClickhouseResponse.class); + return objectMapper.readValue(bytes, CHResponse.class); } catch (IOException e) { if (bytes != null) log.warn("Wrong json: "+new String(bytes)); throw e; @@ -419,14 +420,14 @@ public class CHStatementImpl implements CHStatement { try { InputStream messageStream = entity.getContent(); if (properties.isCompress()) { - messageStream = new ClickhouseLZ4Stream(messageStream); + messageStream = new CHLZ4Stream(messageStream); } chMessage = CopypasteUtils.toString(messageStream); } catch (IOException e) { chMessage = "error while read response " + e.getMessage(); } EntityUtils.consumeQuietly(entity); - throw ClickhouseExceptionSpecifier.specify(chMessage, source.getHost(), source.getPort()); + throw CHExceptionSpecifier.specify(chMessage, source.getHost(), source.getPort()); } if (entity.isStreaming()) { is = entity.getContent(); @@ -443,7 +444,7 @@ public class CHStatementImpl implements CHStatement { EntityUtils.consumeQuietly(entity); CopypasteUtils.close(is); log.info("Error sql: " + sql); - throw ClickhouseExceptionSpecifier.specify(e, source.getHost(), source.getPort()); + throw CHExceptionSpecifier.specify(e, source.getHost(), source.getPort()); } } @@ -465,12 +466,12 @@ public class CHStatementImpl implements CHStatement { } catch (IOException e) { chMessage = "error while read response "+ e.getMessage(); } - throw ClickhouseExceptionSpecifier.specify(chMessage, source.getHost(), source.getPort()); + throw CHExceptionSpecifier.specify(chMessage, source.getHost(), source.getPort()); } } catch (CHException e) { throw e; } catch (Exception e) { - throw ClickhouseExceptionSpecifier.specify(e, source.getHost(), source.getPort()); + throw CHExceptionSpecifier.specify(e, source.getHost(), source.getPort()); } finally { EntityUtils.consumeQuietly(entity); } diff --git a/src/main/java/ru/yandex/metrika/clickhouse/copypaste/ClickhouseLZ4Stream.java b/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHLZ4Stream.java similarity index 96% rename from src/main/java/ru/yandex/metrika/clickhouse/copypaste/ClickhouseLZ4Stream.java rename to src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHLZ4Stream.java index ee2cae2d810331679ca542bd869bac603b04d660..f52af35bb6a564c2a898985b3b03bfaefcad7d61 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/copypaste/ClickhouseLZ4Stream.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHLZ4Stream.java @@ -12,7 +12,7 @@ import java.io.InputStream; * @author jkee */ -public class ClickhouseLZ4Stream extends InputStream { +public class CHLZ4Stream extends InputStream { private static final LZ4Factory factory = LZ4Factory.safeInstance(); @@ -24,7 +24,7 @@ public class ClickhouseLZ4Stream extends InputStream { private byte[] currentBlock; private int pointer; - public ClickhouseLZ4Stream(InputStream stream) { + public CHLZ4Stream(InputStream stream) { this.stream = stream; dataWrapper = new LittleEndianDataInputStream(stream); } diff --git a/src/main/java/ru/yandex/metrika/clickhouse/copypaste/ClickhouseResponse.java b/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHResponse.java similarity index 98% rename from src/main/java/ru/yandex/metrika/clickhouse/copypaste/ClickhouseResponse.java rename to src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHResponse.java index 410b76f844060ea32052fee457663e65782a7c0c..a3340d8ebf6eaaf716d53db414915e4bddfa4428 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/copypaste/ClickhouseResponse.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/copypaste/CHResponse.java @@ -8,7 +8,7 @@ import java.util.List; * ÐœÑп-объект Ð´Ð»Ñ Ð´Ð¶ÐµÐºÑона Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð° кликхауÑа * @author jkee */ -public class ClickhouseResponse { +public class CHResponse { private List<Meta> meta; @JsonDeserialize(contentUsing = ArrayToStringDeserializer.class) private List<List<String>> data; diff --git a/src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseErrorCode.java b/src/main/java/ru/yandex/metrika/clickhouse/except/CHErrorCode.java similarity index 84% rename from src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseErrorCode.java rename to src/main/java/ru/yandex/metrika/clickhouse/except/CHErrorCode.java index f4f839e73d1ee6b02a7d0f4c45c47603f7c1d3bc..d9b8b7072b9633d63a3ae4abe3822a3de7c7f56d 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseErrorCode.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/except/CHErrorCode.java @@ -6,7 +6,7 @@ import java.util.*; * @author lopashev * @since 18.02.15 */ -public enum ClickhouseErrorCode { +public enum CHErrorCode { OK (0), NOT_FOUND_COLUMN_IN_BLOCK (10), ATTEMPT_TO_READ_AFTER_EOF (32), @@ -38,20 +38,20 @@ public enum ClickhouseErrorCode { public final Integer code; - private static final Map<Integer, ClickhouseErrorCode> byCodes; + private static final Map<Integer, CHErrorCode> byCodes; static { - Map<Integer, ClickhouseErrorCode> map = new HashMap<Integer, ClickhouseErrorCode>(); - for (ClickhouseErrorCode errorCode : values()) + Map<Integer, CHErrorCode> map = new HashMap<Integer, CHErrorCode>(); + for (CHErrorCode errorCode : values()) map.put(errorCode.code, errorCode); byCodes = Collections.unmodifiableMap(map); } - ClickhouseErrorCode(Integer code) { + CHErrorCode(Integer code) { this.code = code; } - public static ClickhouseErrorCode fromCode(Integer code) { + public static CHErrorCode fromCode(Integer code) { return byCodes.get(code); } diff --git a/src/main/java/ru/yandex/metrika/clickhouse/CHException.java b/src/main/java/ru/yandex/metrika/clickhouse/except/CHException.java similarity index 92% rename from src/main/java/ru/yandex/metrika/clickhouse/CHException.java rename to src/main/java/ru/yandex/metrika/clickhouse/except/CHException.java index 92d6a5630bdceebb194872035b5d707a8814eb7a..0c4c651801785ef6b2114d37f9bf69479810cffd 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/CHException.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/except/CHException.java @@ -1,4 +1,4 @@ -package ru.yandex.metrika.clickhouse; +package ru.yandex.metrika.clickhouse.except; import java.sql.SQLException; diff --git a/src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseExceptionSpecifier.java b/src/main/java/ru/yandex/metrika/clickhouse/except/CHExceptionSpecifier.java similarity index 88% rename from src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseExceptionSpecifier.java rename to src/main/java/ru/yandex/metrika/clickhouse/except/CHExceptionSpecifier.java index 5c9ccce5c142f6bb42ef554964b0eaf6040f14dd..36b7e63e8e3d716f045fb44691558611ae487a3e 100644 --- a/src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseExceptionSpecifier.java +++ b/src/main/java/ru/yandex/metrika/clickhouse/except/CHExceptionSpecifier.java @@ -1,15 +1,11 @@ package ru.yandex.metrika.clickhouse.except; import org.apache.http.conn.ConnectTimeoutException; -import ru.yandex.metrika.clickhouse.CHException; import ru.yandex.metrika.clickhouse.util.CopypasteUtils; import ru.yandex.metrika.clickhouse.util.Logger; import java.net.ConnectException; import java.net.SocketTimeoutException; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; /** @@ -32,11 +28,11 @@ import java.util.Map; * https://github.yandex-team.ru/Metrika/metrika-core/blob/master/metrica/src/dbms/include/DB/Core/ErrorCodes.h */ -public final class ClickhouseExceptionSpecifier { +public final class CHExceptionSpecifier { - private static final Logger log = Logger.of(ClickhouseExceptionSpecifier.class); + private static final Logger log = Logger.of(CHExceptionSpecifier.class); - private ClickhouseExceptionSpecifier() { + private CHExceptionSpecifier() { } public static CHException specify(Throwable cause, String host, int port) { @@ -57,13 +53,13 @@ public final class ClickhouseExceptionSpecifier { if (cause instanceof SocketTimeoutException) // еÑли приехал STE, то Ñкажем, что Ñто Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð»Ð¾Ñ…Ð¾Ð¹, Ñто не то же Ñамое, что SOCKET_TIMEOUT от кликхауÑа // Ñ…Ð¾Ñ‚Ñ Ñто также может значить падающий кликхауÑ, поÑмотрим что выглÑдит правдоподобнее - return new CHException(ClickhouseErrorCode.TIMEOUT_EXCEEDED.code, cause, host, port); + return new CHException(CHErrorCode.TIMEOUT_EXCEEDED.code, cause, host, port); else if (cause instanceof ConnectTimeoutException || cause instanceof ConnectException) // не Ñмогли ÑоединитьÑÑ Ñ ÐºÐ»Ð¸ÐºÑ…Ð°ÑƒÑом за connectTimeout - в принципе, может быть никто не виноват // Ñреди наших ÑущноÑтей (query/api/db), но обвинить кого-то надо, и Ñто будет db - return new CHException(ClickhouseErrorCode.NETWORK_ERROR.code, cause, host, port); + return new CHException(CHErrorCode.NETWORK_ERROR.code, cause, host, port); else - return new ClickhouseUnhandledException(cause, host, port); + return new CHUnknownException(cause, host, port); } try { int code; @@ -79,7 +75,7 @@ public final class ClickhouseExceptionSpecifier { } catch (Exception e) { log.error("Unsupported clickhouse error format, please fix ClickhouseExceptionSpecifier, message: " + clickhouseMessage + ", error: " + e.getMessage()); - return new ClickhouseUnhandledException(clickhouseMessage, cause, host, port); + return new CHUnknownException(clickhouseMessage, cause, host, port); } } diff --git a/src/main/java/ru/yandex/metrika/clickhouse/except/CHUnknownException.java b/src/main/java/ru/yandex/metrika/clickhouse/except/CHUnknownException.java new file mode 100644 index 0000000000000000000000000000000000000000..4b31083522875893ff88724953ec7fb3eaf3fd67 --- /dev/null +++ b/src/main/java/ru/yandex/metrika/clickhouse/except/CHUnknownException.java @@ -0,0 +1,22 @@ +package ru.yandex.metrika.clickhouse.except; + +/** + * @author lopashev + * @since 16.02.15 + */ +public class CHUnknownException extends CHException { + + public CHUnknownException(Throwable cause, String host, int port) { + super(CHErrorCode.UNKNOWN_EXCEPTION.code, cause, host, port); + } + + + public CHUnknownException(String message, Throwable cause, String host, int port) { + super(CHErrorCode.UNKNOWN_EXCEPTION.code, message, cause, host, port); + } + + public CHUnknownException(Integer code, Throwable cause, String host, int port) { + super(code, cause, host, port); + } + +} diff --git a/src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseUnhandledException.java b/src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseUnhandledException.java deleted file mode 100644 index 016a6805efbec8224b2d094959e295f63f2544f8..0000000000000000000000000000000000000000 --- a/src/main/java/ru/yandex/metrika/clickhouse/except/ClickhouseUnhandledException.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.yandex.metrika.clickhouse.except; - -import ru.yandex.metrika.clickhouse.CHException; - -/** - * @author lopashev - * @since 16.02.15 - */ -public class ClickhouseUnhandledException extends CHException { - - public ClickhouseUnhandledException(Throwable cause, String host, int port) { - super(ClickhouseErrorCode.UNKNOWN_EXCEPTION.code, cause, host, port); - } - - - public ClickhouseUnhandledException(String message, Throwable cause, String host, int port) { - super(ClickhouseErrorCode.UNKNOWN_EXCEPTION.code, message, cause, host, port); - } - - public ClickhouseUnhandledException(Integer code, Throwable cause, String host, int port) { - super(code, cause, host, port); - } - -}