From 0642bd56015b5571ada7bb38b77844c08b574d4c Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 11 Jul 2014 09:43:38 +0000
Subject: [PATCH] Code cleanup.
---
opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java | 133 +++++++++++++++++++++++---------------------
1 files changed, 70 insertions(+), 63 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java
index 4e1da15..7291043 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java
@@ -77,7 +77,6 @@
@Override
public void run()
{
- LocalizableMessage errMessage = null;
if (logger.isTraceEnabled())
{
logger.trace(getName() + " starting");
@@ -87,16 +86,19 @@
* grab all incoming messages and publish them to the
* replicationServerDomain
*/
+ LocalizableMessage errMessage = null;
try
{
while (true)
{
try
{
- ReplicationMsg msg = session.receive();
+ final ReplicationMsg msg = session.receive();
if (logger.isTraceEnabled())
+ {
logger.trace("In " + getName() + " receives " + msg);
+ }
if (msg instanceof AckMsg)
{
@@ -105,67 +107,8 @@
}
else if (msg instanceof UpdateMsg)
{
- UpdateMsg updateMsg = (UpdateMsg) msg;
-
- boolean filtered = false;
- // Ignore updates in some cases
- if (handler.isDataServer())
- {
- /*
- * Ignore updates from DS in bad BAD_GENID_STATUS or
- * FULL_UPDATE_STATUS The RSD lock should not be taken here as it
- * is acceptable to have a delay between the time the server has a
- * wrong status and the fact we detect it: the updates that
- * succeed to pass during this time will have no impact on remote
- * server. But it is interesting to not saturate uselessly the
- * network if the updates are not necessary so this check to stop
- * sending updates is interesting anyway. Not taking the RSD lock
- * allows to have better performances in normal mode (most of the
- * time).
- */
- ServerStatus dsStatus = handler.getStatus();
- if (dsStatus == BAD_GEN_ID_STATUS
- || dsStatus == FULL_UPDATE_STATUS)
- {
- long referenceGenerationId = handler.getReferenceGenId();
- if (dsStatus == BAD_GEN_ID_STATUS)
- {
- logger.warn(WARN_IGNORING_UPDATE_FROM_DS_BADGENID,
- handler.getReplicationServerId(), updateMsg.getCSN(),
- handler.getBaseDN(), handler.getServerId(),
- session.getReadableRemoteAddress(),
- handler.getGenerationId(), referenceGenerationId);
- }
- if (dsStatus == FULL_UPDATE_STATUS)
- {
- logger.warn(WARN_IGNORING_UPDATE_FROM_DS_FULLUP,
- handler.getReplicationServerId(), updateMsg.getCSN(),
- handler.getBaseDN(), handler.getServerId(),
- session.getReadableRemoteAddress());
- }
- filtered = true;
- }
- }
- else
- {
- /*
- * Ignore updates from RS with bad gen id (no system managed
- * status for a RS)
- */
- long referenceGenerationId = handler.getReferenceGenId();
- if (referenceGenerationId > 0
- && referenceGenerationId != handler.getGenerationId())
- {
- logger.error(WARN_IGNORING_UPDATE_FROM_RS,
- handler.getReplicationServerId(), updateMsg.getCSN(),
- handler.getBaseDN(), handler.getServerId(),
- session.getReadableRemoteAddress(),
- handler.getGenerationId(), referenceGenerationId);
- filtered = true;
- }
- }
-
- if (!filtered)
+ final UpdateMsg updateMsg = (UpdateMsg) msg;
+ if (!isUpdateMsgFiltered(updateMsg))
{
handler.put(updateMsg);
}
@@ -301,6 +244,70 @@
}
}
+ /**
+ * Returns whether the update message is filtered in one of those cases:
+ * <ul>
+ * <li>Ignore updates from DS in bad BAD_GENID_STATUS or FULL_UPDATE_STATUS</li>
+ * <li>Ignore updates from RS with bad gen id</li>
+ * </ul>
+ */
+ private boolean isUpdateMsgFiltered(UpdateMsg updateMsg)
+ {
+ if (handler.isDataServer())
+ {
+ /**
+ * Ignore updates from DS in bad BAD_GENID_STATUS or
+ * FULL_UPDATE_STATUS
+ *
+ * The RSD lock should not be taken here as it is acceptable to
+ * have a delay between the time the server has a wrong status and
+ * the fact we detect it: the updates that succeed to pass during
+ * this time will have no impact on remote server. But it is
+ * interesting to not saturate uselessly the network if the
+ * updates are not necessary so this check to stop sending updates
+ * is interesting anyway. Not taking the RSD lock allows to have
+ * better performances in normal mode (most of the time).
+ */
+ final ServerStatus dsStatus = handler.getStatus();
+ if (dsStatus == BAD_GEN_ID_STATUS)
+ {
+ logger.warn(WARN_IGNORING_UPDATE_FROM_DS_BADGENID,
+ handler.getReplicationServerId(), updateMsg.getCSN(),
+ handler.getBaseDN(), handler.getServerId(),
+ session.getReadableRemoteAddress(),
+ handler.getGenerationId(), handler.getReferenceGenId());
+ return true;
+ }
+ else if (dsStatus == FULL_UPDATE_STATUS)
+ {
+ logger.warn(WARN_IGNORING_UPDATE_FROM_DS_FULLUP,
+ handler.getReplicationServerId(), updateMsg.getCSN(),
+ handler.getBaseDN(), handler.getServerId(),
+ session.getReadableRemoteAddress());
+ return true;
+ }
+ }
+ else
+ {
+ /**
+ * Ignore updates from RS with bad gen id
+ * (no system managed status for a RS)
+ */
+ long referenceGenerationId = handler.getReferenceGenId();
+ if (referenceGenerationId > 0
+ && referenceGenerationId != handler.getGenerationId())
+ {
+ logger.error(WARN_IGNORING_UPDATE_FROM_RS,
+ handler.getReplicationServerId(), updateMsg.getCSN(),
+ handler.getBaseDN(), handler.getServerId(),
+ session.getReadableRemoteAddress(),
+ handler.getGenerationId(), referenceGenerationId);
+ return true;
+ }
+ }
+ return false;
+ }
+
private void logException(Exception e)
{
if (logger.isTraceEnabled())
--
Gitblit v1.10.0