From a2bed334c56bacef8140fd78baab9374084ecdf3 Mon Sep 17 00:00:00 2001
From: jdemendi <jdemendi@localhost>
Date: Tue, 06 Jan 2009 09:55:26 +0000
Subject: [PATCH] add support of the client connection affinity

---
 opends/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java |   47 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java b/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java
index 1f6662f..f59092d 100644
--- a/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java
+++ b/opends/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.core.networkgroups;
 
@@ -32,7 +32,9 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.SortedSet;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -222,8 +224,38 @@
       NetworkGroupCfg configuration,
       List<Message>   unacceptableReasons)
   {
-    // Nothing to check.
-    return true;
+    // If the network group is disabled then there is nothing to check.
+    if (! configuration.isEnabled())
+    {
+      return true;
+    }
+
+    // Check that all the workflows in the network group have a
+    // different base DN.
+
+    boolean result = true;
+    Set<String> allBaseDNs = new HashSet<String>();
+    for (String workflowId : configuration.getWorkflow())
+    {
+      WorkflowImpl workflow =
+        (WorkflowImpl) WorkflowImpl.getWorkflow(workflowId);
+      String baseDN = workflow.getBaseDN().toNormalizedString();
+      if (allBaseDNs.contains(baseDN))
+      {
+        // This baseDN is duplicated
+        Message message = ERR_WORKFLOW_BASE_DN_DUPLICATED_IN_NG.get(
+          baseDN, configuration.getNetworkGroupId());
+        unacceptableReasons.add(message);
+        result = false;
+        break;
+      }
+      else
+      {
+        allBaseDNs.add(baseDN);
+      }
+    }
+
+    return result;
   }
 
 
@@ -424,6 +456,15 @@
               ex.getMessageObject());
     }
 
+    // Set the client connection affinity policy.
+    ClientConnectionAffinityPolicy affinityPolicy =
+      ClientConnectionAffinityPolicy.toClientConnectionAffinityPolicy(
+        networkGroupCfg.getAffinityPolicy());
+    networkGroup.setAffinityPolicy(affinityPolicy);
+
+    // Set the client connection affinity timeout
+    long affinityTimeout = networkGroupCfg.getAffinityTimeout();
+    networkGroup.setAffinityTimeout(affinityTimeout);
   }
 
 }

--
Gitblit v1.10.0