diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java index a9bf69fb38..82ec50a00e 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java @@ -248,6 +248,7 @@ protected DatabaseWriterSettings buildDatabaseWriterSettings(List errorHandlers, List conflictSettings, List resolvedDatas) { DatabaseWriterSettings settings = buildParameterDatabaseWritterSettings(); + settings.setLoadOnlyNode(engine.getParameterService().is(ParameterConstants.NODE_LOAD_ONLY)); settings.setDatabaseWriterFilters(filters); settings.setDatabaseWriterErrorHandlers(errorHandlers); diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java index 92f7ecc972..3a87bb3ae5 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java @@ -60,6 +60,8 @@ public class DatabaseWriterSettings { protected boolean logConflictResolution = false; + protected boolean loadOnlyNode = false; + protected String textColumnExpression; protected Map conflictSettingsByChannel; @@ -303,4 +305,12 @@ public void setApplyChangesOnly(boolean applyChangesOnly) { public boolean isApplyChangesOnly() { return applyChangesOnly; } + + public boolean isLoadOnlyNode() { + return loadOnlyNode; + } + + public void setLoadOnlyNode(boolean loadOnlyNode) { + this.loadOnlyNode = loadOnlyNode; + } } diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriterConflictResolver.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriterConflictResolver.java index 4780cdcd43..9ff5f2d0aa 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriterConflictResolver.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriterConflictResolver.java @@ -126,8 +126,9 @@ protected boolean isCaptureTimeNewer(Conflict conflict, AbstractDatabaseWriter w Timestamp loadingTs = data.getAttribute(CsvData.ATTRIBUTE_CREATE_TIME); Date existingTs = null; String existingNodeId = null; + boolean isLoadOnlyNode = databaseWriter.getWriterSettings().isLoadOnlyNode(); - if (loadingTs != null) { + if (loadingTs != null && !isLoadOnlyNode) { if (log.isDebugEnabled()) { log.debug("Finding last capture time for table {} with pk of {}", targetTable.getName(), ArrayUtils.toString(pkData)); } @@ -163,7 +164,7 @@ protected boolean isCaptureTimeNewer(Conflict conflict, AbstractDatabaseWriter w } } - boolean isWinner = existingTs == null || (loadingTs != null && (loadingTs.getTime() > existingTs.getTime() + boolean isWinner = isLoadOnlyNode || existingTs == null || (loadingTs != null && (loadingTs.getTime() > existingTs.getTime() || (loadingTs.getTime() == existingTs.getTime() && writer.getContext().getBatch().getSourceNodeId().hashCode() > existingNodeId.hashCode()))); writer.getContext().put(DatabaseConstants.IS_CONFLICT_WINNER, isWinner);