use of com.pamirs.pradar.exception.PressureMeasureError in project LinkAgent by shulieTech.
the class DataSourceGetConnectionCutoffInterceptor method cutoff0.
@Override
public CutOffResult cutoff0(Advice advice) {
attachment(advice);
Object target = advice.getTarget();
ComboPooledDataSource dataSource = (ComboPooledDataSource) target;
DataSourceMeta<ComboPooledDataSource> dataSourceMeta = new DataSourceMeta<ComboPooledDataSource>(dataSource.getJdbcUrl(), dataSource.getUser(), dataSource);
ClusterTestUtils.validateClusterTest();
DataSourceWrapUtil.init(dataSourceMeta);
Connection connection = null;
/**
* 所有的流量均切换到此逻辑上,防止业务有连接缓存后无法进入
* 如果未找到配置情况下则当前流量为压测流量时返回null,非压测流量则执行业务连接池正常逻辑,此种情况可能由于数据源未配置的情况
* 如果获取连接出错时如果流量为压测流量则返回null,非压测流量则执行业务连接池正常逻辑
*
* 如果配置初始化异常或者没有对应配置
*/
if (DataSourceWrapUtil.pressureDataSources.containsKey(dataSourceMeta)) {
C3p0MediaDataSource mediatorDataSource = DataSourceWrapUtil.pressureDataSources.get(dataSourceMeta);
if (mediatorDataSource != null) {
try {
connection = mediatorDataSource.getConnection();
} catch (SQLException e) {
throw new PressureMeasureError(e);
}
} else {
if (!Pradar.isClusterTest()) {
return CutOffResult.passed();
}
}
return CutOffResult.cutoff(connection);
} else {
if (!Pradar.isClusterTest()) {
return CutOffResult.passed();
}
return CutOffResult.cutoff(null);
}
}
use of com.pamirs.pradar.exception.PressureMeasureError in project LinkAgent by shulieTech.
the class DataSourceGetConnectionCutoffInterceptor method wrapAtomikosNonXADataSourceBean.
private CutOffResult wrapAtomikosNonXADataSourceBean(AtomikosNonXADataSourceBean dataSourceBean) {
DataSourceMeta<AtomikosNonXADataSourceBean> dataSourceMeta = new DataSourceMeta<AtomikosNonXADataSourceBean>(dataSourceBean.getUrl(), dataSourceBean.getUser(), dataSourceBean);
AtomikosNonXADataSourceBeanWrapUtil.init(dataSourceMeta);
Connection connection = null;
/**
* 所有的流量均切换到此逻辑上,防止业务有连接缓存后无法进入
* 如果未找到配置情况下则当前流量为压测流量时返回null,非压测流量则执行业务连接池正常逻辑,此种情况可能由于数据源未配置的情况
* 如果获取连接出错时如果流量为压测流量则返回null,非压测流量则执行业务连接池正常逻辑
*/
if (AtomikosNonXADataSourceBeanWrapUtil.pressureDataSources.containsKey(dataSourceMeta)) {
AtomikosNonXADataSourceBeanMediaDataSource mediatorDataSource = AtomikosNonXADataSourceBeanWrapUtil.pressureDataSources.get(dataSourceMeta);
if (mediatorDataSource != null) {
try {
connection = mediatorDataSource.getConnection();
} catch (SQLException e) {
throw new PressureMeasureError(e);
}
} else {
if (!Pradar.isClusterTest()) {
return CutOffResult.passed();
}
}
return CutOffResult.cutoff(connection);
} else {
if (!Pradar.isClusterTest()) {
return CutOffResult.passed();
}
return CutOffResult.cutoff(null);
}
}
use of com.pamirs.pradar.exception.PressureMeasureError in project LinkAgent by shulieTech.
the class DataSourceGetConnectionCutoffInterceptor method wrapAtomikosDataSourceBean.
private CutOffResult wrapAtomikosDataSourceBean(AtomikosDataSourceBean dataSourceBean) {
DataSourceMeta<AtomikosDataSourceBean> dataSourceMeta = new DataSourceMeta<AtomikosDataSourceBean>(getUrl(dataSourceBean), getUsername(dataSourceBean), dataSourceBean);
AtomikosDataSourceBeanWrapUtil.init(dataSourceMeta);
Connection connection = null;
/**
* 所有的流量均切换到此逻辑上,防止业务有连接缓存后无法进入
* 如果未找到配置情况下则当前流量为压测流量时返回null,非压测流量则执行业务连接池正常逻辑,此种情况可能由于数据源未配置的情况
* 如果获取连接出错时如果流量为压测流量则返回null,非压测流量则执行业务连接池正常逻辑
*/
if (AtomikosDataSourceBeanWrapUtil.pressureDataSources.containsKey(dataSourceMeta)) {
AtomikosDataSourceBeanMediaDataSource mediatorDataSource = AtomikosDataSourceBeanWrapUtil.pressureDataSources.get(dataSourceMeta);
if (mediatorDataSource != null) {
try {
connection = mediatorDataSource.getConnection();
} catch (SQLException e) {
throw new PressureMeasureError(e);
}
} else {
if (!Pradar.isClusterTest()) {
return CutOffResult.passed();
}
}
return CutOffResult.cutoff(connection);
} else {
if (!Pradar.isClusterTest()) {
return CutOffResult.passed();
}
return CutOffResult.cutoff(null);
}
}
use of com.pamirs.pradar.exception.PressureMeasureError in project LinkAgent by shulieTech.
the class AtomikosDataSourceBeanMediaDataSource method getConnection.
@Override
public Connection getConnection() throws SQLException {
if (Pradar.isClusterTest()) {
try {
init();
if (useTable) {
// 影子表
if (dataSourceBusiness == null) {
throw new PressureMeasureError("[atomikos] Business dataSource is null.");
}
Connection connection = dataSourceBusiness.getConnection();
return new AtomikosNormalConnection(dataSourceBusiness, connection, dbConnectionKey, url, username, dbType);
} else {
if (dataSourcePerformanceTest == null) {
throw new PressureMeasureError("[atomikos] pressure dataSource is null.");
}
return new AtomikosPressureConnection(dataSourcePerformanceTest, dataSourcePerformanceTest.getConnection(), getUrl(dataSourcePerformanceTest), getUsername(dataSourcePerformanceTest), dbConnectionKey, dbType);
}
} catch (Throwable e) {
ErrorReporter.Error error = ErrorReporter.buildError().setErrorType(ErrorTypeEnum.DataSource).setErrorCode("datasource-0001").setMessage("数据源获取链接失败!" + (Pradar.isClusterTest() ? "(压测流量)" : "")).setDetail("[atomikos] get connection failed by dbMediatorDataSource, message: " + e.getMessage() + "\r\n" + printStackTrace(e));
// error.closePradar(ConfigNames.SHADOW_DATABASE_CONFIGS);
logger.error("ATOMIKOS: pressure test flow get connection fail.", e);
error.report();
throw new PressureMeasureError("pressure test flow get connection fail " + e.getMessage());
}
} else {
final String url = getUrl(dataSourceBusiness);
final String username = getUsername(dataSourceBusiness);
String dbType = JdbcUtils.getDbType(url, JdbcUtils.getDriverClassName(url));
return new AtomikosBizConnection(dataSourceBusiness.getConnection(), url, username, dbType);
}
}
use of com.pamirs.pradar.exception.PressureMeasureError in project LinkAgent by shulieTech.
the class TomcatJdbcMediatorDataSource method getConnection.
@Override
public Connection getConnection() throws SQLException {
if (Pradar.isClusterTest()) {
try {
init();
TomcatJdbcConstants.dbConnectionKey = dbConnectionKey;
TomcatJdbcConstants.dbType = dbType;
TomcatJdbcConstants.useTable = useTable;
if (useTable) {
// 影子表
if (dataSourceBusiness == null) {
throw new PressureMeasureError("Business dataSource is null.");
}
return new NormalConnection(dataSourceBusiness, dataSourceBusiness.getConnection(), dbConnectionKey, url, username, dbType, getMidType());
} else {
// 影子库
if (dataSourcePerformanceTest == null) {
throw new PressureMeasureError("Performance dataSource is null.");
}
return new PressureConnection(dataSourceBusiness, dataSourcePerformanceTest.getConnection(), dataSourcePerformanceTest.getUrl(), dataSourcePerformanceTest.getUsername(), dbConnectionKey, dbType);
}
} catch (Throwable e) {
ErrorReporter.Error error = ErrorReporter.buildError().setErrorType(ErrorTypeEnum.DataSource).setErrorCode("datasource-0001").setMessage("数据源获取链接失败!" + ((Pradar.isClusterTest() ? "(压测流量)" : "") + ", url=" + (dataSourceBusiness == null ? null : dataSourceBusiness.getUrl()) + ", username=" + (dataSourceBusiness == null ? null : dataSourceBusiness.getUsername()))).setDetail("get connection failed by dbMediatorDataSource, url=" + (dataSourceBusiness == null ? null : dataSourceBusiness.getUrl()) + ", username=" + (dataSourceBusiness == null ? null : dataSourceBusiness.getUsername()) + "message: " + e.getMessage() + "\r\n" + printStackTrace(e));
// error.closePradar(ConfigNames.SHADOW_DATABASE_CONFIGS);
error.report();
throw new PressureMeasureError("get connection failed by dbMediatorDataSource. url=" + (dataSourceBusiness == null ? null : dataSourceBusiness.getUrl()) + ", username=" + (dataSourceBusiness == null ? null : dataSourceBusiness.getUsername()), e);
}
} else {
String dbType = JdbcUtils.getDbType(dataSourceBusiness.getUrl(), JdbcUtils.getDriverClassName(dataSourceBusiness.getUrl()));
return new BizConnection(dataSourceBusiness.getConnection(), dataSourceBusiness.getUrl(), dataSourceBusiness.getUsername(), dbType);
}
}
Aggregations