Package org.opends.server.backends
Class ProxyBackend
- All Implemented Interfaces:
ConfigurationChangeListener<ProxyBackendCfg>,HealthStatusProvider
public final class ProxyBackend
extends Backend<ProxyBackendCfg>
implements ConfigurationChangeListener<ProxyBackendCfg>
Implements the proxy backend, i.e. an LDAP endpoint able to forward LDAP requests to remote LDAP
servers.
The proxy backend forwards requests to remote servers using load balancers.
Implementation detail: the proxy backend uses a hierarchy of load balancers / LDAP clients that are setup this way: if the proxy backend is configured for distribution (with more than one partition):
Load Balancers - reference counted (one for bind operations + another one for other operations)
|
+--- newFixedSizeDistributionLoadBalancer (for n partitions)
|
+--- n newFailoverLoadBalancer (each fails over primary and secondary servers)
|
+--- 2 newAffinityRequestLoadBalancer (one for primary servers, one for secondary
| servers)
|
+--- newCachedConnectionPool - reference counted
|
+--- LdapClient
Otherwise, the proxy backend is configured for direct proxying (with only one partition):
Load Balancers - reference counted (one for bind operations + another one for other operations)
|
+--- newFailoverLoadBalancer (over primary and secondary servers)
|
+--- 2 newAffinityRequestLoadBalancer (one for primary servers, one for secondary servers)
|
+--- newCachedConnectionPool - reference counted
|
+--- LdapClient
Note: Some load balancers/LDAP clients are reference counted,
in order to ease managing their lifecycle and to avoid disturbing clients.
When a change affects the load balancers/LDAP clients, the proxy backend needs to rebuild
a whole new load balancer hierarchy in order to make use of them.
However, LDAP is a connected protocol, thus closing connections should be avoided when there is no need to.
As a consequence some LDAP clients/load balancers are reference counted
to ensure they are closed only when they are no longer referenced.-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionapplyConfigurationChange(ProxyBackendCfg newConfig) Applies the configuration changes to this change listener.voidconfigureBackend(ProxyBackendCfg cfg, ServerContext serverContext) Configure this backend based on the information in the provided configuration.voidDeregisters the backend monitor of this backend.voidPerforms any necessary work to finalize this backend.Retrieves the set of base-level DNs that may be used within this backend.Retrieves the OIDs of the controls that may be supported by this backend.Retrieves the OIDs of the features that may be supported by this backend.voidhandleRequest(RequestContext context, Request request, Consumer<Response> out) Processes a request, publishing the response(s) to the provided consumer.booleanisConfigurationAcceptable(ProxyBackendCfg config, List<LocalizableMessage> unacceptableReasons, ServerContext serverContext) Indicates whether the provided configuration is acceptable for this backend.booleanisConfigurationChangeAcceptable(ProxyBackendCfg config, List<LocalizableMessage> unacceptableReasons) Indicates whether the proposed change to the configuration is acceptable to this change listener.booleanIndicates whether the base DNs of this backend should be considered public or private.voidOpens this backend based on the information provided when the backend was configured.voidRegisters a backend monitor for this backend.Methods inherited from class org.opends.server.api.Backend
getBackendID, getHealthStatus, setBackendID, toString
-
Constructor Details
-
ProxyBackend
public ProxyBackend()
-
-
Method Details
-
handleRequest
public void handleRequest(RequestContext context, Request request, Consumer<Response> out) throws LdapException Description copied from class:BackendProcesses a request, publishing the response(s) to the provided consumer. Implementations may publish response in multiple steps if needed. If the request fails for any reason then the failure must be thrown as anLdapException.- Specified by:
handleRequestin classBackend<ProxyBackendCfg>- Parameters:
context- The request context.request- The request.out- A consumer responsible for sending responses to the client.- Throws:
LdapException- If an error occurred when processing the request.
-
configureBackend
public void configureBackend(ProxyBackendCfg cfg, ServerContext serverContext) throws ConfigException Description copied from class:BackendConfigure this backend based on the information in the provided configuration. When the method returns, the backend will have been configured (ready to be opened) but still unable to process operations.- Specified by:
configureBackendin classBackend<ProxyBackendCfg>- Parameters:
cfg- The configuration of this backend.serverContext- The server context for this instance- Throws:
ConfigException- If there is an error in the configuration.
-
openBackend
Description copied from class:BackendOpens this backend based on the information provided when the backend was configured. It also should open any underlying storage and register all suffixes with the server.- Specified by:
openBackendin classBackend<ProxyBackendCfg>- Throws:
ConfigException- If an unrecoverable problem arises while opening the backend.- See Also:
-
getBaseDNs
Description copied from class:BackendRetrieves the set of base-level DNs that may be used within this backend.- Specified by:
getBaseDNsin classBackend<ProxyBackendCfg>- Returns:
- The set of base-level DNs that may be used within this backend.
-
getSupportedControls
Description copied from class:BackendRetrieves the OIDs of the controls that may be supported by this backend.- Overrides:
getSupportedControlsin classBackend<ProxyBackendCfg>- Returns:
- The OIDs of the controls that may be supported by this backend.
-
getSupportedFeatures
Description copied from class:BackendRetrieves the OIDs of the features that may be supported by this backend.- Overrides:
getSupportedFeaturesin classBackend<ProxyBackendCfg>- Returns:
- The OIDs of the features that may be supported by this backend.
-
finalizeBackend
public void finalizeBackend()Description copied from class:BackendPerforms any necessary work to finalize this backend. The backend must be an opened backend, so do not use this method on backends where onlyconfigureBackend()has been called. This may be called during the Directory Server shutdown process or if a backend is disabled with the server online. It must not return until the backend is closed.This method may not throw any exceptions. If any problems are encountered, then they may be logged but the closure should progress as completely as possible.
- Specified by:
finalizeBackendin classBackend<ProxyBackendCfg>
-
isPublicBackend
public boolean isPublicBackend()Description copied from class:BackendIndicates whether the base DNs of this backend should be considered public or private.This method also controls the visibility of the associated naming contexts. i.e. if any base DN of this backend is a naming context, then it will be public or private, based on the value returned by this method.
Reminder: Public naming contexts are returned when querying the root DSE entry.
- Specified by:
isPublicBackendin classBackend<ProxyBackendCfg>- Returns:
trueif this backend's baseDNs could be exposed as a public naming context,falseif they must remain private naming contexts.
-
isConfigurationAcceptable
public boolean isConfigurationAcceptable(ProxyBackendCfg config, List<LocalizableMessage> unacceptableReasons, ServerContext serverContext) Description copied from class:BackendIndicates whether the provided configuration is acceptable for this backend. It should be possible to call this method on an uninitialized backend instance in order to determine whether the backend would be able to use the provided configuration.- Overrides:
isConfigurationAcceptablein classBackend<ProxyBackendCfg>- Parameters:
config- The backend configuration for which to make the determination.unacceptableReasons- A list that may be used to hold the reasons that the provided configuration is not acceptable.serverContext- this Directory Server instance's server context- Returns:
trueif the provided configuration is acceptable for this backend, orfalseif not.
-
isConfigurationChangeAcceptable
public boolean isConfigurationChangeAcceptable(ProxyBackendCfg config, List<LocalizableMessage> unacceptableReasons) Description copied from interface:ConfigurationChangeListenerIndicates whether the proposed change to the configuration is acceptable to this change listener.- Specified by:
isConfigurationChangeAcceptablein interfaceConfigurationChangeListener<ProxyBackendCfg>- Parameters:
config- The new configuration containing the changes.unacceptableReasons- A list that can be used to hold messages about why the provided configuration is not acceptable.- Returns:
- Returns
trueif the proposed change is acceptable, orfalseif it is not.
-
applyConfigurationChange
Description copied from interface:ConfigurationChangeListenerApplies the configuration changes to this change listener.- Specified by:
applyConfigurationChangein interfaceConfigurationChangeListener<ProxyBackendCfg>- Parameters:
newConfig- The new configuration containing the changes.- Returns:
- Returns information about the result of changing the configuration.
-
registerBackendMonitor
public void registerBackendMonitor()Description copied from class:BackendRegisters a backend monitor for this backend.- Overrides:
registerBackendMonitorin classBackend<ProxyBackendCfg>
-
deregisterBackendMonitor
public void deregisterBackendMonitor()Description copied from class:BackendDeregisters the backend monitor of this backend.- Overrides:
deregisterBackendMonitorin classBackend<ProxyBackendCfg>
-