Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0.0-M6
    • Fix Version/s: 2.0.0-M10
    • Component/s: None
    • Labels:
    • Environment:
      OS : Windows XP Professional Version 2002, Service Pack 3
      Hardware : Intel 1.73 Ghz, 2 GB RAM

      Description

      We are testing master-slave configuration for ApacheDS and observed inconsistency when data from MASTER gets

      deleted. The record gets deleted from MASTER but does not get deleted from SLAVE. However this does not happen

      always. Secondly we are unable to find out the pattern for the same.

      We have seen this issue after executing the Test Cases in sequence.

      Scenario - Master changes state from RUNNING to STOP and then RUNNING again while Slave is in 'RUNNING' state
      Ensure that MASTER and SLAVE are running before executing each test case.

      ========================================================

      Test Case No: 1

      1) Stop Master
      2) Restart MASTER
      3) Add an entry to the MASTER

      dn: cn=amodkadam,ou=users,ou=system
      objectClass: person
      objectClass: top
      sn: kadam
      cn: amodkadam

      Expected Result :

      SLAVE should get corresponding entry for

      dn: cn=amodkadam,ou=users,ou=system

      Actual Test Result:

      Same as expected result.

      ===========================================

      Test Case No:2

      1) Stop Master
      2) Restart MASTER
      3) UPDATE an entry in the MASTER

      dn: cn=amodkadam,ou=users,ou=system
      objectClass: person
      objectClass: top
      sn: kadam_update
      cn: amodkadam

      Expected Result :

      SLAVE should have UPDATED entry for

      dn: cn=amodkadam,ou=users,ou=system

      Actual Test Result:

      Same as expected

      ================================================
      1) Stop Master
      2) Restart MASTER
      3) DELETE an entry from the MASTER

      dn: cn=amodkadam,ou=users,ou=system
      objectClass: person
      objectClass: top
      sn: KADAM
      cn: amodkadam

      Expected Result :

      Corresponding entry should be deleted from SLAVE but does not get DELETED

      Actual Result

      Fails and the record in the SLAVE does not get deleted.

      However this does not happen alwyas.

      =========================================================================

      Could you let us know what could be issue and how to fix it ?

        Activity

        Hide
        Amod Kadam added a comment -

        The following is the exception trace observed at times (NOT ALWAYS)

        ERROR [org.apache.directory.server.ldap.replication.consumer.Replicat
        ionConsumerImpl] - ERR_278 More than one value has been provided for the single-
        valued attribute: ads-repllastsentcsn
        org.apache.directory.shared.ldap.model.exception.LdapInvalidAttributeValueExcept
        ion: ERR_278 More than one value has been provided for the single-valued attribu
        te: ads-repllastsentcsn
        at org.apache.directory.server.core.schema.SchemaInterceptor.assertNumbe
        rOfAttributeValuesValid(SchemaInterceptor.java:1629)
        at org.apache.directory.server.core.schema.SchemaInterceptor.assertNumbe
        rOfAttributeValuesValid(SchemaInterceptor.java:1617)
        at org.apache.directory.server.core.schema.SchemaInterceptor.check(Schem
        aInterceptor.java:1144)
        at org.apache.directory.server.core.schema.SchemaInterceptor.checkModify
        Entry(SchemaInterceptor.java:982)
        at org.apache.directory.server.core.schema.SchemaInterceptor.modify(Sche
        maInterceptor.java:1390)
        at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next
        (BaseInterceptor.java:599)
        at org.apache.directory.server.core.hash.PasswordHashingInterceptor.modi
        fy(PasswordHashingInterceptor.java:113)
        at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next
        (BaseInterceptor.java:599)
        at org.apache.directory.server.core.exception.ExceptionInterceptor.modif
        y(ExceptionInterceptor.java:298)
        at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next
        (BaseInterceptor.java:599)
        at org.apache.directory.server.core.authz.DefaultAuthorizationIntercepto
        r.modify(DefaultAuthorizationInterceptor.java:278)
        at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next
        (BaseInterceptor.java:599)
        at org.apache.directory.server.core.authz.AciAuthorizationInterceptor.mo
        dify(AciAuthorizationInterceptor.java:846)
        at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next
        (BaseInterceptor.java:599)
        at org.apache.directory.server.core.referral.ReferralInterceptor.modify(
        ReferralInterceptor.java:309)
        at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next
        (BaseInterceptor.java:599)
        at org.apache.directory.server.core.authn.AuthenticationInterceptor.modi
        fy(AuthenticationInterceptor.java:1050)
        at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next
        (BaseInterceptor.java:599)
        at org.apache.directory.server.core.normalization.NormalizationIntercept
        or.modify(NormalizationInterceptor.java:248)
        at org.apache.directory.server.core.DefaultOperationManager.modify(Defau
        ltOperationManager.java:660)
        at org.apache.directory.server.core.shared.DefaultCoreSession.modify(Def
        aultCoreSession.java:590)
        at org.apache.directory.server.core.shared.DefaultCoreSession.modify(Def
        aultCoreSession.java:564)
        at org.apache.directory.server.ldap.replication.consumer.ReplicationCons
        umerImpl.modify(ReplicationConsumerImpl.java:985)
        at org.apache.directory.server.ldap.replication.consumer.ReplicationCons
        umerImpl.handleSearchResult(ReplicationConsumerImpl.java:361)
        at org.apache.directory.server.ldap.replication.consumer.ReplicationCons
        umerImpl.doSyncSearch(ReplicationConsumerImpl.java:618)
        at org.apache.directory.server.ldap.replication.consumer.ReplicationCons
        umerImpl.startSync(ReplicationConsumerImpl.java:505)
        at org.apache.directory.server.ldap.replication.consumer.ReplicationCons
        umerImpl.connectionClosed(ReplicationConsumerImpl.java:484)
        at org.apache.directory.ldap.client.api.LdapNetworkConnection.sessionClo
        sed(LdapNetworkConnection.java:3647)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.sess
        ionClosed(DefaultIoFilterChain.java:665)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSession
        Closed(DefaultIoFilterChain.java:395)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(Defa
        ultIoFilterChain.java:46)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.ses
        sionClosed(DefaultIoFilterChain.java:781)
        at org.apache.mina.filter.codec.ProtocolCodecFilter.sessionClosed(Protoc
        olCodecFilter.java:387)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSession
        Closed(DefaultIoFilterChain.java:395)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(Defa
        ultIoFilterChain.java:46)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.ses
        sionClosed(DefaultIoFilterChain.java:781)
        at org.apache.mina.core.filterchain.IoFilterAdapter.sessionClosed(IoFilt
        erAdapter.java:95)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSession
        Closed(DefaultIoFilterChain.java:395)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireSessionClos
        ed(DefaultIoFilterChain.java:388)
        at org.apache.mina.core.service.IoServiceListenerSupport.fireSessionDest
        royed(IoServiceListenerSupport.java:244)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeNow(Abs
        tractPollingIoProcessor.java:602)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeSession
        s(AbstractPollingIoProcessor.java:562)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$800(Ab
        stractPollingIoProcessor.java:68)
        at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run
        (AbstractPollingIoProcessor.java:1149)
        at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnabl
        e.java:64)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
        utor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
        .java:907)
        at java.lang.Thread.run(Thread.java:619)

        Show
        Amod Kadam added a comment - The following is the exception trace observed at times (NOT ALWAYS) ERROR [org.apache.directory.server.ldap.replication.consumer.Replicat ionConsumerImpl] - ERR_278 More than one value has been provided for the single- valued attribute: ads-repllastsentcsn org.apache.directory.shared.ldap.model.exception.LdapInvalidAttributeValueExcept ion: ERR_278 More than one value has been provided for the single-valued attribu te: ads-repllastsentcsn at org.apache.directory.server.core.schema.SchemaInterceptor.assertNumbe rOfAttributeValuesValid(SchemaInterceptor.java:1629) at org.apache.directory.server.core.schema.SchemaInterceptor.assertNumbe rOfAttributeValuesValid(SchemaInterceptor.java:1617) at org.apache.directory.server.core.schema.SchemaInterceptor.check(Schem aInterceptor.java:1144) at org.apache.directory.server.core.schema.SchemaInterceptor.checkModify Entry(SchemaInterceptor.java:982) at org.apache.directory.server.core.schema.SchemaInterceptor.modify(Sche maInterceptor.java:1390) at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next (BaseInterceptor.java:599) at org.apache.directory.server.core.hash.PasswordHashingInterceptor.modi fy(PasswordHashingInterceptor.java:113) at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next (BaseInterceptor.java:599) at org.apache.directory.server.core.exception.ExceptionInterceptor.modif y(ExceptionInterceptor.java:298) at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next (BaseInterceptor.java:599) at org.apache.directory.server.core.authz.DefaultAuthorizationIntercepto r.modify(DefaultAuthorizationInterceptor.java:278) at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next (BaseInterceptor.java:599) at org.apache.directory.server.core.authz.AciAuthorizationInterceptor.mo dify(AciAuthorizationInterceptor.java:846) at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next (BaseInterceptor.java:599) at org.apache.directory.server.core.referral.ReferralInterceptor.modify( ReferralInterceptor.java:309) at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next (BaseInterceptor.java:599) at org.apache.directory.server.core.authn.AuthenticationInterceptor.modi fy(AuthenticationInterceptor.java:1050) at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next (BaseInterceptor.java:599) at org.apache.directory.server.core.normalization.NormalizationIntercept or.modify(NormalizationInterceptor.java:248) at org.apache.directory.server.core.DefaultOperationManager.modify(Defau ltOperationManager.java:660) at org.apache.directory.server.core.shared.DefaultCoreSession.modify(Def aultCoreSession.java:590) at org.apache.directory.server.core.shared.DefaultCoreSession.modify(Def aultCoreSession.java:564) at org.apache.directory.server.ldap.replication.consumer.ReplicationCons umerImpl.modify(ReplicationConsumerImpl.java:985) at org.apache.directory.server.ldap.replication.consumer.ReplicationCons umerImpl.handleSearchResult(ReplicationConsumerImpl.java:361) at org.apache.directory.server.ldap.replication.consumer.ReplicationCons umerImpl.doSyncSearch(ReplicationConsumerImpl.java:618) at org.apache.directory.server.ldap.replication.consumer.ReplicationCons umerImpl.startSync(ReplicationConsumerImpl.java:505) at org.apache.directory.server.ldap.replication.consumer.ReplicationCons umerImpl.connectionClosed(ReplicationConsumerImpl.java:484) at org.apache.directory.ldap.client.api.LdapNetworkConnection.sessionClo sed(LdapNetworkConnection.java:3647) at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.sess ionClosed(DefaultIoFilterChain.java:665) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSession Closed(DefaultIoFilterChain.java:395) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(Defa ultIoFilterChain.java:46) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.ses sionClosed(DefaultIoFilterChain.java:781) at org.apache.mina.filter.codec.ProtocolCodecFilter.sessionClosed(Protoc olCodecFilter.java:387) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSession Closed(DefaultIoFilterChain.java:395) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(Defa ultIoFilterChain.java:46) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.ses sionClosed(DefaultIoFilterChain.java:781) at org.apache.mina.core.filterchain.IoFilterAdapter.sessionClosed(IoFilt erAdapter.java:95) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSession Closed(DefaultIoFilterChain.java:395) at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireSessionClos ed(DefaultIoFilterChain.java:388) at org.apache.mina.core.service.IoServiceListenerSupport.fireSessionDest royed(IoServiceListenerSupport.java:244) at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeNow(Abs tractPollingIoProcessor.java:602) at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeSession s(AbstractPollingIoProcessor.java:562) at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$800(Ab stractPollingIoProcessor.java:68) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run (AbstractPollingIoProcessor.java:1149) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnabl e.java:64) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec utor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:907) at java.lang.Thread.run(Thread.java:619)
        Hide
        Kiran Ayyagari added a comment -

        I think you are trying to replicate ou=system partition, there is one branch(ou=consumers,ou=system) under ou=system that keeps details about the replication clients
        that are connected which should ideally be bypassed but is not in reality.
        One workaround is to move all your data to a new partition and configure replication for that partition.

        Show
        Kiran Ayyagari added a comment - I think you are trying to replicate ou=system partition, there is one branch(ou=consumers,ou=system) under ou=system that keeps details about the replication clients that are connected which should ideally be bypassed but is not in reality. One workaround is to move all your data to a new partition and configure replication for that partition.
        Hide
        Amod Kadam added a comment -

        Thanks for your response.

        1) I have created custom partition in MASTER (Virtual Machine) and SLAVE both running on two different machines on a network.
        2) Set the replication for custom partition in SLAVE but data in the custom partition does not get replicated. Irrespective of what you set in 'ads-searchbasedn' on the SLAVE ApacheDS always replicates data from ou=users,ou=system.

        Here is the configuration on the SLAVE side.

        version: 1

        dn: ads-replconsumerid=10,ou=replConsumers,ads-serverId=ldapServer,ou=servers,ads-directoryServiceId=default,ou=config
        objectclass: ads-replConsumer
        objectclass: ads-base
        objectclass: top
        ads-replaliasderefmode: never
        ads-replattributes: *
        ads-replconsumerid: 10
        ads-replprovhostname: 192.168.2.23
        ads-replprovport: 10389
        ads-replrefreshinterval: 6000
        ads-replrefreshnpersist: TRUE
        ads-replsearchfilter: (objectClass=*)
        ads-replsearchscope: sub
        ads-replsearchsizelimit: 0
        ads-replsearchtimeout: 0
        ads-repluserdn: uid=admin,ou=system
        ads-repluserpassword:: c2VjcmV0
        ads-searchbasedn: dc=mypartition,dc=com
        ads-enabled: TRUE
        ads-replstrictcertvalidation: FALSE
        ads-replusetls: FALSE

        3) Here is the configuration for the Custom Partition

        version: 1

        dn: dc=mypartition,dc=com
        objectClass: extensibleObject
        objectClass: organizationalUnit
        objectClass: top
        ou: mypartition
        dc: mypartition

        dn: cn=amod,dc=mypartition,dc=com
        objectClass: person
        objectClass: top
        cn: amod
        sn: kadam_update_2

        Is there something missing from configuration part ?

        4) I can see the branch (ou=consumers,ou=system) on both MASTER as well as SLAVE . How does it work ?

        The following are the entries on MASTER first followed by SLAVE. Why does both have 'ads-searchbasedn: ou=system' ? Why both entries are same ?

        Entry on MASTER

        =================================================
        version: 1

        dn: ads-dsReplicaId=1,ou=consumers,ou=system
        objectclass: ads-base
        objectclass: ads-replEventLog
        objectclass: top
        ads-dsreplicaid: 1
        ads-replaliasderefmode: never
        ads-replrefreshnpersist: true
        ads-replsearchfilter: (objectClass=*)
        ads-replsearchscope: sub
        ads-searchbasedn: ou=system

        =================================================

        Entry on SLAVE
        =================================================
        version: 1

        dn: ads-dsReplicaId=1,ou=consumers,ou=system
        objectclass: ads-base
        objectclass: ads-replEventLog
        objectclass: top
        ads-dsreplicaid: 1
        ads-replaliasderefmode: never
        ads-replrefreshnpersist: true
        ads-replsearchfilter: (objectClass=*)
        ads-replsearchscope: sub
        ads-searchbasedn: ou=system

        =================================================

        Show
        Amod Kadam added a comment - Thanks for your response. 1) I have created custom partition in MASTER (Virtual Machine) and SLAVE both running on two different machines on a network. 2) Set the replication for custom partition in SLAVE but data in the custom partition does not get replicated. Irrespective of what you set in 'ads-searchbasedn' on the SLAVE ApacheDS always replicates data from ou=users,ou=system. Here is the configuration on the SLAVE side. version: 1 dn: ads-replconsumerid=10,ou=replConsumers,ads-serverId=ldapServer,ou=servers,ads-directoryServiceId=default,ou=config objectclass: ads-replConsumer objectclass: ads-base objectclass: top ads-replaliasderefmode: never ads-replattributes: * ads-replconsumerid: 10 ads-replprovhostname: 192.168.2.23 ads-replprovport: 10389 ads-replrefreshinterval: 6000 ads-replrefreshnpersist: TRUE ads-replsearchfilter: (objectClass=*) ads-replsearchscope: sub ads-replsearchsizelimit: 0 ads-replsearchtimeout: 0 ads-repluserdn: uid=admin,ou=system ads-repluserpassword:: c2VjcmV0 ads-searchbasedn: dc=mypartition,dc=com ads-enabled: TRUE ads-replstrictcertvalidation: FALSE ads-replusetls: FALSE 3) Here is the configuration for the Custom Partition version: 1 dn: dc=mypartition,dc=com objectClass: extensibleObject objectClass: organizationalUnit objectClass: top ou: mypartition dc: mypartition dn: cn=amod,dc=mypartition,dc=com objectClass: person objectClass: top cn: amod sn: kadam_update_2 Is there something missing from configuration part ? 4) I can see the branch (ou=consumers,ou=system) on both MASTER as well as SLAVE . How does it work ? The following are the entries on MASTER first followed by SLAVE. Why does both have 'ads-searchbasedn: ou=system' ? Why both entries are same ? Entry on MASTER ================================================= version: 1 dn: ads-dsReplicaId=1,ou=consumers,ou=system objectclass: ads-base objectclass: ads-replEventLog objectclass: top ads-dsreplicaid: 1 ads-replaliasderefmode: never ads-replrefreshnpersist: true ads-replsearchfilter: (objectClass=*) ads-replsearchscope: sub ads-searchbasedn: ou=system ================================================= Entry on SLAVE ================================================= version: 1 dn: ads-dsReplicaId=1,ou=consumers,ou=system objectclass: ads-base objectclass: ads-replEventLog objectclass: top ads-dsreplicaid: 1 ads-replaliasderefmode: never ads-replrefreshnpersist: true ads-replsearchfilter: (objectClass=*) ads-replsearchscope: sub ads-searchbasedn: ou=system =================================================
        Hide
        Kiran Ayyagari added a comment -

        Can you try with the latest build, I have committed a lot of fixes/improvements and support for MMR too. Please report any issues you encounter.

        Show
        Kiran Ayyagari added a comment - Can you try with the latest build, I have committed a lot of fixes/improvements and support for MMR too. Please report any issues you encounter.
        Hide
        Pierre-Arnaud Marcelot added a comment -

        It should be fixed now.

        Show
        Pierre-Arnaud Marcelot added a comment - It should be fixed now.

          People

          • Assignee:
            Kiran Ayyagari
            Reporter:
            Amod Kadam
          • Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development