private boolean safeFlush()

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);
  }