mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
20.29.2013 8301b1d818c7adfe83927457e973a517279ee002
More code cleanups

ReplicationDomain.java, LDAPReplicationDomain.java:
Removed unused parameters from sessionInitiated().
Inlined Message passed into logError().

ReplicationBroker.java:
Consequence of the change to ReplicationDomain.sessionInitiated().
Extracted method mustAvoidYoyoEffect().
3 files modified
197 ■■■■■ changed files
opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java 84 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/service/ReplicationBroker.java 41 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/service/ReplicationDomain.java 72 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
@@ -753,11 +753,10 @@
    if (search.getResultCode() != ResultCode.SUCCESS
        && search.getResultCode() != ResultCode.NO_SUCH_OBJECT)
    {
      Message message = ERR_SEARCHING_GENERATION_ID.get(
      logError(ERR_SEARCHING_GENERATION_ID.get(
        search.getResultCode().getResultCodeName() + " " +
        search.getErrorMessage(),
        getBaseDNString());
      logError(message);
        getBaseDNString()));
      return false;
    }
@@ -807,10 +806,9 @@
        }
        if (attr.size() > 1)
        {
          Message message = ERR_LOADING_GENERATION_ID.get(getBaseDNString(),
          logError(ERR_LOADING_GENERATION_ID.get(getBaseDNString(),
              "#Values=" + attr.size() + " Must be exactly 1 in entry "
              + resultEntry.toLDIFString());
          logError(message);
              + resultEntry.toLDIFString()));
        }
      }
    }
@@ -2109,9 +2107,8 @@
        }
        catch  (NoSuchElementException e)
        {
          Message message = ERR_OPERATION_NOT_FOUND_IN_PENDING.get(
              op.toString(), curCSN.toString());
          logError(message);
          logError(ERR_OPERATION_NOT_FOUND_IN_PENDING.get(
              op.toString(), curCSN.toString()));
          return;
        }
      }
@@ -2128,9 +2125,7 @@
          * It should never happen.
          */
          pendingChanges.remove(curCSN);
          Message message =
              ERR_UNKNOWN_TYPE.get(op.getOperationType().toString());
          logError(message);
          logError(ERR_UNKNOWN_TYPE.get(op.getOperationType().toString()));
          return;
        }
@@ -2154,11 +2149,10 @@
        {
          // will be caught at publish time.
        }
        catch  (NoSuchElementException e)
        catch (NoSuchElementException e)
        {
          Message message = ERR_OPERATION_NOT_FOUND_IN_PENDING.get(
              op.toString(), curCSN.toString());
          logError(message);
          logError(ERR_OPERATION_NOT_FOUND_IN_PENDING.get(
              op.toString(), curCSN.toString()));
          return;
        }
        // If assured replication is enabled, this will wait for the matching
@@ -2169,11 +2163,9 @@
          waitForAckIfAssuredEnabled(msg);
        } catch (TimeoutException ex)
        {
          // This exception may only be raised if assured replication is
          // enabled
          Message errorMsg = NOTE_DS_ACK_TIMEOUT.get(getBaseDNString(),
              Long.toString(getAssuredTimeout()), msg.toString());
          logError(errorMsg);
          // This exception may only be raised if assured replication is enabled
          logError(NOTE_DS_ACK_TIMEOUT.get(getBaseDNString(),
              Long.toString(getAssuredTimeout()), msg.toString()));
        }
      }
@@ -2274,9 +2266,8 @@
       ResultCode res = newOp.getResultCode();
       if (res != ResultCode.SUCCESS)
       {
         Message message =
           ERR_COULD_NOT_SOLVE_CONFLICT.get(entryDN.toString(), res.toString());
           logError(message);
        logError(ERR_COULD_NOT_SOLVE_CONFLICT.get(
            entryDN.toString(), res.toString()));
       }
     }
   }
@@ -2804,10 +2795,9 @@
    {
      // The other type of errors can not be caused by naming conflicts.
      // Log a message for the repair tool.
      Message message = ERR_ERROR_REPLAYING_OPERATION.get(
      logError(ERR_ERROR_REPLAYING_OPERATION.get(
          op.toString(), ctx.getCSN().toString(),
          result.toString(), op.getErrorMessage().toString());
      logError(message);
          result.toString(), op.getErrorMessage().toString()));
      return true;
    }
  }
