in amazon-sns-trigger-server/src/main/java/jetbrains/buildServer/clouds/amazon/sns/trigger/utils/CustomDataStorageWrapper.java [103:143]
private boolean safeFlush() {
int iteration = 0;
do {
try {
myCustomDataStorage.flush(CustomDataStorage.ConflictResolution.FAIL);
return true;
} catch (Throwable e) {
LOG.debug("Failed to flush session storage: ${e.message}", e);
if (iteration++ >= 10) {
return false;
}
// Refresh storage to get latest values
myCustomDataStorage.refresh();
Map<String, String> storageValues = getValuesSafe();
// Create a merged map with conflict resolution
Map<String, String> mergedValues = new HashMap<>(storageValues);
for (Map.Entry<String, Optional<String>> entry : myStateCopy.entrySet()) {
String key = entry.getKey();
String localValue = entry.getValue().orElse(null);
String storageValue = storageValues.get(key);
if (!Objects.equals(localValue, storageValue)) {
// Conflict detected
String resolvedValue = resolveConflict(key, localValue, storageValue);
mergedValues.put(key, resolvedValue);
} else {
// No conflict; keep the local value
mergedValues.put(key, localValue);
}
}
// Update storage with merged values
myCustomDataStorage.putValues(mergedValues);
}
} while (true);
}