docs: private void replicate(CRDTReplicationAwareService service, Member target) {
          if (Thread.currentThread().isInterrupted()) {
              return;
          }
          final int targetIndex = getDataMemberListIndex(target);
          final Map<String, VectorClock> lastSuccessfullyReplicatedClocks =
                  replicationMigrationService.getReplicatedVectorClocks(service.getName(), target.getUuid());
  
          final OperationService operationService = nodeEngine.getOperationService();
          final CRDTReplicationContainer replicationOperation =
                  service.prepareReplicationOperation(lastSuccessfullyReplicatedClocks, targetIndex);
  
          if (replicationOperation == null) {
              logger.finest("Skipping replication of " + service.getName() + " for target " + target);
              return;
          }
          try {
              logger.finest("Replicating " + service.getName() + " to " + target);
              operationService.invokeOnTarget(null, replicationOperation.getOperation(), target.getAddress()).join();
              replicationMigrationService.setReplicatedVectorClocks(service.getName(), target.getUuid(),
                      replicationOperation.getVectorClocks());
          } catch (Exception e) {
              if (logger.isFineEnabled()) {
                  logger.fine("Failed replication of " + service.getName() + " for target " + target, e);
              } else {
                  logger.info("Failed replication of " + service.getName() + " for target " + target);
              }
          }
      }