Skip to content

Commit

Permalink
0000951: use_timestamp conflict resolution with transform can get int…
Browse files Browse the repository at this point in the history
…o endless loop
  • Loading branch information
chenson42 committed Dec 13, 2012
1 parent 593caf7 commit 7de29b2
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
Expand Up @@ -60,14 +60,14 @@ public void needsResolved(DatabaseWriter writer, CsvData data, LoadStatus loadSt
case INSERT:
switch (conflict.getResolveType()) {
case FALLBACK:
performFallbackToUpdate(writer, data, conflict);
performFallbackToUpdate(writer, data, conflict, true);
break;
case NEWER_WINS:
if ((conflict.getDetectType() == DetectConflict.USE_TIMESTAMP && isTimestampNewer(
conflict, writer, data))
|| (conflict.getDetectType() == DetectConflict.USE_VERSION && isVersionNewer(
conflict, writer, data))) {
performFallbackToUpdate(writer, data, conflict);
performFallbackToUpdate(writer, data, conflict, true);
} else {
if (!conflict.isResolveRowOnly()) {
throw new IgnoreBatchException();
Expand All @@ -93,15 +93,15 @@ public void needsResolved(DatabaseWriter writer, CsvData data, LoadStatus loadSt
new CsvData(data.getDataEventType(), data.getParsedData(CsvData.ROW_DATA));
try {
// we already tried to update using the pk
performFallbackToInsert(writer, withoutOldData, conflict);
performFallbackToInsert(writer, withoutOldData, conflict, true);
} catch (ConflictException ex) {
performFallbackToUpdate(writer, withoutOldData, conflict);
performFallbackToUpdate(writer, withoutOldData, conflict, true);
}
} else {
try {
performFallbackToUpdate(writer, data, conflict);
performFallbackToUpdate(writer, data, conflict, true);
} catch (ConflictException ex) {
performFallbackToInsert(writer, data, conflict);
performFallbackToInsert(writer, data, conflict, true);
}
}
break;
Expand All @@ -111,9 +111,9 @@ public void needsResolved(DatabaseWriter writer, CsvData data, LoadStatus loadSt
|| (conflict.getDetectType() == DetectConflict.USE_VERSION && isVersionNewer(
conflict, writer, data))) {
try {
performFallbackToUpdate(writer, data, conflict);
performFallbackToUpdate(writer, data, conflict, false);
} catch (ConflictException ex) {
performFallbackToInsert(writer, data, conflict);
performFallbackToInsert(writer, data, conflict, true);
}

} else {
Expand Down Expand Up @@ -220,9 +220,9 @@ protected void attemptToResolve(ResolvedData resolvedData, CsvData data, Databas
if (!resolvedData.isIgnoreRow()) {
data.putCsvData(CsvData.ROW_DATA, resolvedData.getResolvedData());
try {
performFallbackToUpdate(writer, data, conflict);
performFallbackToUpdate(writer, data, conflict, true);
} catch (ConflictException ex) {
performFallbackToInsert(writer, data, conflict);
performFallbackToInsert(writer, data, conflict, true);
}
}
} else {
Expand Down Expand Up @@ -297,7 +297,7 @@ protected boolean isVersionNewer(Conflict conflict, DatabaseWriter writer, CsvDa
return loadingVersion > existingVersion;
}

protected void performFallbackToUpdate(DatabaseWriter writer, CsvData data, Conflict conflict) {
protected void performFallbackToUpdate(DatabaseWriter writer, CsvData data, Conflict conflict, boolean retransform) {
try {
beforeResolutionAttempt(conflict);
LoadStatus loadStatus = writer.update(data, conflict.isResolveChangesOnly(), false);
Expand All @@ -312,7 +312,7 @@ protected void performFallbackToUpdate(DatabaseWriter writer, CsvData data, Conf
}
}

protected void performFallbackToInsert(DatabaseWriter writer, CsvData csvData, Conflict conflict) {
protected void performFallbackToInsert(DatabaseWriter writer, CsvData csvData, Conflict conflict, boolean retransform) {
try {
beforeResolutionAttempt(conflict);
LoadStatus loadStatus = writer.insert(csvData);
Expand Down
Expand Up @@ -36,9 +36,9 @@ public DefaultTransformWriterConflictResolver(TransformWriter transformWriter) {
}

@Override
protected void performFallbackToInsert(DatabaseWriter writer, CsvData data, Conflict conflict) {
protected void performFallbackToInsert(DatabaseWriter writer, CsvData data, Conflict conflict, boolean retransform) {
TransformedData transformedData = data.getAttribute(TransformedData.class.getName());
if (transformedData != null) {
if (transformedData != null && retransform) {
List<TransformedData> newlyTransformedDatas = transformWriter.transform(
DataEventType.INSERT, writer.getContext(), transformedData.getTransformation(),
transformedData.getSourceKeyValues(), transformedData.getOldSourceValues(),
Expand All @@ -65,14 +65,14 @@ protected void performFallbackToInsert(DatabaseWriter writer, CsvData data, Conf
}
}
} else {
super.performFallbackToInsert(writer, data, conflict);
super.performFallbackToInsert(writer, data, conflict, retransform);
}
}

@Override
protected void performFallbackToUpdate(DatabaseWriter writer, CsvData data, Conflict conflict) {
protected void performFallbackToUpdate(DatabaseWriter writer, CsvData data, Conflict conflict, boolean retransform) {
TransformedData transformedData = data.getAttribute(TransformedData.class.getName());
if (transformedData != null) {
if (transformedData != null && retransform) {
List<TransformedData> newlyTransformedDatas = transformWriter.transform(
DataEventType.UPDATE, writer.getContext(), transformedData.getTransformation(),
transformedData.getSourceKeyValues(), transformedData.getOldSourceValues(),
Expand All @@ -86,7 +86,7 @@ protected void performFallbackToUpdate(DatabaseWriter writer, CsvData data, Conf
}
}
} else {
super.performFallbackToUpdate(writer, data, conflict);
super.performFallbackToUpdate(writer, data, conflict, retransform);
}
}

Expand Down

0 comments on commit 7de29b2

Please sign in to comment.