docs: @Override
      public boolean onShutdown(long timeout, TimeUnit unit) {
          if (nodeEngine.getLocalMember().isLiteMember()) {
              return true;
          }
          long timeoutNanos = unit.toNanos(timeout);
          for (CRDTReplicationAwareService service : getReplicationServices()) {
              service.prepareToSafeShutdown();
              final CRDTReplicationContainer replicationOperation = service.prepareReplicationOperation(
                      replicationVectorClocks.getLatestReplicatedVectorClock(service.getName()), 0);
              if (replicationOperation == null) {
                  logger.fine("Skipping replication since all CRDTs are replicated");
                  continue;
              }
              long start = System.nanoTime();
              if (!tryProcessOnOtherMembers(replicationOperation.getOperation(), service.getName(), timeoutNanos)) {
                  logger.warning("Failed replication of CRDTs for " + service.getName() + ". CRDT state may be lost.");
              }
              timeoutNanos -= (System.nanoTime() - start);
              if (timeoutNanos < 0) {
                  return false;
              }
          }
          return true;
      }