lokiore commented on code in PR #1459:
URL: https://github.com/apache/phoenix/pull/1459#discussion_r915742789
##########
phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java:
##########
@@ -254,163 +255,170 @@ private PhoenixConnection(ConnectionQueryServices
services, String url,
Properties info, PMetaData metaData, MutationState mutationState,
boolean isDescVarLengthRowKeyUpgrade, boolean isRunningUpgrade,
boolean buildingIndex, boolean isInternalConnection) throws
SQLException {
- GLOBAL_PHOENIX_CONNECTIONS_ATTEMPTED_COUNTER.increment();
- this.url = url;
- this.isDescVarLengthRowKeyUpgrade = isDescVarLengthRowKeyUpgrade;
- this.isInternalConnection = isInternalConnection;
-
- // Filter user provided properties based on property policy, if
- // provided and QueryServices.PROPERTY_POLICY_PROVIDER_ENABLED is true
- if
(Boolean.valueOf(info.getProperty(QueryServices.PROPERTY_POLICY_PROVIDER_ENABLED,
-
String.valueOf(QueryServicesOptions.DEFAULT_PROPERTY_POLICY_PROVIDER_ENABLED))))
{
- PropertyPolicyProvider.getPropertyPolicy().evaluate(info);
- }
-
- // Copy so client cannot change
- this.info = PropertiesUtil.deepCopy(info);
- final PName tenantId = JDBCUtil.getTenantId(url, info);
- if (this.info.isEmpty() && tenantId == null) {
- this.services = services;
- } else {
- // Create child services keyed by tenantId to track resource usage
- // for
- // a tenantId for all connections on this JVM.
- if (tenantId != null) {
- services = services.getChildQueryServices(tenantId
- .getBytesPtr());
+ try {
+ GLOBAL_PHOENIX_CONNECTIONS_ATTEMPTED_COUNTER.increment();
+ this.url = url;
+ this.isDescVarLengthRowKeyUpgrade = isDescVarLengthRowKeyUpgrade;
+ this.isInternalConnection = isInternalConnection;
+
+ // Filter user provided properties based on property policy, if
+ // provided and QueryServices.PROPERTY_POLICY_PROVIDER_ENABLED is
true
+ if
(Boolean.valueOf(info.getProperty(QueryServices.PROPERTY_POLICY_PROVIDER_ENABLED,
+
String.valueOf(QueryServicesOptions.DEFAULT_PROPERTY_POLICY_PROVIDER_ENABLED))))
{
+ PropertyPolicyProvider.getPropertyPolicy().evaluate(info);
}
- ReadOnlyProps currentProps = services.getProps();
- final ReadOnlyProps augmentedProps = currentProps
- .addAll(filterKnownNonProperties(this.info));
- this.services = augmentedProps == currentProps ? services
- : new DelegateConnectionQueryServices(services) {
- @Override
- public ReadOnlyProps getProps() {
- return augmentedProps;
+
+ // Copy so client cannot change
+ this.info = PropertiesUtil.deepCopy(info);
+ final PName tenantId = JDBCUtil.getTenantId(url, info);
+ if (this.info.isEmpty() && tenantId == null) {
+ this.services = services;
+ } else {
+ // Create child services keyed by tenantId to track resource
usage
+ // for
+ // a tenantId for all connections on this JVM.
+ if (tenantId != null) {
+ services = services.getChildQueryServices(tenantId
+ .getBytesPtr());
}
- };
- }
+ ReadOnlyProps currentProps = services.getProps();
+ final ReadOnlyProps augmentedProps = currentProps
+ .addAll(filterKnownNonProperties(this.info));
+ this.services = augmentedProps == currentProps ? services
+ : new DelegateConnectionQueryServices(services) {
+ @Override
+ public ReadOnlyProps getProps() {
+ return augmentedProps;
+ }
+ };
+ }
- Long scnParam = JDBCUtil.getCurrentSCN(url, this.info);
- checkScn(scnParam);
- Long buildIndexAtParam = JDBCUtil.getBuildIndexSCN(url, this.info);
- checkBuildIndexAt(buildIndexAtParam);
- checkScnAndBuildIndexAtEquality(scnParam, buildIndexAtParam);
+ Long scnParam = JDBCUtil.getCurrentSCN(url, this.info);
+ checkScn(scnParam);
+ Long buildIndexAtParam = JDBCUtil.getBuildIndexSCN(url, this.info);
+ checkBuildIndexAt(buildIndexAtParam);
+ checkScnAndBuildIndexAtEquality(scnParam, buildIndexAtParam);
+
+ this.scn = scnParam != null ? scnParam : buildIndexAtParam;
+ this.buildingIndex = buildingIndex || buildIndexAtParam != null;
+ this.isAutoFlush = this.services.getProps().getBoolean(
+ QueryServices.TRANSACTIONS_ENABLED,
+ QueryServicesOptions.DEFAULT_TRANSACTIONS_ENABLED)
+ && this.services.getProps().getBoolean(
+ QueryServices.AUTO_FLUSH_ATTRIB,
+ QueryServicesOptions.DEFAULT_AUTO_FLUSH);
+ this.isAutoCommit = JDBCUtil.getAutoCommit(
+ url,
+ this.info,
+ this.services.getProps().getBoolean(
+ QueryServices.AUTO_COMMIT_ATTRIB,
+ QueryServicesOptions.DEFAULT_AUTO_COMMIT));
+ this.consistency = JDBCUtil.getConsistencyLevel(
+ url,
+ this.info,
+
this.services.getProps().get(QueryServices.CONSISTENCY_ATTRIB,
+ QueryServicesOptions.DEFAULT_CONSISTENCY_LEVEL));
+ // currently we are not resolving schema set through property, so
if
+ // schema doesn't exists ,connection will not fail
+ // but queries may fail
+ this.schema = JDBCUtil.getSchema(
+ url,
+ this.info,
+ this.services.getProps().get(QueryServices.SCHEMA_ATTRIB,
+ QueryServicesOptions.DEFAULT_SCHEMA));
+ this.tenantId = tenantId;
+ this.mutateBatchSize = JDBCUtil.getMutateBatchSize(url, this.info,
+ this.services.getProps());
+ this.mutateBatchSizeBytes = JDBCUtil.getMutateBatchSizeBytes(url,
+ this.info, this.services.getProps());
+ datePattern = this.services.getProps().get(
+ QueryServices.DATE_FORMAT_ATTRIB,
DateUtil.DEFAULT_DATE_FORMAT);
+ timePattern = this.services.getProps().get(
+ QueryServices.TIME_FORMAT_ATTRIB,
DateUtil.DEFAULT_TIME_FORMAT);
+ timestampPattern = this.services.getProps().get(
+ QueryServices.TIMESTAMP_FORMAT_ATTRIB,
+ DateUtil.DEFAULT_TIMESTAMP_FORMAT);
+ String numberPattern = this.services.getProps().get(
+ QueryServices.NUMBER_FORMAT_ATTRIB,
+ NumberUtil.DEFAULT_NUMBER_FORMAT);
+ int maxSize = this.services.getProps().getInt(
+ QueryServices.MAX_MUTATION_SIZE_ATTRIB,
+ QueryServicesOptions.DEFAULT_MAX_MUTATION_SIZE);
+ long maxSizeBytes = this.services.getProps().getLong(
+ QueryServices.MAX_MUTATION_SIZE_BYTES_ATTRIB,
+ QueryServicesOptions.DEFAULT_MAX_MUTATION_SIZE_BYTES);
+ String timeZoneID =
this.services.getProps().get(QueryServices.DATE_FORMAT_TIMEZONE_ATTRIB,
+ DateUtil.DEFAULT_TIME_ZONE_ID);
+ Format dateFormat = DateUtil.getDateFormatter(datePattern,
timeZoneID);
+ Format timeFormat = DateUtil.getDateFormatter(timePattern,
timeZoneID);
+ Format timestampFormat =
DateUtil.getDateFormatter(timestampPattern, timeZoneID);
+ formatters.put(PDate.INSTANCE, dateFormat);
+ formatters.put(PTime.INSTANCE, timeFormat);
+ formatters.put(PTimestamp.INSTANCE, timestampFormat);
+ formatters.put(PUnsignedDate.INSTANCE, dateFormat);
+ formatters.put(PUnsignedTime.INSTANCE, timeFormat);
+ formatters.put(PUnsignedTimestamp.INSTANCE, timestampFormat);
+ formatters.put(PDecimal.INSTANCE,
+ FunctionArgumentType.NUMERIC.getFormatter(numberPattern));
+ formatters.put(PVarbinary.INSTANCE, VarBinaryFormatter.INSTANCE);
+ // We do not limit the metaData on a connection less than the
global
+ // one,
+ // as there's not much that will be cached here.
+ Pruner pruner = new Pruner() {
- this.scn = scnParam != null ? scnParam : buildIndexAtParam;
- this.buildingIndex = buildingIndex || buildIndexAtParam != null;
- this.isAutoFlush = this.services.getProps().getBoolean(
- QueryServices.TRANSACTIONS_ENABLED,
- QueryServicesOptions.DEFAULT_TRANSACTIONS_ENABLED)
- && this.services.getProps().getBoolean(
- QueryServices.AUTO_FLUSH_ATTRIB,
- QueryServicesOptions.DEFAULT_AUTO_FLUSH);
- this.isAutoCommit = JDBCUtil.getAutoCommit(
- url,
- this.info,
- this.services.getProps().getBoolean(
- QueryServices.AUTO_COMMIT_ATTRIB,
- QueryServicesOptions.DEFAULT_AUTO_COMMIT));
- this.consistency = JDBCUtil.getConsistencyLevel(
- url,
- this.info,
- this.services.getProps().get(QueryServices.CONSISTENCY_ATTRIB,
- QueryServicesOptions.DEFAULT_CONSISTENCY_LEVEL));
- // currently we are not resolving schema set through property, so if
- // schema doesn't exists ,connection will not fail
- // but queries may fail
- this.schema = JDBCUtil.getSchema(
- url,
- this.info,
- this.services.getProps().get(QueryServices.SCHEMA_ATTRIB,
- QueryServicesOptions.DEFAULT_SCHEMA));
- this.tenantId = tenantId;
- this.mutateBatchSize = JDBCUtil.getMutateBatchSize(url, this.info,
- this.services.getProps());
- this.mutateBatchSizeBytes = JDBCUtil.getMutateBatchSizeBytes(url,
- this.info, this.services.getProps());
- datePattern = this.services.getProps().get(
- QueryServices.DATE_FORMAT_ATTRIB,
DateUtil.DEFAULT_DATE_FORMAT);
- timePattern = this.services.getProps().get(
- QueryServices.TIME_FORMAT_ATTRIB,
DateUtil.DEFAULT_TIME_FORMAT);
- timestampPattern = this.services.getProps().get(
- QueryServices.TIMESTAMP_FORMAT_ATTRIB,
- DateUtil.DEFAULT_TIMESTAMP_FORMAT);
- String numberPattern = this.services.getProps().get(
- QueryServices.NUMBER_FORMAT_ATTRIB,
- NumberUtil.DEFAULT_NUMBER_FORMAT);
- int maxSize = this.services.getProps().getInt(
- QueryServices.MAX_MUTATION_SIZE_ATTRIB,
- QueryServicesOptions.DEFAULT_MAX_MUTATION_SIZE);
- long maxSizeBytes = this.services.getProps().getLong(
- QueryServices.MAX_MUTATION_SIZE_BYTES_ATTRIB,
- QueryServicesOptions.DEFAULT_MAX_MUTATION_SIZE_BYTES);
- String timeZoneID =
this.services.getProps().get(QueryServices.DATE_FORMAT_TIMEZONE_ATTRIB,
- DateUtil.DEFAULT_TIME_ZONE_ID);
- Format dateFormat = DateUtil.getDateFormatter(datePattern, timeZoneID);
- Format timeFormat = DateUtil.getDateFormatter(timePattern, timeZoneID);
- Format timestampFormat = DateUtil.getDateFormatter(timestampPattern,
timeZoneID);
- formatters.put(PDate.INSTANCE, dateFormat);
- formatters.put(PTime.INSTANCE, timeFormat);
- formatters.put(PTimestamp.INSTANCE, timestampFormat);
- formatters.put(PUnsignedDate.INSTANCE, dateFormat);
- formatters.put(PUnsignedTime.INSTANCE, timeFormat);
- formatters.put(PUnsignedTimestamp.INSTANCE, timestampFormat);
- formatters.put(PDecimal.INSTANCE,
- FunctionArgumentType.NUMERIC.getFormatter(numberPattern));
- formatters.put(PVarbinary.INSTANCE, VarBinaryFormatter.INSTANCE);
- // We do not limit the metaData on a connection less than the global
- // one,
- // as there's not much that will be cached here.
- Pruner pruner = new Pruner() {
+ @Override
+ public boolean prune(PTable table) {
+ long maxTimestamp = scn == null ?
HConstants.LATEST_TIMESTAMP
+ : scn;
+ return (table.getType() != PTableType.SYSTEM && (table
+ .getTimeStamp() >= maxTimestamp ||
(table.getTenantId() != null && !Objects
+ .equal(tenantId, table.getTenantId()))));
+ }
- @Override
- public boolean prune(PTable table) {
- long maxTimestamp = scn == null ? HConstants.LATEST_TIMESTAMP
- : scn;
- return (table.getType() != PTableType.SYSTEM && (table
- .getTimeStamp() >= maxTimestamp ||
(table.getTenantId() != null && !Objects
- .equal(tenantId, table.getTenantId()))));
+ @Override
+ public boolean prune(PFunction function) {
+ long maxTimestamp = scn == null ?
HConstants.LATEST_TIMESTAMP
+ : scn;
+ return (function.getTimeStamp() >= maxTimestamp ||
(function
+ .getTenantId() != null && !Objects.equal(tenantId,
+ function.getTenantId())));
+ }
+ };
+ this.logLevel =
LogLevel.valueOf(this.services.getProps().get(QueryServices.LOG_LEVEL,
+ QueryServicesOptions.DEFAULT_LOGGING_LEVEL));
+ this.auditLogLevel =
LogLevel.valueOf(this.services.getProps().get(QueryServices.AUDIT_LOG_LEVEL,
+ QueryServicesOptions.DEFAULT_AUDIT_LOGGING_LEVEL));
+ this.isRequestLevelMetricsEnabled =
JDBCUtil.isCollectingRequestLevelMetricsEnabled(url, info,
+ this.services.getProps());
+ this.mutationState = mutationState == null ?
newMutationState(maxSize,
+ maxSizeBytes) : new MutationState(mutationState, this);
+ this.metaData = metaData;
+ this.metaData.pruneTables(pruner);
+ this.metaData.pruneFunctions(pruner);
+ this.services.addConnection(this);
+
+ // setup tracing, if its enabled
+ this.sampler = Tracing.getConfiguredSampler(this);
+ this.customTracingAnnotations =
getImmutableCustomTracingAnnotations();
+ this.scannerQueue = new LinkedBlockingQueue<>();
+ this.tableResultIteratorFactory = new
DefaultTableResultIteratorFactory();
+ this.isRunningUpgrade = isRunningUpgrade;
+
+ this.logSamplingRate =
Double.parseDouble(this.services.getProps().get(QueryServices.LOG_SAMPLE_RATE,
+ QueryServicesOptions.DEFAULT_LOG_SAMPLE_RATE));
+ if (isInternalConnection) {
+ GLOBAL_OPEN_INTERNAL_PHOENIX_CONNECTIONS.increment();
+ } else {
+ GLOBAL_OPEN_PHOENIX_CONNECTIONS.increment();
}
-
- @Override
- public boolean prune(PFunction function) {
- long maxTimestamp = scn == null ? HConstants.LATEST_TIMESTAMP
- : scn;
- return (function.getTimeStamp() >= maxTimestamp || (function
- .getTenantId() != null && !Objects.equal(tenantId,
- function.getTenantId())));
+ this.sourceOfOperation =
+
this.services.getProps().get(QueryServices.SOURCE_OPERATION_ATTRIB, null);
+ } catch (SQLException sqlException) {
+ if (!isInternalConnection && sqlException.getErrorCode() !=
SQLExceptionCode.NEW_CONNECTION_THROTTLED.getErrorCode()) {
+ GLOBAL_FAILED_PHOENIX_CONNECTIONS.increment();
}
- };
- this.logLevel=
LogLevel.valueOf(this.services.getProps().get(QueryServices.LOG_LEVEL,
- QueryServicesOptions.DEFAULT_LOGGING_LEVEL));
- this.auditLogLevel=
LogLevel.valueOf(this.services.getProps().get(QueryServices.AUDIT_LOG_LEVEL,
- QueryServicesOptions.DEFAULT_AUDIT_LOGGING_LEVEL));
- this.isRequestLevelMetricsEnabled =
JDBCUtil.isCollectingRequestLevelMetricsEnabled(url, info,
- this.services.getProps());
- this.mutationState = mutationState == null ? newMutationState(maxSize,
- maxSizeBytes) : new MutationState(mutationState, this);
- this.metaData = metaData;
- this.metaData.pruneTables(pruner);
- this.metaData.pruneFunctions(pruner);
- this.services.addConnection(this);
-
- // setup tracing, if its enabled
- this.sampler = Tracing.getConfiguredSampler(this);
- this.customTracingAnnotations = getImmutableCustomTracingAnnotations();
- this.scannerQueue = new LinkedBlockingQueue<>();
- this.tableResultIteratorFactory = new
DefaultTableResultIteratorFactory();
- this.isRunningUpgrade = isRunningUpgrade;
-
- this.logSamplingRate =
Double.parseDouble(this.services.getProps().get(QueryServices.LOG_SAMPLE_RATE,
- QueryServicesOptions.DEFAULT_LOG_SAMPLE_RATE));
- if(isInternalConnection) {
- GLOBAL_OPEN_INTERNAL_PHOENIX_CONNECTIONS.increment();
- } else {
- GLOBAL_OPEN_PHOENIX_CONNECTIONS.increment();
+ throw sqlException;
}
Review Comment:
Yes I just added known SQL ones, forgot to add those, adding them.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]