Skip to content

Commit 87a4af6

Browse files
committed
Adding ClickHouseException as base Excpetion
1 parent 6425c9b commit 87a4af6

32 files changed

+157
-133
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.clickhouse.client.api;
2+
3+
public class ClickHouseException extends RuntimeException {
4+
protected boolean isRetryable = false;
5+
6+
public ClickHouseException(String message) {
7+
super(message);
8+
}
9+
10+
public ClickHouseException(String message, Throwable cause) {
11+
super(message, cause);
12+
}
13+
14+
public ClickHouseException(Throwable cause) {
15+
super(cause);
16+
}
17+
public boolean isRetryable() { return isRetryable; }
18+
}

client-v2/src/main/java/com/clickhouse/client/api/Client.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import com.clickhouse.client.api.data_formats.internal.ProcessParser;
1313
import com.clickhouse.client.api.enums.Protocol;
1414
import com.clickhouse.client.api.enums.ProxyType;
15-
import com.clickhouse.client.api.exception.ClientException;
16-
import com.clickhouse.client.api.exception.ServerException;
1715
import com.clickhouse.client.api.http.ClickHouseHttpProto;
1816
import com.clickhouse.client.api.insert.InsertResponse;
1917
import com.clickhouse.client.api.insert.InsertSettings;

client-v2/src/main/java/com/clickhouse/client/api/exception/ClientException.java renamed to client-v2/src/main/java/com/clickhouse/client/api/ClientException.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.clickhouse.client.api.exception;
1+
package com.clickhouse.client.api;
22

3-
public class ClientException extends RuntimeException {
3+
public class ClientException extends ClickHouseException {
44

55
public ClientException(String message) {
66
super(message);

client-v2/src/main/java/com/clickhouse/client/api/ClientFaultCause.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ public enum ClientFaultCause {
88
ConnectTimeout,
99
ConnectionRequestTimeout,
1010
SocketTimeout,
11+
ServerRetryable,
1112
}

client-v2/src/main/java/com/clickhouse/client/api/ClientMisconfigurationException.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.clickhouse.client.api;
22

3-
import com.clickhouse.client.api.exception.ClientException;
4-
53
/**
64
* Represents errors caused by a client misconfiguration.
75
*/

client-v2/src/main/java/com/clickhouse/client/api/exception/ConnectionInitiationException.java renamed to client-v2/src/main/java/com/clickhouse/client/api/ConnectionInitiationException.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
package com.clickhouse.client.api.exception;
1+
package com.clickhouse.client.api;
22

3-
public class ConnectionInitiationException extends ClientException {
3+
public class ConnectionInitiationException extends ClickHouseException {
44

55
public ConnectionInitiationException(String message) {
66
super(message);
7+
this.isRetryable = true;
78
}
89

910
public ConnectionInitiationException(String message, Throwable cause) {
1011
super(message, cause);
12+
this.isRetryable = true;
1113
}
1214
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.clickhouse.client.api;
2+
3+
public class DataTransferException extends ClickHouseException {
4+
5+
public DataTransferException(String message) {
6+
super(message);
7+
}
8+
9+
public DataTransferException(String message, Throwable cause) {
10+
super(message, cause);
11+
}
12+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.clickhouse.client.api;
2+
3+
public class ServerException extends ClickHouseException {
4+
5+
public static final int CODE_UNKNOWN = 0;
6+
7+
public static final int TABLE_NOT_FOUND = 60;
8+
9+
private final int code;
10+
11+
private final int transportProtocolCode;
12+
13+
public ServerException(int code, String message) {
14+
this(code, message, 500);
15+
}
16+
17+
public ServerException(int code, String message, int transportProtocolCode) {
18+
super(message);
19+
this.code = code;
20+
this.transportProtocolCode = transportProtocolCode;
21+
this.isRetryable = discoverIsRetryable(code, message, transportProtocolCode);
22+
}
23+
24+
/**
25+
* Returns CH server error code. May return 0 if code is unknown.
26+
* @return - error code from server response
27+
*/
28+
public int getCode() {
29+
return code;
30+
}
31+
32+
/**
33+
* Returns error code of underlying transport protocol. For example, HTTP status.
34+
* By default, will return {@code 500 } what is derived from HTTP Server Internal Error.
35+
*
36+
* @return - transport status code
37+
*/
38+
public int getTransportProtocolCode() {
39+
return transportProtocolCode;
40+
}
41+
42+
public boolean isRetryable() {
43+
return isRetryable;
44+
}
45+
46+
private boolean discoverIsRetryable(int code, String message, int transportProtocolCode) {
47+
//Let's check if we have a ServerException to reference the error code
48+
//https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ErrorCodes.cpp
49+
switch (code) { // UNEXPECTED_END_OF_FILE
50+
case 3: // UNEXPECTED_END_OF_FILE
51+
case 107: // FILE_DOESNT_EXIST
52+
case 159: // TIMEOUT_EXCEEDED
53+
case 164: // READONLY
54+
case 202: // TOO_MANY_SIMULTANEOUS_QUERIES
55+
case 203: // NO_FREE_CONNECTION
56+
case 209: // SOCKET_TIMEOUT
57+
case 210: // NETWORK_ERROR
58+
case 241: // MEMORY_LIMIT_EXCEEDED
59+
case 242: // TABLE_IS_READ_ONLY
60+
case 252: // TOO_MANY_PARTS
61+
case 285: // TOO_FEW_LIVE_REPLICAS
62+
case 319: // UNKNOWN_STATUS_OF_INSERT
63+
case 425: // SYSTEM_ERROR
64+
case 999: // KEEPER_EXCEPTION
65+
return true;
66+
case 0:
67+
switch (transportProtocolCode) { // Bad request
68+
case 400: // Bad request
69+
case 500: // Internal server error
70+
return true;
71+
};
72+
};
73+
return false;
74+
}
75+
}

client-v2/src/main/java/com/clickhouse/client/api/command/CommandResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.clickhouse.client.api.command;
22

3-
import com.clickhouse.client.api.exception.ClientException;
3+
import com.clickhouse.client.api.ClientException;
44
import com.clickhouse.client.api.metrics.OperationMetrics;
55
import com.clickhouse.client.api.metrics.ServerMetrics;
66
import com.clickhouse.client.api.query.QueryResponse;

client-v2/src/main/java/com/clickhouse/client/api/data_formats/NativeFormatReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.clickhouse.client.api.data_formats;
22

3-
import com.clickhouse.client.api.exception.ClientException;
3+
import com.clickhouse.client.api.ClientException;
44
import com.clickhouse.client.api.data_formats.internal.AbstractBinaryFormatReader;
55
import com.clickhouse.client.api.data_formats.internal.BinaryStreamReader;
66
import com.clickhouse.client.api.metadata.TableSchema;

0 commit comments

Comments
 (0)