docs: private CallStatus beforePromotion() {
          NodeEngineImpl nodeEngine = (NodeEngineImpl) getNodeEngine();
          InternalOperationService operationService = nodeEngine.getOperationService();
          InternalPartitionServiceImpl partitionService = getService();
  
          if (!partitionService.getMigrationManager().acquirePromotionPermit()) {
              throw new RetryableHazelcastException("Another promotion is being run currently. "
                      + "This is only expected when promotion is retried to an unresponsive destination.");
          }
  
          ILogger logger = getLogger();
          int partitionStateVersion = partitionService.getPartitionStateVersion();
          if (partitionState.getVersion() <= partitionStateVersion) {
              logger.warning("Already applied promotions to the partition state. Promotion state version: "
                      + partitionState.getVersion() + ", current version: " + partitionStateVersion);
              partitionService.getMigrationManager().releasePromotionPermit();
              success = true;
              return CallStatus.DONE_RESPONSE;
          }
  
          partitionService.getInternalMigrationListener().onPromotionStart(MigrationParticipant.DESTINATION, promotions);
  
          if (logger.isFineEnabled()) {
              logger.fine("Submitting BeforePromotionOperations for " + promotions.size() + " promotions. "
                      + "Promotion partition state version: " + partitionState.getVersion()
                      + ", current partition state version: " + partitionStateVersion);
          }
  
          Runnable beforePromotionsCallback = new BeforePromotionOperationCallback(this, new AtomicInteger(promotions.size()));
  
          for (MigrationInfo promotion : promotions) {
              if (logger.isFinestEnabled()) {
                  logger.finest("Submitting BeforePromotionOperation for promotion: " + promotion);
              }
              BeforePromotionOperation op = new BeforePromotionOperation(promotion, beforePromotionsCallback);
              op.setPartitionId(promotion.getPartitionId()).setNodeEngine(nodeEngine).setService(partitionService);
              operationService.execute(op);
          }
          return CallStatus.DONE_VOID;
      }