code: private void setGroupsValidation(final RolloutGroupsValidation validation) {
  
          final int runningValidation = runningValidationsCounter.getAndSet(0);
          if (runningValidation > 1) {
              validateRemainingTargets();
              return;
          }
          groupsValidation = validation;
  
          final int lastIdx = groupRows.size() - 1;
          final GroupRow lastRow = groupRows.get(lastIdx);
          if (groupsValidation != null && groupsValidation.isValid() && validationStatus != ValidationStatus.INVALID) {
              lastRow.resetError();
              setValidationStatus(ValidationStatus.VALID);
          } else {
              lastRow.setError(i18n.getMessage("message.rollout.remaining.targets.error"));
              setValidationStatus(ValidationStatus.INVALID);
          }
  
          // validate the single groups
          final int maxTargets = quotaManagement.getMaxTargetsPerRolloutGroup();
          final boolean hasRemainingTargetsError = validationStatus == ValidationStatus.INVALID;
          for (int i = 0; i < groupRows.size(); ++i) {
              final GroupRow row = groupRows.get(i);
              // do not mask the 'remaining targets' error
              if (hasRemainingTargetsError && row.equals(lastRow)) {
                  continue;
              }
              row.resetError();
              final Long count = groupsValidation.getTargetsPerGroup().get(i);
              if (count != null && count > maxTargets) {
                  row.setError(i18n.getMessage(MESSAGE_ROLLOUT_MAX_GROUP_SIZE_EXCEEDED, maxTargets));
                  setValidationStatus(ValidationStatus.INVALID);
              }
          }
  
      }
docs: YOU SHOULD NOT CALL THIS METHOD MANUALLY. It's only for the callback.
  Only 1 runningValidation should be executed. If this runningValidation is
  done, then this method is called. Maybe then a new runningValidation is
  executed.