diff --git a/driver/src/main/java/oracle/nosql/driver/RemoteTransportException.java b/driver/src/main/java/oracle/nosql/driver/RemoteTransportException.java new file mode 100644 index 00000000..72817e13 --- /dev/null +++ b/driver/src/main/java/oracle/nosql/driver/RemoteTransportException.java @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2011, 2025 Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Universal Permissive License v 1.0 as shown at + * https://oss.oracle.com/licenses/upl/ + */ + +package oracle.nosql.driver; + +/** + * Thrown when the service reports a server-side {@code FaultException} that + * appears to have originated from a remote networking/transport failure + * between service components. + *

+ * This exception is intentionally not retried by the Java SDK's + * internal retry handler. Application code may choose to retry, using the + * following guidance: + *

+ */ +public class RemoteTransportException extends NoSQLException { + + private static final long serialVersionUID = 1L; + + public RemoteTransportException(String msg) { + super(msg); + } + + public RemoteTransportException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/driver/src/main/java/oracle/nosql/driver/ops/serde/BinaryProtocol.java b/driver/src/main/java/oracle/nosql/driver/ops/serde/BinaryProtocol.java index 0ee8627a..ee3a8943 100644 --- a/driver/src/main/java/oracle/nosql/driver/ops/serde/BinaryProtocol.java +++ b/driver/src/main/java/oracle/nosql/driver/ops/serde/BinaryProtocol.java @@ -18,6 +18,7 @@ import oracle.nosql.driver.Durability; import oracle.nosql.driver.EvolutionLimitException; import oracle.nosql.driver.FieldRange; +import oracle.nosql.driver.RemoteTransportException; import oracle.nosql.driver.IndexExistsException; import oracle.nosql.driver.IndexLimitException; import oracle.nosql.driver.IndexNotFoundException; @@ -437,6 +438,8 @@ public static RuntimeException mapException(int code, String msg) { return new IllegalArgumentException(msg); case RECOMPILE_QUERY: return new PrepareQueryException(msg); + case REMOTE_ERROR: + return new RemoteTransportException(msg); default: return new NoSQLException("Unknown error code " + code + ": " + msg); diff --git a/driver/src/main/java/oracle/nosql/driver/util/BinaryProtocol.java b/driver/src/main/java/oracle/nosql/driver/util/BinaryProtocol.java index 7e47f559..aaefc472 100644 --- a/driver/src/main/java/oracle/nosql/driver/util/BinaryProtocol.java +++ b/driver/src/main/java/oracle/nosql/driver/util/BinaryProtocol.java @@ -222,6 +222,14 @@ public static boolean isTenantOperation(OpCode op) { public static final int UNKNOWN_ERROR = 125; public static final int ILLEGAL_STATE = 126; + /* + * A server-side FaultException that appears to have originated from a + * remote networking/transport failure. This is intentionally in the + * NON-retryable (125+) range so that the Java SDK does not perform + * automatic retries; callers can decide whether/how to retry. + */ + public static final int REMOTE_ERROR = 127; + /* * Return true if the errorCode means a user-generated error. */