Skip to content

Commit b600ba2

Browse files
committed
Caching - fetch and store the schema name for local session state to improve the caching performance. Renamed DataCacheConnectionPlugin to DataLocalCacheConnectionPlugin for clarity
1 parent 1981b9c commit b600ba2

File tree

13 files changed

+82
-46
lines changed

13 files changed

+82
-46
lines changed

docs/using-the-jdbc-driver/UsingTheJdbcDriver.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ The AWS JDBC Driver has several built-in plugins that are available to use. Plea
220220
[^2]: Federated Identity and Okta rely on IAM. Due to [^1], RDS Multi-AZ Clusters are not supported.
221221

222222
> [!NOTE]\
223-
> To see information logged by plugins such as `DataCacheConnectionPlugin` and `LogQueryConnectionPlugin`, see the [Logging](#logging) section.
223+
> To see information logged by plugins such as `DataLocalCacheConnectionPlugin` and `LogQueryConnectionPlugin`, see the [Logging](#logging) section.
224224

225225
In addition to the built-in plugins, you can also create custom plugins more suitable for your needs.
226226
For more information, see [Custom Plugins](../development-guide/LoadablePlugins.md#using-custom-plugins).

wrapper/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ if (useJacoco) {
211211
"software/amazon/jdbc/wrapper/*",
212212
"software/amazon/jdbc/util/*",
213213
"software/amazon/jdbc/profile/*",
214-
"software/amazon/jdbc/plugin/DataCacheConnectionPlugin*"
214+
"software/amazon/jdbc/plugin/cache/DataLocalCacheConnectionPlugin*"
215215
)
216216
}
217217
}))
@@ -226,7 +226,7 @@ if (useJacoco) {
226226
"software/amazon/jdbc/wrapper/*",
227227
"software/amazon/jdbc/util/*",
228228
"software/amazon/jdbc/profile/*",
229-
"software/amazon/jdbc/plugin/DataCacheConnectionPlugin*"
229+
"software/amazon/jdbc/plugin/cache/DataLocalCacheConnectionPlugin*"
230230
)
231231
}
232232
}))

