docs: @Override
      public synchronized void saveAndIncrement(T data) {
          Either<Void, T> oldData = this.data;
          final String oldKey = versionedKey;
          VersionedKey newVersionedKey = increment();
          final String newKey = newVersionedKey.toJson();
          logger.info("Saving data with key {}, new version is {}", key, newVersionedKey.toJson());
  
          try {
              writer.putSync(newVersionedKey.toJson(), new Data(
                                                                data, new Date(), newVersionedKey.toJson()))
                    .flatMap(res -> stringWriter.put(key, newVersionedKey.toJson()))
                    .peek(res -> {
                        this.data = Either.right(data);
                        delete(versionedKey);
                    }).peekFailed((err) -> {
                        String message = String.format("Failed to update manifest comparator file from %s to %s", oldKey, newKey);
                        logger.warn(message, err);
                    });
  
          } finally {
              versionedKey = newVersionedKey.toJson();
          }
      }