@@ -2874,10 +2864,9 @@
   {
     // The other type of errors can not be caused by naming conflicts.
     // Log a message for the repair tool.
     Message message = ERR_ERROR_REPLAYING_OPERATION.get(
     logError(ERR_ERROR_REPLAYING_OPERATION.get(
         op.toString(), ctx.getCSN().toString(),
         result.toString(), op.getErrorMessage().toString());
     logError(message);
         result.toString(), op.getErrorMessage().toString()));
     return true;
   }
 }
@@ -2995,10 +2984,9 @@
  {
    // The other type of errors can not be caused by naming conflicts.
    // Log a message for the repair tool.
    Message message = ERR_ERROR_REPLAYING_OPERATION.get(
    logError(ERR_ERROR_REPLAYING_OPERATION.get(
        op.toString(), ctx.getCSN().toString(),
        result.toString(), op.getErrorMessage().toString());
    logError(message);
        result.toString(), op.getErrorMessage().toString()));
    return true;
  }
}
@@ -3094,10 +3082,9 @@
    {
      // The other type of errors can not be caused by naming conflicts.
      // log a message for the repair tool.
      Message message = ERR_ERROR_REPLAYING_OPERATION.get(
      logError(ERR_ERROR_REPLAYING_OPERATION.get(
          op.toString(), ctx.getCSN().toString(),
          result.toString(), op.getErrorMessage().toString());
      logError(message);
          result.toString(), op.getErrorMessage().toString()));
      return true;
    }
  }