wrapper/src/main/java/software/amazon/jdbc/ConnectionPluginChainBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import software.amazon.jdbc.plugin.AuroraInitialConnectionStrategyPluginFactory;
3434
import software.amazon.jdbc.plugin.AwsSecretsManagerConnectionPluginFactory;
3535
import software.amazon.jdbc.plugin.ConnectTimeConnectionPluginFactory;
36-
import software.amazon.jdbc.plugin.cache.DataCacheConnectionPluginFactory;
36+
import software.amazon.jdbc.plugin.cache.DataLocalCacheConnectionPluginFactory;
3737
import software.amazon.jdbc.plugin.cache.DataRemoteCachePluginFactory;
3838
import software.amazon.jdbc.plugin.DefaultConnectionPlugin;
3939
import software.amazon.jdbc.plugin.DriverMetaDataConnectionPluginFactory;
@@ -69,7 +69,7 @@ public class ConnectionPluginChainBuilder {
6969
{
7070
put("executionTime", new ExecutionTimeConnectionPluginFactory());
7171
put("logQuery", new LogQueryConnectionPluginFactory());
72-
put("dataCache", new DataCacheConnectionPluginFactory());
72+
put("dataCache", new DataLocalCacheConnectionPluginFactory());
7373
put("dataRemoteCache", new DataRemoteCachePluginFactory());
7474
put("customEndpoint", new CustomEndpointPluginFactory());
7575
put("efm", new HostMonitoringConnectionPluginFactory());
@@ -102,7 +102,7 @@ public class ConnectionPluginChainBuilder {
102102
new HashMap<Class<? extends ConnectionPluginFactory>, Integer>() {
103103
{
104104
put(DriverMetaDataConnectionPluginFactory.class, 100);
105-
put(DataCacheConnectionPluginFactory.class, 200);
105+
put(DataLocalCacheConnectionPluginFactory.class, 200);
106106
put(DataRemoteCachePluginFactory.class, 250);
107107
put(CustomEndpointPluginFactory.class, 380);
108108
put(AuroraInitialConnectionStrategyPluginFactory.class, 390);

wrapper/src/main/java/software/amazon/jdbc/ConnectionPluginManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import software.amazon.jdbc.plugin.AuroraConnectionTrackerPlugin;
3434
import software.amazon.jdbc.plugin.AuroraInitialConnectionStrategyPlugin;
3535
import software.amazon.jdbc.plugin.AwsSecretsManagerConnectionPlugin;
36-
import software.amazon.jdbc.plugin.cache.DataCacheConnectionPlugin;
36+
import software.amazon.jdbc.plugin.cache.DataLocalCacheConnectionPlugin;
3737
import software.amazon.jdbc.plugin.cache.DataRemoteCachePlugin;
3838
import software.amazon.jdbc.plugin.DefaultConnectionPlugin;
3939
import software.amazon.jdbc.plugin.ExecutionTimeConnectionPlugin;
@@ -73,7 +73,7 @@ public class ConnectionPluginManager implements CanReleaseResources, Wrapper {
7373
put(ExecutionTimeConnectionPlugin.class, "plugin:executionTime");
7474
put(AuroraConnectionTrackerPlugin.class, "plugin:auroraConnectionTracker");
7575
put(LogQueryConnectionPlugin.class, "plugin:logQuery");
76-
put(DataCacheConnectionPlugin.class, "plugin:dataCache");
76+
put(DataLocalCacheConnectionPlugin.class, "plugin:dataCache");
7777
put(DataRemoteCachePlugin.class, "plugin:dataRemoteCache");
7878
put(HostMonitoringConnectionPlugin.class, "plugin:efm");
7979
put(software.amazon.jdbc.plugin.efm2.HostMonitoringConnectionPlugin.class, "plugin:efm2");

wrapper/src/main/java/software/amazon/jdbc/Driver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import software.amazon.jdbc.hostlistprovider.RdsHostListProvider;
4141
import software.amazon.jdbc.hostlistprovider.monitoring.MonitoringRdsHostListProvider;
4242
import software.amazon.jdbc.plugin.AwsSecretsManagerCacheHolder;
43-
import software.amazon.jdbc.plugin.cache.DataCacheConnectionPlugin;
43+
import software.amazon.jdbc.plugin.cache.DataLocalCacheConnectionPlugin;
4444
import software.amazon.jdbc.plugin.OpenedConnectionTracker;
4545
import software.amazon.jdbc.plugin.customendpoint.CustomEndpointMonitorImpl;
4646
import software.amazon.jdbc.plugin.efm.HostMonitorThreadContainer;
@@ -430,7 +430,7 @@ public static void clearCaches() {
430430
CustomEndpointMonitorImpl.clearCache();
431431
OpenedConnectionTracker.clearCache();
432432
AwsSecretsManagerCacheHolder.clearCache();
433-
DataCacheConnectionPlugin.clearCache();
433+
DataLocalCacheConnectionPlugin.clearCache();
434434
FederatedAuthCacheHolder.clearCache();
435435
OktaAuthCacheHolder.clearCache();
436436
IamAuthCacheHolder.clearCache();

wrapper/src/main/java/software/amazon/jdbc/plugin/cache/DataCacheConnectionPlugin.java renamed to wrapper/src/main/java/software/amazon/jdbc/plugin/cache/DataLocalCacheConnectionPlugin.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838
import software.amazon.jdbc.util.telemetry.TelemetryFactory;
3939
import software.amazon.jdbc.util.telemetry.TelemetryGauge;
4040

41-
public class DataCacheConnectionPlugin extends AbstractConnectionPlugin {
41+
public class DataLocalCacheConnectionPlugin extends AbstractConnectionPlugin {
4242

43-
private static final Logger LOGGER = Logger.getLogger(DataCacheConnectionPlugin.class.getName());
43+
private static final Logger LOGGER = Logger.getLogger(DataLocalCacheConnectionPlugin.class.getName());
4444

4545
private static final Set<String> subscribedMethods = Collections.unmodifiableSet(new HashSet<>(
4646
Arrays.asList(
@@ -61,7 +61,7 @@ public class DataCacheConnectionPlugin extends AbstractConnectionPlugin {
6161
protected final String dataCacheTriggerCondition;
6262

6363
static {
64-
PropertyDefinition.registerPluginProperties(DataCacheConnectionPlugin.class);
64+
PropertyDefinition.registerPluginProperties(DataLocalCacheConnectionPlugin.class);
6565
}
6666

6767
private final TelemetryFactory telemetryFactory;
@@ -70,7 +70,7 @@ public class DataCacheConnectionPlugin extends AbstractConnectionPlugin {
7070
private final TelemetryCounter totalCallsCounter;
7171
private final TelemetryGauge cacheSizeGauge;
7272

73-
public DataCacheConnectionPlugin(final PluginService pluginService, final Properties props) {
73+
public DataLocalCacheConnectionPlugin(final PluginService pluginService, final Properties props) {
7474
this.telemetryFactory = pluginService.getTelemetryFactory();
7575
this.dataCacheTriggerCondition = DATA_CACHE_TRIGGER_CONDITION.getString(props);
7676

@@ -120,7 +120,7 @@ public <T, E extends Exception> T execute(
120120
}
121121
LOGGER.finest(
122122
() -> Messages.get(
123-
"DataCacheConnectionPlugin.queryResultsCached",
123+
"DataLocalCacheConnectionPlugin.queryResultsCached",
124124
new Object[]{methodName, sql}));
125125
} else {
126126
if (this.hitCounter != null) {

wrapper/src/main/java/software/amazon/jdbc/plugin/cache/DataCacheConnectionPluginFactory.java renamed to wrapper/src/main/java/software/amazon/jdbc/plugin/cache/DataLocalCacheConnectionPluginFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
import software.amazon.jdbc.ConnectionPluginFactory;
2222
import software.amazon.jdbc.PluginService;
2323

24-
public class DataCacheConnectionPluginFactory implements ConnectionPluginFactory {
24+
public class DataLocalCacheConnectionPluginFactory implements ConnectionPluginFactory {
2525

2626
@Override
2727
public ConnectionPlugin getInstance(final PluginService pluginService, final Properties props) {
28-
return new DataCacheConnectionPlugin(pluginService, props);
28+
return new DataLocalCacheConnectionPlugin(pluginService, props);
2929
}
3030
}

wrapper/src/main/java/software/amazon/jdbc/plugin/cache/DataRemoteCachePlugin.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import software.amazon.jdbc.JdbcMethod;
3131
import software.amazon.jdbc.PluginService;
3232
import software.amazon.jdbc.plugin.AbstractConnectionPlugin;
33+
import software.amazon.jdbc.states.SessionStateService;
3334
import software.amazon.jdbc.util.Messages;
3435
import software.amazon.jdbc.util.StringUtils;
3536
import software.amazon.jdbc.util.WrapperUtils;
@@ -89,13 +90,21 @@ private String getCacheQueryKey(String query) {
8990
try {
9091
Connection currentConn = pluginService.getCurrentConnection();
9192
DatabaseMetaData metadata = currentConn.getMetaData();
93+
// Fetch and record the schema name if the session state doesn't currently have it
94+
SessionStateService sessionStateService = pluginService.getSessionStateService();
95+
String schema = sessionStateService.getSchema().orElse(null);
96+
if (schema == null) {
97+
// Fetch the current schema name and store it in sessionStateService
98+
schema = currentConn.getSchema();
99+
sessionStateService.setSchema(schema);
100+
}
101+
92102
LOGGER.finest("DB driver protocol " + pluginService.getDriverProtocol()
93-
+ ", schema: " + currentConn.getSchema()
94103
+ ", database product: " + metadata.getDatabaseProductName() + " " + metadata.getDatabaseProductVersion()
95-
+ ", user: " + metadata.getUserName()
104+
+ ", schema: " + schema + ", user: " + metadata.getUserName()
96105
+ ", driver: " + metadata.getDriverName() + " " + metadata.getDriverVersion());
97106
// The cache key contains the schema name, user name, and the query string
98-
String[] words = {currentConn.getSchema(), metadata.getUserName(), query};
107+
String[] words = {schema, metadata.getUserName(), query};
99108
return String.join("_", words);
100109
} catch (SQLException e) {
101110
LOGGER.warning("Error getting session state: " + e.getMessage());

wrapper/src/main/java/software/amazon/jdbc/util/WrapperUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ public static Connection getConnectionFromSqlObject(final Object obj) {
573573
}
574574
} catch (final SQLException | UnsupportedOperationException e) {
575575
// Do nothing. The UnsupportedOperationException comes from ResultSets returned by
576-
// DataCacheConnectionPlugin and will be triggered when getStatement is called.
576+
// DataLocalCacheConnectionPlugin and will be triggered when getStatement is called.
577577
}
578578

579579
return null;

wrapper/src/main/resources/aws_advanced_jdbc_wrapper_messages.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ CustomEndpointPlugin.waitingForCustomEndpointInfo=Custom endpoint info for ''{0}
126126

127127
CustomEndpointPluginFactory.awsSdkNotInClasspath=Required dependency 'AWS Java SDK RDS v2.x' is not on the classpath.
128128

129-
DataCacheConnectionPlugin.queryResultsCached=[{0}] Query results will be cached: {1}
129+
DataLocalCacheConnectionPlugin.queryResultsCached=[{0}] Query results will be cached: {1}
130130

131131
# Data Remote Cache Plugin
132132
DataRemoteCachePlugin.notInClassPath=Required dependency for DataRemoteCachePlugin is not on the classpath: ''{0}''

0 commit comments

Comments
 (0)