From 2d735189c834108a2e5f7a795610372eb6d00aed Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 03 Jun 2014 08:45:08 +0000
Subject: [PATCH] OPENDJ-1467 :  File Based Changelog must support replicas temporarily leaving the topology

---
 opends/src/server/org/opends/server/replication/server/changelog/file/FileChangelogDB.java |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangelogDB.java b/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
index 36e8a7a..db0c9f3 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/file/FileChangelogDB.java
@@ -672,6 +672,7 @@
     final ChangeNumberIndexer indexer = cnIndexer.get();
     if (indexer != null)
     {
+      notifyReplicaOnline(indexer, baseDN, updateMsg.getCSN().getServerId());
       indexer.publishUpdateMsg(baseDN, updateMsg);
     }
     return wasCreated;
@@ -679,25 +680,35 @@
 
   /** {@inheritDoc} */
   @Override
-  public void replicaHeartbeat(final DN baseDN, final CSN heartbeatCSN)
+  public void replicaHeartbeat(final DN baseDN, final CSN heartbeatCSN) throws ChangelogException
   {
     final ChangeNumberIndexer indexer = cnIndexer.get();
     if (indexer != null)
     {
+      notifyReplicaOnline(indexer, baseDN, heartbeatCSN.getServerId());
       indexer.publishHeartbeat(baseDN, heartbeatCSN);
     }
   }
 
+  private void notifyReplicaOnline(final ChangeNumberIndexer indexer, final DN baseDN, final int serverId)
+      throws ChangelogException
+  {
+    if (indexer.isReplicaOffline(baseDN, serverId))
+    {
+      replicationEnv.notifyReplicaOnline(baseDN, serverId);
+    }
+  }
+
   /** {@inheritDoc} */
   @Override
-  public void replicaOffline(final DN baseDN, final CSN offlineCSN)
+  public void notifyReplicaOffline(final DN baseDN, final CSN offlineCSN) throws ChangelogException
   {
+    replicationEnv.notifyReplicaOffline(baseDN, offlineCSN);
     final ChangeNumberIndexer indexer = cnIndexer.get();
     if (indexer != null)
     {
       indexer.replicaOffline(baseDN, offlineCSN);
     }
-    // TODO save this state in the changelogStateDB?
   }
 
   /**

--
Gitblit v1.10.0