blob: f5b1330defdb4c8a379f6695cf6b0c0b6e889e56 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.phoenix.jdbc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest;
import org.apache.phoenix.log.ConnectionLimiter;
import org.apache.phoenix.query.ConfigurationFactory;
import org.apache.phoenix.query.ConnectionQueryServices;
import org.apache.phoenix.query.HBaseFactoryProvider;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.util.InstanceResolver;
import org.apache.phoenix.util.PhoenixRuntime;
import org.junit.BeforeClass;
import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
@Category(NeedsOwnMiniClusterTest.class)
public class LoggingSingleConnectionLimiterIT extends LoggingConnectionLimiterIT {
private static final Logger LOG = LoggerFactory.getLogger(LoggingSingleConnectionLimiterIT.class);
@BeforeClass
public static void doSetup() throws Exception {
/**
* Turn on the connection logging feature
* CLIENT_CONNECTION_MAX_ALLOWED_CONNECTIONS : max allowed connections before throttling
* INTERNAL_CONNECTION_MAX_ALLOWED_CONNECTIONS : max allowed internal connections before throttling
* HA_MAX_POOL_SIZE : HA thread pool size for open and other activities
* HA_MAX_QUEUE_SIZE : Queue size of the core thread pool
*/
InstanceResolver.clearSingletons();
// Override to get required config for static fields loaded that require HBase config
InstanceResolver.getSingleton(ConfigurationFactory.class, new ConfigurationFactory() {
@Override public Configuration getConfiguration() {
Configuration conf = HBaseConfiguration.create();
conf.set(QueryServices.CONNECTION_ACTIVITY_LOGGING_ENABLED, String.valueOf(true));
conf.set(QueryServices.CLIENT_CONNECTION_MAX_ALLOWED_CONNECTIONS, String.valueOf(20));
conf.set(QueryServices.INTERNAL_CONNECTION_MAX_ALLOWED_CONNECTIONS, String.valueOf(20));
conf.set(PhoenixHAExecutorServiceProvider.HA_MAX_POOL_SIZE, String.valueOf(5));
conf.set(PhoenixHAExecutorServiceProvider.HA_MAX_QUEUE_SIZE, String.valueOf(30));
return conf;
}
@Override public Configuration getConfiguration(Configuration confToClone) {
Configuration conf = HBaseConfiguration.create();
conf.set(QueryServices.CONNECTION_ACTIVITY_LOGGING_ENABLED, String.valueOf(true));
conf.set(QueryServices.CLIENT_CONNECTION_MAX_ALLOWED_CONNECTIONS, String.valueOf(20));
conf.set(QueryServices.INTERNAL_CONNECTION_MAX_ALLOWED_CONNECTIONS, String.valueOf(20));
conf.set(PhoenixHAExecutorServiceProvider.HA_MAX_POOL_SIZE, String.valueOf(5));
conf.set(PhoenixHAExecutorServiceProvider.HA_MAX_QUEUE_SIZE, String.valueOf(30));
Configuration copy = new Configuration(conf);
copy.addResource(confToClone);
return copy;
}
});
Configuration conf = HBaseFactoryProvider.getConfigurationFactory().getConfiguration();
HBaseTestingUtility hBaseTestingUtility = new HBaseTestingUtility(conf);
setUpConfigForMiniCluster(conf);
hBaseTestingUtility.startMiniCluster();
// establish url and quorum. Need to use PhoenixDriver and not PhoenixTestDriver
String zkQuorum = "localhost:" + hBaseTestingUtility.getZkCluster().getClientPort();
url = PhoenixRuntime.JDBC_PROTOCOL + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + zkQuorum;
DriverManager.registerDriver(PhoenixDriver.INSTANCE);
DriverManager.registerDriver(new PhoenixTestDriver());
String profileName = "setup";
final String urlWithPrinc = url + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + profileName
+ PhoenixRuntime.JDBC_PROTOCOL_TERMINATOR;
Properties props = new Properties();
try (Connection connection = DriverManager.getConnection(urlWithPrinc, props)) {
try (Statement statement = connection.createStatement()) {
statement.execute(CREATE_TABLE_SQL);
}
connection.commit();
}
//preload some data
try (Connection connection = DriverManager.getConnection(urlWithPrinc, props)) {
loadData(connection, ORG_ID, GROUP_ID, 100, 20);
}
}
@Override
protected ConnectionLimiter getConnectionLimiter() throws Exception {
ConnectionQueryServices cqs = null;
Connection testConnection = null;
try {
testConnection = getConnection();
PhoenixConnection phoenixConnection = testConnection.unwrap(PhoenixConnection.class);
cqs = phoenixConnection.getQueryServices();
return cqs.getConnectionLimiter();
} finally {
if (testConnection != null) testConnection.close();
}
}
@Override
protected Connection getConnection() throws SQLException {
String profileName = testName.getMethodName();
final String urlWithPrinc = url + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + profileName
+ PhoenixRuntime.JDBC_PROTOCOL_TERMINATOR;
Properties props = new Properties();
Connection connection = DriverManager.getConnection(urlWithPrinc, props);
connection.setAutoCommit(true);
return connection;
}
}