You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@directory.apache.org by Clauds <cl...@gmail.com> on 2015/10/05 19:42:45 UTC

ApacheDS (2.0.0_M19/2.0.0_M20) LDAP Content Synchronization (Replication) with client library not working (as expected)

I’m trying to get replication working between ApacheDS and our application which uses unboundid-ldapsdk library to connect to the LDAP server. We synchronize using refresh and persist. Our implementation was initially done to synchronize with OpenLDAP which works fine but now I have to do a POC with ApacheDS. I tried versions 2.0.0_M19 and 2.0.0_M20:
- with M19 it’s not working at all
- with M20 it works but the initial sync I receive if no/empty cookie is sent is not as expected

Using 2.0.0_M19 I get the following exception:

----
[18:07:58] ERROR [org.apache.directory.server.PROVIDER_LOG] - Failed to handle the syncrepl request
java.lang.NullPointerException
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.sendSearchResultEntry(SyncReplRequestHandler.java:754)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.readResults(SyncReplRequestHandler.java:722)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.doSimpleSearch(SyncReplRequestHandler.java:671)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.doInitialRefresh(SyncReplRequestHandler.java:562)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.handleSyncRequest(SyncReplRequestHandler.java:311)
	at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handleReplication(SearchRequestHandler.java:240)
	at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handle(SearchRequestHandler.java:200)
	at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handle(SearchRequestHandler.java:93)
	at org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:207)
	at org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:56)
	at org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived(DemuxingIoHandler.java:221)
	at org.apache.directory.server.ldap.LdapProtocolHandler.messageReceived(LdapProtocolHandler.java:217)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:854)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:943)
	at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)
	at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
	at org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.runTask(UnorderedThreadPoolExecutor.java:475)
	at org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.run(UnorderedThreadPoolExecutor.java:429)
	at java.lang.Thread.run(Thread.java:745)
[18:07:58] WARN [org.apache.directory.server.ldap.LdapProtocolHandler] - Unexpected exception forcing session to close: sending disconnect notice to client.
org.apache.directory.api.ldap.model.exception.LdapException
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.handleSyncRequest(SyncReplRequestHandler.java:349)
	at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handleReplication(SearchRequestHandler.java:240)
	at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handle(SearchRequestHandler.java:200)
	at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handle(SearchRequestHandler.java:93)
	at org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:207)
	at org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:56)
	at org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived(DemuxingIoHandler.java:221)
	at org.apache.directory.server.ldap.LdapProtocolHandler.messageReceived(LdapProtocolHandler.java:217)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:854)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:943)
	at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)
	at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
	at org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.runTask(UnorderedThreadPoolExecutor.java:475)
	at org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.run(UnorderedThreadPoolExecutor.java:429)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.sendSearchResultEntry(SyncReplRequestHandler.java:754)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.readResults(SyncReplRequestHandler.java:722)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.doSimpleSearch(SyncReplRequestHandler.java:671)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.doInitialRefresh(SyncReplRequestHandler.java:562)
	at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.handleSyncRequest(SyncReplRequestHandler.java:311)
	... 16 more
[18:07:58] INFO [org.apache.directory.server.ldap.handlers.LdapResponseHandler] - ignoring the message MessageType : EXTENDED_RESPONSE
Message ID : 0
    Extended Response
        ResponseName :'1.3.6.1.4.1.1466.20036'
        Ldap Result
            Result code : (PROTOCOL_ERROR) protocolError
            Matched Dn : 'null'
            Diagnostic message : 'PROTOCOL_ERROR: The server will disconnect!'
 received from null session
----

I also found the following error in the log which lead me to the issue DIRSERVER-2025 [1] and as a reaction to try replication with M20 instead.
Is issue DIRSERVER-2025 preventing synchronization to work at all on 2.0.0_M19 or is there a way to get it working?

[1] https://issues.apache.org/jira/browse/DIRSERVER-2025

