opends/resource/schema/02-config.ldif
@@ -21,7 +21,7 @@ # CDDL HEADER END # # # Copyright 2006-2008 Sun Microsystems, Inc. # Copyright 2006-2009 Sun Microsystems, Inc. # # # This file contains the attribute type and objectclass definitions for use @@ -2377,6 +2377,16 @@ SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( ds-cfg-affinity-policy-OID NAME 'ds-cfg-affinity-policy' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( ds-cfg-affinity-timeout-OID NAME 'ds-cfg-affinity-timeout' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE X-ORIGIN 'OpenDS Directory Server' ) objectClasses: ( 1.3.6.1.4.1.26027.1.2.1 NAME 'ds-cfg-access-control-handler' SUP top @@ -3862,6 +3872,8 @@ SUP top STRUCTURAL MUST ( ds-cfg-network-group-id $ ds-cfg-affinity-policy $ ds-cfg-affinity-timeout $ ds-cfg-priority $ ds-cfg-enabled ) MAY ds-cfg-workflow opends/src/admin/defn/org/opends/server/admin/std/NetworkGroupConfiguration.xml
@@ -23,7 +23,7 @@ ! CDDL HEADER END ! ! ! Copyright 2007-2008 Sun Microsystems, Inc. ! Copyright 2007-2009 Sun Microsystems, Inc. ! --> <adm:managed-object name="network-group" plural-name="network-groups" package="org.opends.server.admin.std" @@ -175,4 +175,94 @@ </ldap:attribute> </adm:profile> </adm:property> <adm:property name="affinity-policy" mandatory="true" advanced="true"> <adm:synopsis> Defines the client connection affinity policy. </adm:synopsis> <adm:description> A client connection affinity allows some requests to be routed to a specific data source regardless the regular routing process. For example, we can requires all the requests to be routed to a data source after a write has been complete on that data source. That way, a read request would return data that are consistent with a previous write request. By default, the client connection affinity is disabled. </adm:description> <adm:default-behavior> <adm:defined> <adm:value>none</adm:value> </adm:defined> </adm:default-behavior> <adm:syntax> <adm:enumeration> <adm:value name="none"> <adm:synopsis> Disables the client connection affinity. </adm:synopsis> </adm:value> <adm:value name="first-read-request-after-write-request"> <adm:synopsis> Routes the first read request to the data source to which a previous write request has been routed to. This affinity is useful when a client application performs a read request after a write request and the read request should return consistent data. </adm:synopsis> </adm:value> <adm:value name="all-requests-after-first-write-request"> <adm:synopsis> Routes all the requests to the data source to which a previous write request has been routed to. </adm:synopsis> </adm:value> <adm:value name="all-write-requests-after-first-write-request"> <adm:synopsis> Routes all the write requests to the data source to which a previous write request has been routed to. This affinity policy is useful for batch update where a parent entry and its subordinates must be sent to the same data source. </adm:synopsis> </adm:value> <adm:value name="all-requests-after-first-request"> <adm:synopsis> Routes all the requests to the data source to which a previous request has been routed to. This affinity policy allows to create a kind of tunnel between a client application and a data source. </adm:synopsis> </adm:value> </adm:enumeration> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:name>ds-cfg-affinity-policy</ldap:name> </ldap:attribute> </adm:profile> </adm:property> <adm:property name="affinity-timeout" mandatory="true" advanced="true"> <adm:synopsis> The period of time by which an affinity route remains active. The timeout value is a number of seconds and when the value is set to 0 (default value) then the route remains active forever. </adm:synopsis> <adm:description> When the client connection affinity is enabled, an affinity route might be elected in accordance with the affinity policy. The affinity route is then used until the timeout value expires unless the timeout value is 0 in which case the route remains active forever. </adm:description> <adm:default-behavior> <adm:defined> <adm:value>0</adm:value> </adm:defined> </adm:default-behavior> <adm:syntax> <adm:duration base-unit="s" lower-limit="0" /> </adm:syntax> <adm:profile name="ldap"> <ldap:attribute> <ldap:name>ds-cfg-affinity-timeout</ldap:name> </ldap:attribute> </adm:profile> </adm:property> </adm:managed-object> opends/src/messages/messages/core.properties
@@ -1813,4 +1813,7 @@ INFO_ERR_WORKFLOW_DOES_NOT_EXIST_718=\ Unable to register the workflow "%s" with the network group %s because \ the workflow does not exist SEVERE_ERR_WORKFLOW_BASE_DN_DUPLICATED_IN_NG_719=\ Unable to register the workflow because the base DN '%s' is already \ registered with the network group '%s' opends/src/server/org/opends/server/core/networkgroups/NetworkGroup.java
@@ -22,7 +22,7 @@ * CDDL HEADER END * * * Copyright 2007-2008 Sun Microsystems, Inc. * Copyright 2007-2009 Sun Microsystems, Inc. */ package org.opends.server.core.networkgroups; @@ -141,6 +141,13 @@ // The statistics private NetworkGroupStatistics stats; // The client connection affinity policy. private ClientConnectionAffinityPolicy affinityPolicy = null; // The client connection affinity timeout (number of seconds). private long affinityTimeout = 0; /** * Creates a new instance of the network group. * @@ -731,6 +738,34 @@ } /** * Sets the affinity policy. The client connection affinity is the ability * for the server to bypass a route algorithm like "load balancing" so * that a request is always sent to the same data source regardless the * route algorithm. * * @param affinityPolicy * The client connection affinity policy of the network group. */ public void setAffinityPolicy( ClientConnectionAffinityPolicy affinityPolicy) { this.affinityPolicy = affinityPolicy; } /** * Sets the affinity timeout value. The client connection affinity, when * set, remains active until the time out expires. When the time out * value is set to 0 then an active affinity never expires. * * @param timeout * The affinity timeout value (0 means never expire). */ public void setAffinityTimeout(long timeout) { this.affinityTimeout = timeout; } /** * Gets the highest priority matching network group. * * @param connection the client connection @@ -899,6 +934,32 @@ } /** * Gets the affinity policy. The client connection affinity is the ability * for the server to bypass a route algorithm like "load balancing" so * that a request is always sent to the same data source regardless the * route algorithm. * * @return the client connection affinity policy of the network group */ public ClientConnectionAffinityPolicy getAffinityPolicy() { return this.affinityPolicy; } /** * Gets the affinity timeout value. The client connection affinity, when * set, is active for a period of time. Once that period of time has * expired, the client connection affinity is reset. A value of 0 means * "no limit" - when an affinity is set it remains active for ever. * * @return the affinity timeout value (0 means no limit). */ public long getAffinityTimeout() { return this.affinityTimeout; } /** * Checks the request filtering policy. * @param operation the operation to be checked * @param messages the error messages 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); } }