From 6a89f230c9ea1ec5aead43924125be464129fab3 Mon Sep 17 00:00:00 2001 From: elong Date: Fri, 15 Jul 2016 17:26:49 -0400 Subject: [PATCH] 0002680: Avoid updating status of outgoing batch for small batches --- .../jumpmind/symmetric/common/ParameterConstants.java | 2 ++ .../symmetric/service/impl/DataExtractorService.java | 10 ++++++++-- .../src/main/resources/symmetric-default.properties | 9 +++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java index 521dc09947..7df4fa4c39 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java @@ -351,6 +351,8 @@ private ParameterConstants() { public final static String DBF_ROUTER_VALIDATE_HEADER = "dbf.router.validate.header"; + public final static String OUTGOING_BATCH_UPDATE_STATUS_MILLIS = "outgoing.batches.update.status.millis"; + public static Map getParameterMetaData() { return parameterMetaData; } diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java index 8e7fabfc7e..61ee5187f2 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataExtractorService.java @@ -714,8 +714,14 @@ final protected boolean changeBatchStatus(Status status, OutgoingBatch currentBa currentBatch.setStatus(status); } if (mode != ExtractMode.EXTRACT_ONLY) { - outgoingBatchService.updateOutgoingBatch(currentBatch); - return true; + long batchStatusUpdateMillis = parameterService.getLong(ParameterConstants.OUTGOING_BATCH_UPDATE_STATUS_MILLIS); + if (currentBatch.getStatus() == Status.RQ || currentBatch.getStatus() == Status.LD || + currentBatch.getLastUpdatedTime() == null || + System.currentTimeMillis() - batchStatusUpdateMillis >= currentBatch.getLastUpdatedTime().getTime()) { + outgoingBatchService.updateOutgoingBatch(currentBatch); + return true; + } + return false; } else { return false; } diff --git a/symmetric-core/src/main/resources/symmetric-default.properties b/symmetric-core/src/main/resources/symmetric-default.properties index bc624ba245..05de0257fd 100644 --- a/symmetric-core/src/main/resources/symmetric-default.properties +++ b/symmetric-core/src/main/resources/symmetric-default.properties @@ -993,6 +993,15 @@ routing.stale.gap.busy.expire.time.ms=1200000 # Tags: extract outgoing.batches.peek.ahead.batch.commit.size=10 + +# Update the outgoing batch status to QY (querying) and SE (sending) only when +# the last update to the batch is in the past by at least the specified number of milliseconds. +# This can improve performance overhead on small batches by avoiding status updates. +# +# DatabaseOverridable: true +# Tags: extract +outgoing.batches.update.status.millis=10000 + # Disable the extraction of all channels with the exception of the config channel # # DatabaseOverridable: true