test(selfop): verify warehouse summary build transactions
This commit is contained in:
+7
-3
@@ -122,6 +122,7 @@ class OutboundCandidateBuildMySqlAcceptanceTest {
|
||||
assertEquals(pointerBefore,jdbc.queryForMap("SELECT published_run_id,published_fact_revision FROM ll_selfop_sync_scope WHERE id=?",scopeId));
|
||||
assertEquals(0L,jdbc.queryForObject("SELECT COUNT(*) FROM ll_selfop_outbound_discovery_scope WHERE source_account=?",Long.class,account));
|
||||
assertTrue(transactionEvidence.inserts>0);assertFalse(transactionEvidence.nonTransactional);
|
||||
assertEquals((skus*(long)days+499)/500,transactionEvidence.warehouseDailyInserts,"Each committed daily batch must write one warehouse summary");
|
||||
BigDecimal quantity=jdbc.queryForObject("SELECT SUM(outbound_quantity) FROM ll_selfop_sku_daily_sales WHERE sales_run_id=?",BigDecimal.class,runId);
|
||||
assertEquals(0,BigDecimal.valueOf((long)skus*days).compareTo(quantity));
|
||||
assertEquals(0,quantity.compareTo(jdbc.queryForObject("SELECT SUM(observed_quantity) FROM ll_selfop_warehouse_daily_sales WHERE sales_run_id=?",BigDecimal.class,runId)));
|
||||
@@ -188,6 +189,7 @@ class OutboundCandidateBuildMySqlAcceptanceTest {
|
||||
private static int bounded(String key,int fallback,int min,int max){String value=System.getenv(key);int n=value==null?fallback:Integer.parseInt(value);assertTrue(n>=min&&n<=max,key+" outside bounded range");return n;}
|
||||
private void captureStatementMetrics(){
|
||||
report.put("buildMappedStatementCalls",transactionEvidence.calls);
|
||||
report.put("warehouseDailyInsertStatements",transactionEvidence.warehouseDailyInserts);
|
||||
report.put("buildMappedStatements",transactionEvidence.snapshot());
|
||||
}
|
||||
private void writeProgress()throws java.io.IOException {
|
||||
@@ -200,7 +202,7 @@ class OutboundCandidateBuildMySqlAcceptanceTest {
|
||||
@Intercepts({@Signature(type=Executor.class,method="update",args={MappedStatement.class,Object.class}),
|
||||
@Signature(type=Executor.class,method="query",args={MappedStatement.class,Object.class,org.apache.ibatis.session.RowBounds.class,org.apache.ibatis.session.ResultHandler.class})})
|
||||
public static class TransactionEvidence implements Interceptor {
|
||||
long inserts,calls;boolean nonTransactional,active;
|
||||
long inserts,warehouseDailyInserts,calls;boolean nonTransactional,active;
|
||||
private final Map<String,long[]> metrics=new LinkedHashMap<>();
|
||||
Map<String,Object> snapshot(){
|
||||
Map<String,Object> result=new LinkedHashMap<>();metrics.forEach((id,m)->result.put(id,Map.of("calls",m[0],"failedCalls",m[1],"totalClientElapsedMs",m[2]/1000000.0,"maxClientElapsedMs",m[3]/1000000.0)));
|
||||
@@ -209,8 +211,10 @@ class OutboundCandidateBuildMySqlAcceptanceTest {
|
||||
@Override public Object intercept(Invocation invocation)throws Throwable {
|
||||
if(!active)return invocation.proceed();
|
||||
String id=((MappedStatement)invocation.getArgs()[0]).getId();
|
||||
if(id.equals(OutboundAggregateMapper.class.getName()+".insertDaily")||id.equals(OutboundAggregateMapper.class.getName()+".insertProfiles")) {
|
||||
inserts++;nonTransactional|=!TransactionSynchronizationManager.isActualTransactionActive();
|
||||
boolean warehouseDaily=id.equals(OutboundAggregateMapper.class.getName()+".insertWarehouseDaily");
|
||||
if(warehouseDaily||id.equals(OutboundAggregateMapper.class.getName()+".insertDaily")||id.equals(OutboundAggregateMapper.class.getName()+".insertProfiles")) {
|
||||
inserts++;if(warehouseDaily)warehouseDailyInserts++;
|
||||
nonTransactional|=!TransactionSynchronizationManager.isActualTransactionActive();
|
||||
}
|
||||
long start=System.nanoTime();boolean succeeded=false;calls++;
|
||||
try {Object value=invocation.proceed();succeeded=true;return value;}
|
||||
|
||||
Reference in New Issue
Block a user