From 059c9932943f1d2ca01e10c7d45c2328c23d7d0f Mon Sep 17 00:00:00 2001 From: John Connelly Date: Mon, 23 Jan 2023 11:09:35 -0800 Subject: [PATCH 1/3] Added methods to set default namespace (onprem only) --- .../nosql/driver/NoSQLHandleConfig.java | 46 +++++++++++++++++++ .../java/oracle/nosql/driver/http/Client.java | 16 ++++++- .../nosql/driver/http/NoSQLHandleImpl.java | 9 ++++ .../nosql/driver/util/HttpConstants.java | 6 +++ 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java b/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java index 45a0df40..d51f5bc4 100644 --- a/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java +++ b/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java @@ -204,6 +204,18 @@ public class NoSQLHandleConfig implements Cloneable { */ private String compartment; + /** + * Onprem use only. + * + * The default namespace to use for all requests. If this is null (the + * default), no namespace is used unless specified in table names in + * requests and SQL statements. + * + * Any namespace specified in a table name (using the namespace:tablename + * syntax) in requests and/or SQL statements overrides this default. + */ + private String namespace; + /** * Enable rate limiting. * Cloud service only. @@ -1074,6 +1086,40 @@ public String getDefaultCompartment() { return compartment; } + /** + * @hidden + * + * Onprem use only. + * + * Sets the default namespace to use for requests sent using the + * handle. This is an optional convenience method to avoid having to + * add the namespace to table names in requests and SQL statements. + * + * Any namespace specified in a table name (using the namespace:tablename + * syntax) in requests and/or SQL statements will override this default. + * + * @param namespace the default namespace to use + * + * @return this + */ + public NoSQLHandleConfig setDefaultNamespace(String namespace) { + this.namespace = namespace; + return this; + } + + /** + * @hidden + * + * Onprem use only. + * + * Returns the default namespace to use for requests or null if not set. + * + * @return the namespace + */ + public String getDefaultNamespace() { + return namespace; + } + /** * Returns the SSL cipher suites to enable. * @return cipher suites. diff --git a/driver/src/main/java/oracle/nosql/driver/http/Client.java b/driver/src/main/java/oracle/nosql/driver/http/Client.java index 44f91068..b30010b8 100644 --- a/driver/src/main/java/oracle/nosql/driver/http/Client.java +++ b/driver/src/main/java/oracle/nosql/driver/http/Client.java @@ -22,6 +22,7 @@ import static oracle.nosql.driver.util.HttpConstants.CONTENT_LENGTH; import static oracle.nosql.driver.util.HttpConstants.CONTENT_TYPE; import static oracle.nosql.driver.util.HttpConstants.COOKIE; +import static oracle.nosql.driver.util.HttpConstants.REQUEST_NAMESPACE_HEADER; import static oracle.nosql.driver.util.HttpConstants.NOSQL_DATA_PATH; import static oracle.nosql.driver.util.HttpConstants.REQUEST_ID_HEADER; import static oracle.nosql.driver.util.HttpConstants.USER_AGENT; @@ -617,6 +618,11 @@ public Result execute(Request kvRequest) { } authProvider.setRequiredHeaders(authString, kvRequest, headers); + if (config.getDefaultNamespace() != null) { + headers.add(REQUEST_NAMESPACE_HEADER, + config.getDefaultNamespace()); + } + if (isLoggable(logger, Level.FINE) && !kvRequest.getIsRefresh()) { logTrace(logger, "Request: " + requestClass + @@ -799,7 +805,7 @@ public Result execute(Request kvRequest) { /* reduce protocol version and try again */ if (decrementSerialVersion(serialVersionUsed) == true) { exception = upe; - logInfo(logger, "Got unsupported protocol error " + + logFine(logger, "Got unsupported protocol error " + "from server: decrementing serial version to " + serialVersion + " and trying again."); continue; @@ -1647,4 +1653,12 @@ private int getRateDelayedFromHeader(HttpHeaders headers) { return 0; } + + /** + * @hidden + * For testing use + */ + public void setDefaultNamespace(String ns) { + config.setDefaultNamespace(ns); + } } diff --git a/driver/src/main/java/oracle/nosql/driver/http/NoSQLHandleImpl.java b/driver/src/main/java/oracle/nosql/driver/http/NoSQLHandleImpl.java index a099ebfb..ab85e332 100644 --- a/driver/src/main/java/oracle/nosql/driver/http/NoSQLHandleImpl.java +++ b/driver/src/main/java/oracle/nosql/driver/http/NoSQLHandleImpl.java @@ -415,6 +415,15 @@ public short getSerialVersion() { return client.getSerialVersion(); } + /** + * @hidden + * + * Testing use only. + */ + public void setDefaultNamespace(String ns) { + client.setDefaultNamespace(ns); + } + /** * Cloud service only. * The refresh method of this class is called when a Signature is refreshed diff --git a/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java b/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java index 8556bd43..7f0922cf 100644 --- a/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java +++ b/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java @@ -46,6 +46,12 @@ public class HttpConstants { */ public static final String REQUEST_COMPARTMENT_ID = "x-nosql-compartment-id"; + /** + * A header for transferring the namespace on an http request. + * onprem use only. + */ + public static final String REQUEST_NAMESPACE_HEADER = "x-nosql-namespace"; + /** * Headers possibly set by the load balancer service to indicate original * IP address From c360404a8c688abb698fc1b494c17b0ad8db46e7 Mon Sep 17 00:00:00 2001 From: John Connelly Date: Thu, 26 Jan 2023 13:42:22 -0800 Subject: [PATCH 2/3] Changes based on feedback. Updated javadoc Changed header to "x-nosql-default-ns" --- .../oracle/nosql/driver/NoSQLHandleConfig.java | 14 +++++++------- .../oracle/nosql/driver/util/HttpConstants.java | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java b/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java index d51f5bc4..7e4fbb58 100644 --- a/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java +++ b/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java @@ -205,14 +205,14 @@ public class NoSQLHandleConfig implements Cloneable { private String compartment; /** - * Onprem use only. + * On-premise only. * * The default namespace to use for all requests. If this is null (the * default), no namespace is used unless specified in table names in * requests and SQL statements. * - * Any namespace specified in a table name (using the namespace:tablename - * syntax) in requests and/or SQL statements overrides this default. + * Any non-namespace qualified table name in requests and/or SQL + * statements will be resolved/qualified to the specified namespace. */ private String namespace; @@ -1089,14 +1089,14 @@ public String getDefaultCompartment() { /** * @hidden * - * Onprem use only. + * On-premise only. * * Sets the default namespace to use for requests sent using the * handle. This is an optional convenience method to avoid having to * add the namespace to table names in requests and SQL statements. * - * Any namespace specified in a table name (using the namespace:tablename - * syntax) in requests and/or SQL statements will override this default. + * Any non-namespace qualified table name in requests and/or SQL + * statements will be resolved/qualified to the specified namespace. * * @param namespace the default namespace to use * @@ -1110,7 +1110,7 @@ public NoSQLHandleConfig setDefaultNamespace(String namespace) { /** * @hidden * - * Onprem use only. + * On-premise only. * * Returns the default namespace to use for requests or null if not set. * diff --git a/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java b/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java index 7f0922cf..debb3810 100644 --- a/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java +++ b/driver/src/main/java/oracle/nosql/driver/util/HttpConstants.java @@ -47,10 +47,10 @@ public class HttpConstants { public static final String REQUEST_COMPARTMENT_ID = "x-nosql-compartment-id"; /** - * A header for transferring the namespace on an http request. + * A header for transferring the default namespace on an http request. * onprem use only. */ - public static final String REQUEST_NAMESPACE_HEADER = "x-nosql-namespace"; + public static final String REQUEST_NAMESPACE_HEADER = "x-nosql-default-ns"; /** * Headers possibly set by the load balancer service to indicate original From 84e4bcbe06c84a2d783d26858a0433791d15aa6e Mon Sep 17 00:00:00 2001 From: John Connelly Date: Tue, 31 Jan 2023 11:12:35 -0800 Subject: [PATCH 3/3] Changed 'namespace' to 'defaultNamespace' for clarity --- .../java/oracle/nosql/driver/NoSQLHandleConfig.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java b/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java index 7e4fbb58..dba9dc68 100644 --- a/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java +++ b/driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java @@ -214,7 +214,7 @@ public class NoSQLHandleConfig implements Cloneable { * Any non-namespace qualified table name in requests and/or SQL * statements will be resolved/qualified to the specified namespace. */ - private String namespace; + private String defaultNamespace; /** * Enable rate limiting. @@ -1102,8 +1102,8 @@ public String getDefaultCompartment() { * * @return this */ - public NoSQLHandleConfig setDefaultNamespace(String namespace) { - this.namespace = namespace; + public NoSQLHandleConfig setDefaultNamespace(String defaultNamespace) { + this.defaultNamespace = defaultNamespace; return this; } @@ -1114,10 +1114,10 @@ public NoSQLHandleConfig setDefaultNamespace(String namespace) { * * Returns the default namespace to use for requests or null if not set. * - * @return the namespace + * @return the default namespace */ public String getDefaultNamespace() { - return namespace; + return defaultNamespace; } /**