@@ -3544,12 +3531,11 @@
    if (search.getResultCode() != ResultCode.SUCCESS)
    {
      if (search.getResultCode() != ResultCode.NO_SUCH_OBJECT)
      { // This is an error.
        Message message = ERR_SEARCHING_GENERATION_ID.get(
      {
        logError(ERR_SEARCHING_GENERATION_ID.get(
            search.getResultCode().getResultCodeName() + " " +
            search.getErrorMessage(),
            getBaseDNString());
        logError(message);
            getBaseDNString()));
      }
    }
    else
@@ -3567,14 +3553,13 @@
          Attribute attr = attrs.get(0);
          if (attr.size()>1)
          {
            Message message = ERR_LOADING_GENERATION_ID.get(
            logError(ERR_LOADING_GENERATION_ID.get(
                getBaseDNString(), "#Values=" + attr.size() +
                " Must be exactly 1 in entry " + resultEntry.toLDIFString());
            logError(message);
                " Must be exactly 1 in entry " + resultEntry.toLDIFString()));
          }
          else if (attr.size() == 1)
          {
            found=true;
            found = true;
            try
            {
              aGenerationId = Long.decode(attr.iterator().next().toString());
@@ -4260,18 +4245,13 @@
  /** {@inheritDoc} */
  @Override
  public void sessionInitiated(
      ServerStatus initStatus,
      ServerState replicationServerState,
      long generationID,
      Session session)
  public void sessionInitiated(ServerStatus initStatus, ServerState rsState)
  {
    // Check domain fractional configuration consistency with local
    // configuration variables
    forceBadDataSet = !isBackendFractionalConfigConsistent();
    super.sessionInitiated(
        initStatus, replicationServerState,generationID, session);
    super.sessionInitiated(initStatus, rsState);
    // Now that we are connected , we can enable ECL if :
    // 1/ RS must in the same JVM and created an ECL_WORKFLOW_ELEMENT
@@ -4314,7 +4294,7 @@
       * Check that the ReplicationServer has seen all our previous
       * changes.
       */
      CSN replServerMaxCSN = replicationServerState.getCSN(getServerId());
      CSN replServerMaxCSN = rsState.getCSN(getServerId());
      // we don't want to update from here (a DS) an empty RS because
      // normally the RS should have been updated by other RSes except for
opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
@@ -162,7 +162,7 @@
  /**
   * String reported under CSN=monitor when there is no connected RS.
   */
  public final static String NO_CONNECTED_SERVER = "Not connected";
  public static final String NO_CONNECTED_SERVER = "Not connected";
  private final ServerState state;
  private Semaphore sendWindow;
  private int maxSendWindow;
@@ -1020,8 +1020,7 @@
      if (domain != null)
      {
        domain.sessionInitiated(initStatus, rsInfo.getServerState(),
            rsInfo.getGenerationId(), rs.session);
        domain.sessionInitiated(initStatus, rsInfo.getServerState());
      }
      final byte groupId = getGroupId();
@@ -1500,13 +1499,11 @@
    @Override
    public String toString()
    {
      return new StringBuilder()
          .append("Current best replication server Ids: ").append(
              this.bestRSs.keySet()).append(
              ", Evaluation of connected replication servers").append(
              " (ServerId => Evaluation): ").append(this.rsEvals.keySet())
          .append(", Any replication server not appearing here").append(
              " could not be contacted.").toString();
      return "Current best replication server Ids: " + bestRSs.keySet()
          + ", Evaluation of connected replication servers"
          + " (ServerId => Evaluation): " + rsEvals.keySet()
          + ", Any replication server not appearing here"
          + " could not be contacted.";
    }
  }
@@ -2166,16 +2163,8 @@
          arrived on the new RS. But we should disconnect if we reach the
          perfect balance (both values are 0).
          */
          MathContext roundMc = new MathContext(6, RoundingMode.DOWN);
          BigDecimal potentialCurrentRsNewLoadDistanceBdRounded =
            potentialCurrentRsNewLoadDistanceBd.round(roundMc);
          BigDecimal potentialNewSumOfLoadDistancesOfOtherRSsBdRounded =
            potentialNewSumOfLoadDistancesOfOtherRSsBd.round(roundMc);
          if ((potentialCurrentRsNewLoadDistanceBdRounded.compareTo(
            BigDecimal.ZERO) != 0)
            && (potentialCurrentRsNewLoadDistanceBdRounded.equals(
            potentialNewSumOfLoadDistancesOfOtherRSsBdRounded.negate())))
          if (mustAvoidYoyoEffect(potentialCurrentRsNewLoadDistanceBd,
              potentialNewSumOfLoadDistancesOfOtherRSsBd))
          {
            // Avoid the yoyo effect, and keep the local DS connected to its
            // current RS
@@ -2219,6 +2208,18 @@
    }
  }
  private static boolean mustAvoidYoyoEffect(BigDecimal rsNewLoadDistance,
      BigDecimal otherRSsNewSumOfLoadDistances)
  {
    final MathContext roundCtx = new MathContext(6, RoundingMode.DOWN);
    final BigDecimal rsLoadDistance = rsNewLoadDistance.round(roundCtx);
    final BigDecimal otherRSsSumOfLoadDistances =
        otherRSsNewSumOfLoadDistances.round(roundCtx);
    return rsLoadDistance.compareTo(BigDecimal.ZERO) != 0
        && rsLoadDistance.compareTo(otherRSsSumOfLoadDistances.negate()) == 0;
  }
  /**
   * Returns whether the local DS is overloading the RS.
   * <p>
opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -379,31 +379,23 @@
   * that don't need to perform additional computing.
   *
   * @param initStatus              The status to enter the state machine with.
   * @param replicationServerState  The ServerState of the ReplicationServer
   * @param rsState                 The ServerState of the ReplicationServer
   *                                with which the session was established.
   * @param generationID            The current generationID of the
   *                                ReplicationServer with which the session
   *                                was established.
   * @param session                 The Session that is currently used.
   */
  public void sessionInitiated(
      ServerStatus initStatus,
      ServerState replicationServerState,
      long generationID,
      Session session)
  public void sessionInitiated(ServerStatus initStatus, ServerState rsState)
  {
    // Sanity check: is it a valid initial status?
    if (!isValidInitialStatus(initStatus))
    {
      Message msg = ERR_DS_INVALID_INIT_STATUS.get(initStatus.toString(),
          getBaseDNString(), Integer.toString(serverID));
      logError(msg);
    } else
      logError(ERR_DS_INVALID_INIT_STATUS.get(initStatus.toString(),
          getBaseDNString(), Integer.toString(serverID)));
    }
    else
    {
      status = initStatus;
    }
    generator.adjust(state);
    generator.adjust(replicationServerState);
    generator.adjust(rsState);
  }
  /**
@@ -424,9 +416,8 @@
    StatusMachineEvent event = StatusMachineEvent.statusToEvent(reqStatus);
    if (event == StatusMachineEvent.INVALID_EVENT)
    {
      Message msg = ERR_DS_INVALID_REQUESTED_STATUS.get(reqStatus.toString(),
          getBaseDNString(), Integer.toString(serverID));
      logError(msg);
      logError(ERR_DS_INVALID_REQUESTED_STATUS.get(reqStatus.toString(),
          getBaseDNString(), Integer.toString(serverID)));
      return;
    }
@@ -958,10 +949,9 @@
        Some problems detected: message did not correctly reach every
        requested servers. Log problem
        */
        Message errorMsg = NOTE_DS_RECEIVED_ACK_ERROR.get(
        logError(NOTE_DS_RECEIVED_ACK_ERROR.get(
            getBaseDNString(), Integer.toString(serverID),
            update.toString(), ack.errorsToString());
        logError(errorMsg);
            update.toString(), ack.errorsToString()));
        List<Integer> failedServers = ack.getFailedServers();
@@ -1428,9 +1418,8 @@
    if (serverToInitialize == RoutableMsg.ALL_SERVERS)
    {
      Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_START_ALL.get(
          countEntries(), getBaseDNString(), serverID);
      logError(msg);
      logError(NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_START_ALL.get(
          countEntries(), getBaseDNString(), serverID));
      for (DSInfo dsi : getReplicasList())
      {
@@ -1448,9 +1437,8 @@
    }
    else
    {
      Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_START.get(
          countEntries(), getBaseDNString(), serverID, serverToInitialize);
      logError(msg);
      logError(NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_START.get(
          countEntries(), getBaseDNString(), serverID, serverToInitialize));
      ieContext.startList.add(serverToInitialize);
@@ -2294,9 +2282,8 @@
    try
    {
      // Log starting
      Message msg = NOTE_FULL_UPDATE_ENGAGED_FROM_REMOTE_START.get(
          getBaseDNString(), initTargetMsgReceived.getSenderID(), serverID);
      logError(msg);
      logError(NOTE_FULL_UPDATE_ENGAGED_FROM_REMOTE_START.get(
          getBaseDNString(), initTargetMsgReceived.getSenderID(), serverID));
      // Go into full update status
      setNewStatus(StatusMachineEvent.TO_FULL_UPDATE_STATUS_EVENT);
@@ -2468,14 +2455,11 @@
   */
  protected void setNewStatus(StatusMachineEvent event)
  {
    ServerStatus newStatus =
      StatusMachine.computeNewStatus(status, event);
    ServerStatus newStatus = StatusMachine.computeNewStatus(status, event);
    if (newStatus == ServerStatus.INVALID_STATUS)
    {
      Message msg = ERR_DS_CANNOT_CHANGE_STATUS.get(getBaseDNString(),
          Integer.toString(serverID), status.toString(), event.toString());
      logError(msg);
      logError(ERR_DS_CANNOT_CHANGE_STATUS.get(getBaseDNString(),
          Integer.toString(serverID), status.toString(), event.toString()));
      return;
    }
@@ -3251,10 +3235,8 @@
      }
      else if (assuredMode != AssuredMode.SAFE_DATA_MODE)
      {
        Message errorMsg =
            ERR_DS_UNKNOWN_ASSURED_MODE.get(Integer.toString(serverID),
                msgAssuredMode.toString(), getBaseDNString(), msg.toString());
        logError(errorMsg);
        logError(ERR_DS_UNKNOWN_ASSURED_MODE.get(Integer.toString(serverID),
            msgAssuredMode.toString(), getBaseDNString(), msg.toString()));
      }
        // Nothing to do in Assured safe data mode, only RS ack updates.
    }
@@ -3455,17 +3437,15 @@
    try
    {
      /*
      If assured replication is enabled, this will wait for the matching
      ack or time out. If assured replication is disabled, this returns
      immediately
      If assured replication is enabled, this will wait for the matching ack or
      time out. If assured replication is disabled, this returns immediately
      */
      waitForAckIfAssuredEnabled(update);
    } catch (TimeoutException ex)
    {
      // This exception may only be raised if assured replication is enabled
      Message errorMsg = NOTE_DS_ACK_TIMEOUT.get(getBaseDNString(),
          Long.toString(assuredTimeout), update.toString());
      logError(errorMsg);
      logError(NOTE_DS_ACK_TIMEOUT.get(getBaseDNString(),
          Long.toString(assuredTimeout), update.toString()));
    }
  }