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
----