A distribution algorithm distributes operations across data views that have the same base DN. The type of distribution algorithm is defined by the distribution-algorithm parameter.
To determine how to distribute operations, the distribution algorithm considers the value of the attribute directly below the base DN of the data view. For example, consider a data view with a base DN of ou=people,dc=example,dc=com. If a search operation contains the base DN uid=23,ou=people,dc=example,dc=com, the distribution algorithm considers uid to be the routing attribute, because uid is directly below the base DN of the data view. The algorithm then attempts to match the value 23 to determine how to route the operation.
However, if the search operation contains the base DN uid=23,ou=managers,ou=people,dc=example,dc=com, the distribution algorithm considers ou to be the routing attribute, because ou is directly below the base DN of the data view. Because ou does not match the uid specified in the search query, the distribution algorithm cannot distribute the search correctly. For distribution to work in this case, the base DN of the data view should be ou=managers,ou=people,dc=example,dc=com.
You must therefore ensure that the base DN of the data view is appropriate to the distribution algorithm.
The following distribution algorithms are provided with Directory Proxy Server:
Requests are distributed to data views based on the match between the parameters of the requests and one or more patterns. Patterns are defined by the following parameters:
pattern-matching-base-dn-regular-expression
pattern-matching-base-object-search-filter
pattern-matching-dn-regular-expression
pattern-matching-one-level-search-filter
pattern-matching-subtree-search-filter
The syntax supported by the pattern matching algorithm is specified by the Java Pattern class (documented at http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html). This syntax is not the same as the usual regex syntax.
Requests are distributed to data views according to the numeric value of the RDN in the request. The numeric value is taken from the value of the first RDN beneath the base DN of the data view. Numeric bounds are defined by these parameters:
numeric-attrs
numeric-default-data-view
numeric-lower-bound
numeric-upper-bound
Requests are distributed to data views according to the lexicographic value of the RDN in the request. Lexico bounds are taken from the value of the first RDN beneath the base DN of the data view. Lexico bounds are defined by these parameters:
lexicographic-attrs
lexicographic-lower-bound
lexicographic-upper-bound
Requests are distributed to data views according to the role of the data view in replication. The algorithm distributes write operations to all data sources in the data source pool and read operations to a single data source. The replication role is defined by the replication-role parameter. A data view can have a master role or a consumer role.
You can also configure Directory Proxy Server to support your custom distribution algorithms. For more information about configuring custom distribution algorithms, see To Configure Custom Distribution Algorithm in Sun Directory Server Enterprise Edition 7.0 Administration Guide.
For information about how to configure a distribution algorithm, see Data Views With Hierarchy and a Distribution Algorithm in Sun Directory Server Enterprise Edition 7.0 Administration Guide. For information about the parameters used with the distribution algorithms, see distribution-algorithm(5dpconf).
The distribution algorithms provided with Directory Proxy Server have certain limitations in specific request scenarios.
The following list outlines the situations in which requests do not respect the distribution algorithm. The examples in this list assume that the routing attribute is uid and the view base of the data view is dc=example,dc=com.
When the search base ends with the view base and the scope is base, requests are always distributed to the first data view. For example:
$ ldapsearch -b "ou=people,dc=example,dc=com" -s base "uid=116352"
When the search base ends with the view base and the scope is one level or subtree, requests are always distributed to the first data view. For example:
$ ldapsearch -b "ou=people,dc=example,dc=com" -s sub "uid=116352"
When the search base ends with the view base and starts with the routing attribute, but the search filter does not contain the routing attribute, requests are distributed to all data views. For example:
$ ldapsearch -b "uid=116352",ou=people,dc=example,dc=com" -s base "objectclass=*"
In this example, requests are distributed correctly if the RDN value matches the data view criteria.
When the search base ends with the view base and contains the routing attribute, but the search filter does not contain the routing attribute, requests are distributed to all data views. For example:
$ ldapsearch -b "cn=myAccount,uid=116352,ou=people,dc=example,dc=com" -s base "objectclass=*"
In this example, requests are distributed correctly if the RDN value matches the data view criteria.