提交 097d4d8d 编写于 作者: T terrymanu

remove metrics

上级 10b085da
......@@ -25,7 +25,6 @@
<gson.version>2.6.1</gson.version>
<logback.version>1.1.2</logback.version>
<slf4j.version>1.7.7</slf4j.version>
<metrics.version>3.1.0</metrics.version>
<groovy.version>2.4.5</groovy.version>
<snakeyaml.version>1.16</snakeyaml.version>
<springframework.version>4.1.1.RELEASE</springframework.version>
......@@ -82,11 +81,6 @@
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>${metrics.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
......
......@@ -20,7 +20,6 @@ package com.dangdang.ddframe.rdb.sharding;
import com.dangdang.ddframe.rdb.sharding.spring.GenerateKeyDBUnitTest;
import com.dangdang.ddframe.rdb.sharding.spring.cases.WithoutNamespaceDefaultStrategyTest;
import com.dangdang.ddframe.rdb.sharding.spring.cases.WithoutNamespaceTest;
import com.dangdang.ddframe.rdb.sharding.spring.cases.namespace.WithNamespaceAlgorithmClassAndPropsTest;
import com.dangdang.ddframe.rdb.sharding.spring.cases.namespace.WithNamespaceAlgorithmClassTest;
import com.dangdang.ddframe.rdb.sharding.spring.cases.namespace.WithNamespaceAlgorithmExpressionForDynamicTest;
import com.dangdang.ddframe.rdb.sharding.spring.cases.namespace.WithNamespaceAlgorithmExpressionTest;
......@@ -36,7 +35,6 @@ import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({
WithNamespaceAlgorithmClassTest.class,
WithNamespaceAlgorithmClassAndPropsTest.class,
WithNamespaceDifferentTablesTest.class,
WithNamespaceAlgorithmExpressionTest.class,
WithNamespaceAlgorithmExpressionForDynamicTest.class,
......
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed 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.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.spring.cases.namespace;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import com.dangdang.ddframe.rdb.sharding.spring.AbstractShardingBothDataBasesAndTablesSpringDBUnitTest;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;
import java.sql.Connection;
import java.sql.SQLException;
import static org.junit.Assert.assertNotNull;
@ContextConfiguration(locations = "classpath:META-INF/rdb/namespace/withNamespaceAlgorithmClassAndProps.xml")
public final class WithNamespaceAlgorithmClassAndPropsTest extends AbstractShardingBothDataBasesAndTablesSpringDBUnitTest {
@Test
public void testMetricsContextWhenEnable() throws SQLException {
try (Connection connection = getShardingDataSource().getConnection()) {
assertNotNull(MetricsContext.start("name"));
}
}
}
......@@ -38,7 +38,7 @@
</rdb:table-rules>
</rdb:sharding-rule>
<rdb:props>
<prop key="metrics.enable">${metrics_enable}</prop>
<prop key="sql.show">${sql_show}</prop>
</rdb:props>
</rdb:data-source>
</beans>
......@@ -7,5 +7,3 @@ dbtbl_1.driver=org.h2.Driver
dbtbl_1.url=jdbc:h2:mem:dbtbl_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
dbtbl_1.username=sa
dbtbl_1.password=
metrics_enable=true
......@@ -42,4 +42,4 @@ defaultTableStrategy:
algorithmClassName: com.dangdang.ddframe.rdb.sharding.config.yaml.algorithm.MultiAlgorithm
props:
metrics.enable: true
sql.show: true
......@@ -29,4 +29,4 @@ defaultTableStrategy:
algorithmClassName: com.dangdang.ddframe.rdb.sharding.config.yaml.algorithm.MultiAlgorithm
props:
metrics.enable: true
sql.show: true
......@@ -17,10 +17,6 @@
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
......
......@@ -42,26 +42,6 @@ public enum ShardingPropertiesConstant {
*/
SQL_SHOW("sql.show", Boolean.FALSE.toString(), boolean.class),
/**
* Enable or Disable to show metrics info.
*
* <p>
* Print metrics info can help developers locate performance issue easier.
* Default: false
* </p>
*/
METRICS_ENABLE("metrics.enable", Boolean.FALSE.toString(), boolean.class),
/**
* Metrics Period.
*
* <p>
* Unit: Mills.
* Default: 30000 Mills.
* </p>
*/
METRICS_MILLISECONDS_PERIOD("metrics.millisecond.period", "30000", long.class),
/**
* Worker thread max size.
*
......
......@@ -17,13 +17,11 @@
package com.dangdang.ddframe.rdb.sharding.executor.type.batch;
import com.codahale.metrics.Timer.Context;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.constant.SQLType;
import com.dangdang.ddframe.rdb.sharding.executor.BaseStatementUnit;
import com.dangdang.ddframe.rdb.sharding.executor.ExecuteCallback;
import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import lombok.RequiredArgsConstructor;
import java.util.Collection;
......@@ -54,18 +52,13 @@ public final class BatchPreparedStatementExecutor {
* @return execute results
*/
public int[] executeBatch() {
Context context = MetricsContext.start("ShardingPreparedStatement-executeBatch");
try {
return accumulate(executorEngine.executeBatch(sqlType, batchPreparedStatementUnits, parameterSets, new ExecuteCallback<int[]>() {
@Override
public int[] execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return baseStatementUnit.getStatement().executeBatch();
}
}));
} finally {
MetricsContext.stop(context);
}
return accumulate(executorEngine.executeBatch(sqlType, batchPreparedStatementUnits, parameterSets, new ExecuteCallback<int[]>() {
@Override
public int[] execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return baseStatementUnit.getStatement().executeBatch();
}
}));
}
private int[] accumulate(final List<int[]> results) {
......
......@@ -17,12 +17,10 @@
package com.dangdang.ddframe.rdb.sharding.executor.type.prepared;
import com.codahale.metrics.Timer.Context;
import com.dangdang.ddframe.rdb.sharding.constant.SQLType;
import com.dangdang.ddframe.rdb.sharding.executor.BaseStatementUnit;
import com.dangdang.ddframe.rdb.sharding.executor.ExecuteCallback;
import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import lombok.RequiredArgsConstructor;
import java.sql.PreparedStatement;
......@@ -53,20 +51,13 @@ public final class PreparedStatementExecutor {
* @return result set list
*/
public List<ResultSet> executeQuery() {
Context context = MetricsContext.start("ShardingPreparedStatement-executeQuery");
List<ResultSet> result;
try {
result = executorEngine.executePreparedStatement(sqlType, preparedStatementUnits, parameters, new ExecuteCallback<ResultSet>() {
@Override
public ResultSet execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return ((PreparedStatement) baseStatementUnit.getStatement()).executeQuery();
}
});
} finally {
MetricsContext.stop(context);
}
return result;
return executorEngine.executePreparedStatement(sqlType, preparedStatementUnits, parameters, new ExecuteCallback<ResultSet>() {
@Override
public ResultSet execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return ((PreparedStatement) baseStatementUnit.getStatement()).executeQuery();
}
});
}
/**
......@@ -75,19 +66,14 @@ public final class PreparedStatementExecutor {
* @return effected records count
*/
public int executeUpdate() {
Context context = MetricsContext.start("ShardingPreparedStatement-executeUpdate");
try {
List<Integer> results = executorEngine.executePreparedStatement(sqlType, preparedStatementUnits, parameters, new ExecuteCallback<Integer>() {
@Override
public Integer execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return ((PreparedStatement) baseStatementUnit.getStatement()).executeUpdate();
}
});
return accumulate(results);
} finally {
MetricsContext.stop(context);
}
List<Integer> results = executorEngine.executePreparedStatement(sqlType, preparedStatementUnits, parameters, new ExecuteCallback<Integer>() {
@Override
public Integer execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return ((PreparedStatement) baseStatementUnit.getStatement()).executeUpdate();
}
});
return accumulate(results);
}
private int accumulate(final List<Integer> results) {
......@@ -104,21 +90,16 @@ public final class PreparedStatementExecutor {
* @return return true if is DQL, false if is DML
*/
public boolean execute() {
Context context = MetricsContext.start("ShardingPreparedStatement-execute");
try {
List<Boolean> result = executorEngine.executePreparedStatement(sqlType, preparedStatementUnits, parameters, new ExecuteCallback<Boolean>() {
@Override
public Boolean execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return ((PreparedStatement) baseStatementUnit.getStatement()).execute();
}
});
if (null == result || result.isEmpty() || null == result.get(0)) {
return false;
List<Boolean> result = executorEngine.executePreparedStatement(sqlType, preparedStatementUnits, parameters, new ExecuteCallback<Boolean>() {
@Override
public Boolean execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return ((PreparedStatement) baseStatementUnit.getStatement()).execute();
}
return result.get(0);
} finally {
MetricsContext.stop(context);
});
if (null == result || result.isEmpty() || null == result.get(0)) {
return false;
}
return result.get(0);
}
}
......@@ -17,12 +17,10 @@
package com.dangdang.ddframe.rdb.sharding.executor.type.statement;
import com.codahale.metrics.Timer.Context;
import com.dangdang.ddframe.rdb.sharding.constant.SQLType;
import com.dangdang.ddframe.rdb.sharding.executor.BaseStatementUnit;
import com.dangdang.ddframe.rdb.sharding.executor.ExecuteCallback;
import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import lombok.RequiredArgsConstructor;
import java.sql.ResultSet;
......@@ -53,20 +51,13 @@ public final class StatementExecutor {
* @return result set list
*/
public List<ResultSet> executeQuery() {
Context context = MetricsContext.start("ShardingStatement-executeQuery");
List<ResultSet> result;
try {
result = executorEngine.executeStatement(sqlType, statementUnits, new ExecuteCallback<ResultSet>() {
@Override
public ResultSet execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return baseStatementUnit.getStatement().executeQuery(baseStatementUnit.getSqlExecutionUnit().getSql());
}
});
} finally {
MetricsContext.stop(context);
}
return result;
return executorEngine.executeStatement(sqlType, statementUnits, new ExecuteCallback<ResultSet>() {
@Override
public ResultSet execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return baseStatementUnit.getStatement().executeQuery(baseStatementUnit.getSqlExecutionUnit().getSql());
}
});
}
/**
......@@ -133,19 +124,14 @@ public final class StatementExecutor {
}
private int executeUpdate(final Updater updater) {
Context context = MetricsContext.start("ShardingStatement-executeUpdate");
try {
List<Integer> results = executorEngine.executeStatement(sqlType, statementUnits, new ExecuteCallback<Integer>() {
@Override
public Integer execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return updater.executeUpdate(baseStatementUnit.getStatement(), baseStatementUnit.getSqlExecutionUnit().getSql());
}
});
return accumulate(results);
} finally {
MetricsContext.stop(context);
}
List<Integer> results = executorEngine.executeStatement(sqlType, statementUnits, new ExecuteCallback<Integer>() {
@Override
public Integer execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return updater.executeUpdate(baseStatementUnit.getStatement(), baseStatementUnit.getSqlExecutionUnit().getSql());
}
});
return accumulate(results);
}
private int accumulate(final List<Integer> results) {
......@@ -220,22 +206,17 @@ public final class StatementExecutor {
}
private boolean execute(final Executor executor) {
Context context = MetricsContext.start("ShardingStatement-execute");
try {
List<Boolean> result = executorEngine.executeStatement(sqlType, statementUnits, new ExecuteCallback<Boolean>() {
@Override
public Boolean execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return executor.execute(baseStatementUnit.getStatement(), baseStatementUnit.getSqlExecutionUnit().getSql());
}
});
if (null == result || result.isEmpty() || null == result.get(0)) {
return false;
List<Boolean> result = executorEngine.executeStatement(sqlType, statementUnits, new ExecuteCallback<Boolean>() {
@Override
public Boolean execute(final BaseStatementUnit baseStatementUnit) throws Exception {
return executor.execute(baseStatementUnit.getStatement(), baseStatementUnit.getSqlExecutionUnit().getSql());
}
return result.get(0);
} finally {
MetricsContext.stop(context);
});
if (null == result || result.isEmpty() || null == result.get(0)) {
return false;
}
return result.get(0);
}
private interface Updater {
......
......@@ -18,7 +18,6 @@
package com.dangdang.ddframe.rdb.sharding.jdbc.adapter;
import com.dangdang.ddframe.rdb.sharding.jdbc.unsupported.AbstractUnsupportedOperationConnection;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import java.sql.Connection;
import java.sql.ResultSet;
......@@ -90,7 +89,6 @@ public abstract class AbstractConnectionAdapter extends AbstractUnsupportedOpera
@Override
public void close() throws SQLException {
closed = true;
MetricsContext.clear();
Collection<SQLException> exceptions = new LinkedList<>();
for (Connection each : getConnections()) {
try {
......
......@@ -17,16 +17,13 @@
package com.dangdang.ddframe.rdb.sharding.jdbc.core.connection;
import com.codahale.metrics.Timer.Context;
import com.dangdang.ddframe.rdb.sharding.constant.SQLType;
import com.dangdang.ddframe.rdb.sharding.hint.HintManagerHolder;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.ShardingContext;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractConnectionAdapter;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.ShardingContext;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.datasource.MasterSlaveDataSource;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.statement.ShardingPreparedStatement;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.statement.ShardingStatement;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.datasource.MasterSlaveDataSource;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import lombok.Getter;
......@@ -65,7 +62,6 @@ public final class ShardingConnection extends AbstractConnectionAdapter {
* @throws SQLException SQL exception
*/
public Collection<Connection> getConnectionForDDL(final String dataSourceName) throws SQLException {
final Context metricsContext = MetricsContext.start(Joiner.on("-").join("ShardingConnection-getConnectionForDDL", dataSourceName));
DataSource dataSource = shardingContext.getShardingRule().getDataSourceRule().getDataSource(dataSourceName);
Preconditions.checkState(null != dataSource, "Missing the rule of %s in DataSourceRule", dataSourceName);
Collection<DataSource> dataSources = new LinkedList<>();
......@@ -81,7 +77,6 @@ public final class ShardingConnection extends AbstractConnectionAdapter {
replayMethodsInvocation(connection);
result.add(connection);
}
MetricsContext.stop(metricsContext);
return result;
}
......@@ -98,7 +93,6 @@ public final class ShardingConnection extends AbstractConnectionAdapter {
if (connection.isPresent()) {
return connection.get();
}
Context metricsContext = MetricsContext.start(Joiner.on("-").join("ShardingConnection-getConnection", dataSourceName));
DataSource dataSource = shardingContext.getShardingRule().getDataSourceRule().getDataSource(dataSourceName);
Preconditions.checkState(null != dataSource, "Missing the rule of %s in DataSourceRule", dataSourceName);
String realDataSourceName;
......@@ -109,7 +103,6 @@ public final class ShardingConnection extends AbstractConnectionAdapter {
realDataSourceName = dataSourceName;
}
Connection result = dataSource.getConnection();
MetricsContext.stop(metricsContext);
connectionMap.put(realDataSourceName, result);
replayMethodsInvocation(result);
return result;
......
......@@ -109,7 +109,7 @@ public final class MasterSlaveDataSource extends AbstractDataSourceAdapter {
for (DataSource each : slaveDataSources) {
String slaveDatabaseProductName;
try (Connection slaveConnection = each.getConnection()) {
slaveDatabaseProductName = slaveConnection.getMetaData().getDatabaseProductName();
slaveDatabaseProductName = slaveConnection.getMetaData().getDatabaseProductName();
}
Preconditions.checkState(result.equals(slaveDatabaseProductName), String.format("Database type inconsistent with '%s' and '%s'", result, slaveDatabaseProductName));
}
......
......@@ -26,7 +26,6 @@ import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractDataSourceAdapter;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.ShardingContext;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.connection.ShardingConnection;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import com.google.common.base.Preconditions;
import javax.sql.DataSource;
......@@ -84,7 +83,6 @@ public class ShardingDataSource extends AbstractDataSourceAdapter implements Aut
@Override
public ShardingConnection getConnection() throws SQLException {
MetricsContext.init(shardingProperties);
return new ShardingConnection(shardingContext);
}
......
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed 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.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.metrics;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Slf4jReporter;
import com.codahale.metrics.Timer;
import com.dangdang.ddframe.rdb.sharding.config.ShardingProperties;
import com.dangdang.ddframe.rdb.sharding.config.ShardingPropertiesConstant;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;
/**
* Metrics context.
*
* @author gaohongtao
* @author zhangliang
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class MetricsContext {
private static final ThreadLocal<MetricRegistry> HOLDER = new ThreadLocal<>();
private static final String LOGGER_NAME = "Sharding-JDBC-Metrics";
/**
* Initialize metrics context holder.
*
* @param shardingProperties properties for Sharding-JDBC
*/
public static void init(final ShardingProperties shardingProperties) {
HOLDER.remove();
boolean metricsEnabled = shardingProperties.getValue(ShardingPropertiesConstant.METRICS_ENABLE);
if (!metricsEnabled) {
return;
}
long period = shardingProperties.getValue(ShardingPropertiesConstant.METRICS_MILLISECONDS_PERIOD);
MetricRegistry metricRegistry = new MetricRegistry();
Slf4jReporter.forRegistry(metricRegistry)
.outputTo(LoggerFactory.getLogger(LOGGER_NAME))
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.withLoggingLevel(Slf4jReporter.LoggingLevel.DEBUG)
.build().start(period, TimeUnit.MILLISECONDS);
HOLDER.set(metricRegistry);
}
/**
* Start timing.
*
* @param name Metrics target name
* @return timer context
*/
public static Timer.Context start(final String name) {
return null == HOLDER.get() ? null : HOLDER.get().timer(MetricRegistry.name(name)).time();
}
/**
* Stop timing.
*
* @param context timer context
*/
public static void stop(final Timer.Context context) {
if (null != context) {
context.stop();
}
}
/**
* Clear metrics context holder.
*/
public static void clear() {
HOLDER.remove();
}
}
......@@ -17,10 +17,8 @@
package com.dangdang.ddframe.rdb.sharding.routing.router;
import com.codahale.metrics.Timer.Context;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.ShardingContext;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import com.dangdang.ddframe.rdb.sharding.parsing.SQLJudgeEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SQLStatement;
import com.dangdang.ddframe.rdb.sharding.routing.SQLExecutionUnit;
......@@ -56,13 +54,11 @@ public final class DatabaseHintSQLRouter implements SQLRouter {
@Override
// TODO insert SQL need parse gen key
public SQLRouteResult route(final String logicSQL, final List<Object> parameters, final SQLStatement sqlStatement) {
Context context = MetricsContext.start("Route SQL");
SQLRouteResult result = new SQLRouteResult(sqlStatement);
RoutingResult routingResult = new DatabaseHintRoutingEngine(shardingRule.getDataSourceRule(), shardingRule.getDatabaseShardingStrategy()).route();
for (TableUnit each : routingResult.getTableUnits().getTableUnits()) {
result.getExecutionUnits().add(new SQLExecutionUnit(each.getDataSourceName(), logicSQL));
}
MetricsContext.stop(context);
if (showSQL) {
SQLLogger.logSQL(logicSQL, sqlStatement, result.getExecutionUnits(), parameters);
}
......
......@@ -17,11 +17,9 @@
package com.dangdang.ddframe.rdb.sharding.routing.router;
import com.codahale.metrics.Timer.Context;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.ShardingContext;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GeneratedKey;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SQLStatement;
......@@ -70,18 +68,15 @@ public final class ParsingSQLRouter implements SQLRouter {
@Override
public SQLStatement parse(final String logicSQL, final int parametersSize) {
SQLParsingEngine parsingEngine = new SQLParsingEngine(databaseType, logicSQL, shardingRule);
Context context = MetricsContext.start("Parse SQL");
SQLStatement result = parsingEngine.parse();
if (result instanceof InsertStatement) {
((InsertStatement) result).appendGenerateKeyToken(shardingRule, parametersSize);
}
MetricsContext.stop(context);
return result;
}
@Override
public SQLRouteResult route(final String logicSQL, final List<Object> parameters, final SQLStatement sqlStatement) {
final Context context = MetricsContext.start("Route SQL");
SQLRouteResult result = new SQLRouteResult(sqlStatement);
if (sqlStatement instanceof InsertStatement && null != ((InsertStatement) sqlStatement).getGeneratedKey()) {
processGeneratedKey(parameters, (InsertStatement) sqlStatement, result);
......@@ -104,7 +99,6 @@ public final class ParsingSQLRouter implements SQLRouter {
result.getExecutionUnits().add(new SQLExecutionUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each, sqlBuilder)));
}
}
MetricsContext.stop(context);
if (showSQL) {
SQLLogger.logSQL(logicSQL, sqlStatement, result.getExecutionUnits(), parameters);
}
......
......@@ -25,7 +25,6 @@ import com.dangdang.ddframe.rdb.sharding.hint.AllHintTests;
import com.dangdang.ddframe.rdb.sharding.jdbc.AllJDBCTests;
import com.dangdang.ddframe.rdb.sharding.keygen.AllKeygenTests;
import com.dangdang.ddframe.rdb.sharding.merger.AllMergerTests;
import com.dangdang.ddframe.rdb.sharding.metrics.AllMetricsTests;
import com.dangdang.ddframe.rdb.sharding.parsing.AllParsingTests;
import com.dangdang.ddframe.rdb.sharding.rewrite.AllRewriteTests;
import com.dangdang.ddframe.rdb.sharding.routing.AllRoutingTests;
......@@ -47,8 +46,7 @@ import org.junit.runners.Suite.SuiteClasses;
AllJDBCTests.class,
AllHintTests.class,
AllKeygenTests.class,
AllUtilTests.class,
AllMetricsTests.class
AllUtilTests.class
})
public class AllShardingTests {
}
......@@ -27,7 +27,7 @@ public class ShardingPropertiesConstantTest {
@Test
public void testFindByKey() {
assertThat(ShardingPropertiesConstant.findByKey("metrics.enable"), is(ShardingPropertiesConstant.METRICS_ENABLE));
assertThat(ShardingPropertiesConstant.findByKey("sql.show"), is(ShardingPropertiesConstant.SQL_SHOW));
}
@Test
......
......@@ -34,9 +34,7 @@ public final class ShardingPropertiesTest {
@Before
public void setUp() {
prop.put(ShardingPropertiesConstant.METRICS_ENABLE.getKey(), "true");
prop.put(ShardingPropertiesConstant.SQL_SHOW.getKey(), "true");
prop.put(ShardingPropertiesConstant.METRICS_MILLISECONDS_PERIOD.getKey(), "1000");
prop.put(ShardingPropertiesConstant.EXECUTOR_SIZE.getKey(), "10");
shardingProperties = new ShardingProperties(prop);
}
......@@ -44,18 +42,14 @@ public final class ShardingPropertiesTest {
@Test
public void assertGetValueForDefaultValue() {
ShardingProperties shardingProperties = new ShardingProperties(new Properties());
boolean actualMetricsEnabled = shardingProperties.getValue(ShardingPropertiesConstant.METRICS_ENABLE);
long actualMetricsMillisecondsPeriod = shardingProperties.getValue(ShardingPropertiesConstant.METRICS_MILLISECONDS_PERIOD);
assertThat(actualMetricsEnabled, is(Boolean.valueOf(ShardingPropertiesConstant.METRICS_ENABLE.getDefaultValue())));
assertThat(actualMetricsMillisecondsPeriod, is(Long.valueOf(ShardingPropertiesConstant.METRICS_MILLISECONDS_PERIOD.getDefaultValue())));
boolean actualSQLShow = shardingProperties.getValue(ShardingPropertiesConstant.SQL_SHOW);
assertThat(actualSQLShow, is(Boolean.valueOf(ShardingPropertiesConstant.SQL_SHOW.getDefaultValue())));
int executorMaxSize = shardingProperties.getValue(ShardingPropertiesConstant.EXECUTOR_SIZE);
assertThat(executorMaxSize, is(Integer.valueOf(ShardingPropertiesConstant.EXECUTOR_SIZE.getDefaultValue())));
}
@Test
public void assertGetValueForBoolean() {
boolean actualMetricsEnabled = shardingProperties.getValue(ShardingPropertiesConstant.METRICS_ENABLE);
assertTrue(actualMetricsEnabled);
boolean showSql = shardingProperties.getValue(ShardingPropertiesConstant.SQL_SHOW);
assertTrue(showSql);
}
......@@ -66,17 +60,10 @@ public final class ShardingPropertiesTest {
assertThat(actualExecutorMaxSize, is(10));
}
@Test
public void assertGetValueForLong() {
long actualMetricsMillisecondsPeriod = shardingProperties.getValue(ShardingPropertiesConstant.METRICS_MILLISECONDS_PERIOD);
assertThat(actualMetricsMillisecondsPeriod, is(1000L));
}
@Test(expected = IllegalArgumentException.class)
public void assertValidateFailure() {
Properties prop = new Properties();
prop.put(ShardingPropertiesConstant.METRICS_ENABLE.getKey(), "error");
prop.put(ShardingPropertiesConstant.METRICS_MILLISECONDS_PERIOD.getKey(), "error");
prop.put(ShardingPropertiesConstant.SQL_SHOW.getKey(), "error");
prop.put(ShardingPropertiesConstant.EXECUTOR_SIZE.getKey(), "error");
prop.put("other", "other");
new ShardingProperties(prop);
......
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed 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.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.metrics;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses(
MetricsContextTest.class
)
public class AllMetricsTests {
}
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed 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.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.metrics;
import com.dangdang.ddframe.rdb.sharding.config.ShardingProperties;
import com.dangdang.ddframe.rdb.sharding.config.ShardingPropertiesConstant;
import org.junit.After;
import org.junit.Test;
import java.util.Properties;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
public final class MetricsContextTest {
@After
public void tearDown() {
MetricsContext.clear();
}
@Test
public void assertStartWhenMetricsDisable() {
initDisabledMetrics();
assertNull(MetricsContext.start("name"));
}
@Test
public void assertStartWhenMetricsEnable() {
initEnabledMetrics();
assertNotNull(MetricsContext.start("name"));
}
@Test
public void assertStopWhenMetricsDisable() {
initDisabledMetrics();
MetricsContext.stop(null);
}
@Test
public void assertStopWhenMetricsEnable() {
initEnabledMetrics();
MetricsContext.stop(MetricsContext.start("name"));
}
@Test
public void assertClear() {
initEnabledMetrics();
MetricsContext.clear();
assertNull(MetricsContext.start("name"));
}
private void initDisabledMetrics() {
MetricsContext.init(new ShardingProperties(new Properties()));
}
private void initEnabledMetrics() {
Properties props = new Properties();
props.setProperty(ShardingPropertiesConstant.METRICS_ENABLE.getKey(), Boolean.TRUE.toString());
MetricsContext.init(new ShardingProperties(props));
}
}
......@@ -9,9 +9,6 @@
<logger name="com.dangdang" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
<logger name="com.dangdang.ddframe.rdb.sharding.metrics" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
<logger name="org.dbunit" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
......
......@@ -37,13 +37,12 @@ next = "/01-start/limitations/"
1.3. 多数据库支持(目前支持MySQL,Oracle,SQLServer和PostgreSQL)
2. 配置多样性
2.1. Spring命名空间支持
2.2. YAML命名空间支持
2.3. 基于动态语言的分片策略配置
3. Metrics统计监控
## 性能
1. 半理解"理念的SQL解析引擎
......
......@@ -67,7 +67,7 @@ defaultDatabaseStrategy:
algorithmClassName: com.dangdang.ddframe.rdb.sharding.api.strategy.database.NoneDatabaseShardingAlgorithm
props:
metrics.enable: false
sql.show: false
```
......@@ -111,13 +111,8 @@ defaultTableStrategy: 默认数据表分片策略
algorithmExpression: 分表算法表达式,与algorithmClassName出现一个即可
props: 属性配置(可选)
metrics.enable: 是否开启度量采集,默认值: false
sql.show: 是否开启SQL显示,默认值: false
metrics.millisecond.period: 度量输出周期,单位: 毫秒,默认值: 30000毫秒
executor.min.idle.size: 最小空闲工作线程数量,默认值: 0
executor.max.size: 最大工作线程数量,默认值: CPU核数乘2
executor.max.idle.timeout.millisecond: 工作线程空闲时超时时间,单位: 毫秒,默认值: 60000毫秒
executor.size: 工作线程数量,默认值: CPU核数
```
#### YAML格式特别说明
......@@ -186,7 +181,7 @@ props: 属性配置(可选)
<rdb:default-database-strategy sharding-columns="none" algorithm-class="com.dangdang.ddframe.rdb.sharding.api.strategy.database.NoneDatabaseShardingAlgorithm"/>
</rdb:sharding-rule>
<rdb:props>
<prop key="metrics.enable">true</prop>
<prop key="sql.show">true</prop>
</rdb:props>
</rdb:data-source>
</beans>
......@@ -274,12 +269,8 @@ props: 属性配置(可选)
| *名称* | *类型* | *数据类型* | *必填* | *说明* |
| ------------------------------------ | ------------ | ---------- | ----- | ----------------------------------- |
| metrics.enable | 属性 | boolean | 否 | 是否开启度量采集,默认为false不开启 |
| sql.show | 属性 | boolean | 是 | 是否开启SQL显示,默认为false不开启 |
| metrics.millisecond.period | 属性 | String | 否 | 度量输出周期,单位为毫秒 |
| executor.min.idle.size | 属性 | int | 否 | 最小空闲工作线程数量 |
| executor.max.size | 属性 | int | 否 | 最大工作线程数量 |
| executor.max.idle.timeout.millisecond| 属性 | int | 否 | 工作线程空闲时超时时间,默认以毫秒为单位 |
| executor.size | 属性 | int | 否 | 最大工作线程数量 |
#### Spring格式特别说明
如需使用inline表达式,需配置ignore-unresolvable为true,否则placeholder会把inline表达式当成属性key值导致出错.
......
......@@ -49,4 +49,4 @@ defaultTableStrategy:
algorithmClassName: com.dangdang.ddframe.rdb.sharding.api.strategy.table.NoneTableShardingAlgorithm
props:
metrics.enable: false
sql.show: false
......@@ -33,4 +33,4 @@ defaultDatabaseStrategy:
algorithmExpression: ds_${user_id.longValue() % 2}
props:
metrics.enable: false
sql.show: false
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册