----
[18:11:52] WARN [org.apache.directory.mavibot.btree.SpaceReclaimer] - Failed to read the copied page map from /tmp/cpm.db
[18:11:52] WARN [org.apache.directory.mavibot.btree.SpaceReclaimer] -
java.lang.NullPointerException
        at org.apache.directory.mavibot.btree.RevisionName.getRevision(RevisionName.java:57)
        at org.apache.directory.mavibot.btree.RevisionName.hashCode(RevisionName.java:126)
        at org.apache.directory.mavibot.btree.RevisionName.getRevision(RevisionName.java:57)
        at org.apache.directory.mavibot.btree.RevisionName.hashCode(RevisionName.java:126)
        at java.util.concurrent.ConcurrentHashMap.readObject(ConcurrentHashMap.java:1447)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1900)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
        at org.apache.directory.mavibot.btree.SpaceReclaimer.readCopiedPageMap(SpaceReclaimer.java:135)
        at org.apache.directory.mavibot.btree.RecordManager.<init>(RecordManager.java:289)
        at org.apache.directory.mavibot.btree.RecordManager.<init>(RecordManager.java:229)
        at org.apache.directory.server.core.shared.DefaultCoreSession.sortResults(DefaultCoreSession.java:1343)
        at org.apache.directory.server.core.shared.DefaultCoreSession.search(DefaultCoreSession.java:1130)
        at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.doSimpleSearch(SyncReplRequestHandler.java:648)
        at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.doInitialRefresh(SyncReplRequestHandler.java:562)
        at org.apache.directory.server.ldap.replication.provider.SyncReplRequestHandler.handleSyncRequest(SyncReplRequestHandler.java:311)
        at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handleReplication(SearchRequestHandler.java:240)
        at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handle(SearchRequestHandler.java:200)
        at org.apache.directory.server.ldap.handlers.request.SearchRequestHandler.handle(SearchRequestHandler.java:93)
        at org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:207)
        at org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:56)
        at org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived(DemuxingIoHandler.java:221)
        at org.apache.directory.server.ldap.LdapProtocolHandler.messageReceived(LdapProtocolHandler.java:217)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:854)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:943)
        at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)
        at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
        at org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.runTask(UnorderedThreadPoolExecutor.java:475)
        at org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.run(UnorderedThreadPoolExecutor.java:429)
        at java.lang.Thread.run(Thread.java:745)
----


Using 2.0.0_M20 I have some issues not related to replication that would need fixing but the replication itself works. However, the initial data I receive (sending no/empty cookie) does not contain the objectClass attribute or any attributes related to the different object classes. If I modify an entry these attributes are sent.
Why is the initial data different from what is sent after doing a modification? Can I configure/force it to always send all attributes?

Looking at the documentation I only found a possible configuration parameter if two ApacheDS are used: ads-replAttributes: *
http://joacim.breiler.com/apacheds/ch08s02.html

I haven’t found any documentation on setting up replication between ApacheDS and a non-LDAP server as we are doing using the client library so I’m not sure if I can expect it to work properly, does anybody have experience with such a setup?


I saw the following log entries which I believe is what replication is sending considering the data I receive...

# initial sync
----
[17:22:21] DEBUG [org.apache.directory.server.ldap.handlers.LdapResponseHandler] - Message Sent : MessageType : SEARCH_RESULT_ENTRY
Message ID : 2
    Search Result Entry
Entry
    dn[n]: uid=iTEST:A_o10,ou=HCRegulatedOrganization,dc=HPD,o=ehealth-suisse,c=ch

    entryCSN: 20151005135801.242000Z#000000#001#000000
    createTimestamp: 20151002175549.507Z
    creatorsName: 0.9.2342.19200300.100.1.1=admin,2.5.4.11=system
    modifyTimestamp: 20151005135801.242Z
    entryDN: uid=iTEST:A_o10,ou=HCRegulatedOrganization,dc=HPD,o=ehealth-suisse,c=ch
    modifiersName: 0.9.2342.19200300.100.1.1=admin,2.5.4.11=system
    entryUUID: d583de57-0820-41db-847f-55087fb926b4
    entryParentId: e7514792-9e44-4753-8997-946886db6bed
    SyncStateValue control :
        oid : 1.3.6.1.4.1.4203.1.9.1.2
        critical : false
        syncStateType     : 'ADD'
        entryUUID         : '0xD5 0x83 0xDE 0x57 0x08 0x20 0x41 0xDB 0x84 0x7F 0x55 0x08 0x7F 0xB9 0x26 0xB4 '
        cookie            : ‘'
----


# after doing a modification on the entry
----
[17:32:44] DEBUG [org.apache.directory.server.ldap.handlers.LdapResponseHandler] - Message Sent : MessageType : SEARCH_RESULT_ENTRY
Message ID : 16
    Search Result Entry
Entry
    dn[n]: uid=iTEST:A_o10,ou=HCRegulatedOrganization,dc=HPD,o=ehealth-suisse,c=ch
    objectclass: top
    objectclass: organization
    objectclass: uidObject
    objectclass: HCRegulatedOrganization
    objectclass: HPDProvider
    objectclass: labeledURIObject
    o: iTEST:A_o10
    o: J&S xxx blubb blubb
    hpdproviderstatus: ACTIVE
    hcregisteredname: iTEST:A_o10
    hcidentifier: test-auth:test-ident:A_o10:REVOKED
    uid: iTEST:A_o10
----