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

pgamba
29.43.2007 cc98695069d613fb483650235920b70f1022f4d5
Fix #2630 dsrepl pre-external-initialization does not work with bin copy
6 files modified
125 ■■■■ changed files
opends/src/server/org/opends/server/protocols/LDIFConnectionHandler.java 7 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/plugin/ListenerThread.java 4 ●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java 31 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ReplicationCache.java 47 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ServerHandler.java 32 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ServerWriter.java 4 ●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/LDIFConnectionHandler.java
@@ -110,6 +110,9 @@
  // The thread used to run the connection handler.
  private Thread connectionHandlerThread;
  // Help to not warn permanently and fullfill the log file
  // in debug mode.
  private boolean alreadyWarn = false;
  /**
@@ -123,6 +126,7 @@
    isStopped               = true;
    stopRequested           = false;
    connectionHandlerThread = null;
    alreadyWarn = false;
  }
@@ -288,11 +292,12 @@
          }
          else
          {
            if (debugEnabled())
            if (!alreadyWarn && debugEnabled())
            {
              TRACER.debugInfo("LDIF connection handler directory " +
                               dir.getAbsolutePath() +
                               "doesn't exist or isn't a file");
              alreadyWarn = true;
            }
          }
opends/src/server/org/opends/server/replication/plugin/ListenerThread.java
@@ -60,7 +60,9 @@
   */
  public ListenerThread(ReplicationDomain listener)
  {
     super("Replication Listener thread");
     super("Replication Listener thread " +
         "serverID=" + listener.serverId +
         " domain=" + listener.getName());
     this.listener = listener;
  }
opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
@@ -203,8 +203,6 @@
  private long generationId = -1;
  private boolean generationIdSavedStatus = false;
  private long rejectedGenerationId = -1;
  private boolean requestedResetSinceLastStart = false;
  /**
   * This object is used to store the list of update currently being
@@ -901,29 +899,6 @@
                ErrorMessage errorMsg = (ErrorMessage)msg;
                logError(ERR_ERROR_MSG_RECEIVED.get(
                           errorMsg.getDetails()));
                if (errorMsg.getMsgID() == NOTE_RESET_GENERATION_ID.getId())
                {
                  TRACER.debugInfo("requestedResetSinceLastStart=" +
                             requestedResetSinceLastStart +
                            "rejectedGenerationId=" + rejectedGenerationId);
                  if (requestedResetSinceLastStart && (rejectedGenerationId>0))
                  {
                    // When the last generation presented was refused and we are
                    // the 'reseter' server then restart automatically to become
                    // the 'master'
                    state.clear();
                    rejectedGenerationId = -1;
                    requestedResetSinceLastStart = false;
                    broker.stop();
                    broker.start(replicationServers);
                  }
                }
                if (errorMsg.getMsgID() == NOTE_BAD_GENERATION_ID.getId())
                {
                  rejectedGenerationId = generationId;
                }
              }
            }
            else if (msg instanceof UpdateMessage)
@@ -2534,8 +2509,11 @@
   */
  public void resetGenerationId(Long generationIdNewValue)
  {
    if (debugEnabled())
      TRACER.debugInfo(
          this.getName() + "resetGenerationId" + generationIdNewValue);
    ResetGenerationId genIdMessage = null;
    requestedResetSinceLastStart = true;
    if (generationIdNewValue == null)
    {
      genIdMessage = new ResetGenerationId(this.generationId);
@@ -3267,7 +3245,6 @@
            baseDN.toNormalizedString(),
            e.getLocalizedMessage()));
      }
      rejectedGenerationId = -1;
      if (debugEnabled())
        TRACER.debugInfo(
opends/src/server/org/opends/server/replication/server/ReplicationCache.java
@@ -1004,7 +1004,7 @@
      {
        for (ServerHandler handler : connectedServers.values())
        {
          handler.resetGenerationId();
          handler.warnBadGenerationId();
        }
      }
@@ -1027,45 +1027,44 @@
      if (debugEnabled())
        TRACER.debugInfo(
          "In " + this.replicationServer.getMonitorInstanceName() +
          " baseDN=" + baseDn +
          " RCache.resetGenerationId received new ref genId="  + newGenId);
            "In " + this.replicationServer.getMonitorInstanceName() +
            " baseDN=" + baseDn +
            " RCache.resetGenerationId received new ref genId="  + newGenId);
      // Notifies the others LDAP servers that from now on
      // they have the bad generationId
      // Notifies the remote LDAP servers that from now on
      // they have a generationId different from the reference one
      for (ServerHandler handler : connectedServers.values())
      {
        if (newGenId != handler.getGenerationId())
        {
          handler.resetGenerationId();
          handler.warnBadGenerationId();
        }
      }
      // Propagates the reset message to the others replication servers
      // dealing with the same domain.
      if (senderHandler.isLDAPserver())
      // If we are the first replication server warned,
      // then forwards the reset message to the remote replication servers
      for (ServerHandler rsHandler : replicationServers.values())
      {
        for (ServerHandler handler : replicationServers.values())
        try
        {
          try
          rsHandler.setGenerationId(newGenId);
          if (senderHandler.isLDAPserver())
          {
            handler.sendGenerationId(genIdMsg);
            rsHandler.forwardGenerationIdToRS(genIdMsg);
          }
          catch (IOException e)
          {
            logError(ERR_CHANGELOG_ERROR_SENDING_INFO.
                get(handler.getMonitorInstanceName()));
           }
        }
        catch (IOException e)
        {
          logError(ERR_CHANGELOG_ERROR_SENDING_INFO.
              get(rsHandler.getMonitorInstanceName()));
        }
      }
      if (this.generationId != newGenId)
      {
        clearDbs();
      clearDbs();
        // Reset the in memory domain generationId
        generationId = newGenId;
      }
      // Reset the in memory domain generationId
      generationId = newGenId;
    }
    /**
opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -146,7 +146,7 @@
  private short replicationServerId;
  private short protocolVersion;
  private long generationId=-1;
  private long generationId = -1;
  /**
@@ -219,7 +219,7 @@
    rcvWindowSizeHalf = windowSize/2;
    maxRcvWindow = windowSize;
    rcvWindow = windowSize;
    long localGenerationId=-1;
    long localGenerationId = -1;
    try
    {
      if (baseDn != null)
@@ -557,7 +557,9 @@
        // Create a thread to send heartbeat messages.
        if (heartbeatInterval > 0)
        {
          heartbeatThread = new HeartbeatThread("replication Heartbeat",
          heartbeatThread = new HeartbeatThread(
              "replication Heartbeat to " + serverURL +
              " for " + this.baseDn,
              session, heartbeatInterval);
          heartbeatThread.start();
        }
@@ -1738,7 +1740,7 @@
  /**
   * Resets the generationId for this domain.
   */
  public void resetGenerationId()
  public void warnBadGenerationId()
  {
    // Notify the peer that it is now invalid regarding the generationId
    // We are now waiting a startServer message from this server with
@@ -1764,10 +1766,20 @@
   * @throws IOException When it occurs while sending the message,
   *
   */
   public void sendGenerationId(ResetGenerationId msg)
   throws IOException
   {
     generationId = msg.getGenerationId();
     session.publish(msg);
   }
  public void forwardGenerationIdToRS(ResetGenerationId msg)
  throws IOException
  {
    session.publish(msg);
  }
  /**
   * Set a new generation ID.
   *
   * @param generationId The new generation ID
   *
   */
  public void setGenerationId(long generationId)
  {
    this.generationId = generationId;
  }
}
opends/src/server/org/opends/server/replication/server/ServerWriter.java
@@ -108,7 +108,9 @@
        // Ignore update to be sent to a replica with a bad generation ID
        long referenceGenerationId = replicationCache.getGenerationId();
        if (referenceGenerationId != handler.getGenerationId())
        if ((referenceGenerationId != handler.getGenerationId())
            || (referenceGenerationId == -1)
            || (handler.getGenerationId() == -1))
        {
          logError(ERR_IGNORING_UPDATE_TO.get(
              update.getDn(),