[ 
https://issues.apache.org/jira/browse/DIRSERVER-2047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14319805#comment-14319805
 ] 

linzhao commented on DIRSERVER-2047:
------------------------------------

My code change from your thought:
    public TupleCursor<K, V> browse( K key, ReadTransaction<K, V> transaction, 
ParentPos<K, V>[] stack, int depth )
        throws IOException
    {
        int pos = findPos( key );

        if ( pos < 0 )
        {
            pos = -pos;
        }

        // We first stack the current page
        stack[depth++] = new ParentPos<K, V>( this, pos );

        Page<K, V> page = children[pos].getValue();

        TupleCursor<K, V> oldTupleCursor = page.browse( key, transaction, 
stack, depth );
        TupleCursor<K, V> tupleCursor = oldTupleCursor;
        List<Integer> integers = new ArrayList<Integer>();
        integers.add(Integer.valueOf(pos));
        while (!tupleCursor.hasNext())
        {
                pos = findPos(integers, key);
                if (pos == keys.length)
                {
                        break;
                }
                stack[depth] = new ParentPos<K, V>( this, pos );
                page = children[pos].getValue();
                tupleCursor = page.browse( key, transaction, stack, depth );
        }
        return tupleCursor;
    }
    
    public int findPos(List<Integer> integers, K key)
    {
        for (int i = 0;i < keys.length;i++)
        {
                if (compare( keys[i].getKey(), key ) == 0 && 
!integers.contains(Integer.valueOf(i)))
                {
                        integers.add(Integer.valueOf(i));
                        return i;
                }
        }
        return keys.length;
    }

Please help to review it. Thanks.

> Some data can be lost when using ldapadd command to insert data into apacheds
> -----------------------------------------------------------------------------
>
>                 Key: DIRSERVER-2047
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-2047
>             Project: Directory ApacheDS
>          Issue Type: Bug
>          Components: ldap
>    Affects Versions: 2.0.0-M19
>         Environment: centOS 6.5 with openldap and apacheds installed
>            Reporter: linzhao
>            Priority: Blocker
>              Labels: LDAP
>             Fix For: 2.0.0-M20
>
>         Attachments: data.ldif, ordered-data.ldif, site.ldif, site_new.ldif, 
> site_topology_schema.ldif, supercluster_partition.ldif, test.jpg
>
>
> In our system, we need to do data backup and restore for apacheds. For now, 
> we use the ldapsearch and ldapadd command to do BR function. We use 
> ldapsearch to backup apacheds data to be a ldif file and use ldapadd to 
> restore the data. But when the ldif is a little big, I always found that the 
> data can't be restored successfully, but the ladpadd command showed that the 
> data can be added successfully. No exceptions for ldapadd command. But the 
> restored data didn't exist in the node. This bug only happened when the ldif 
> file is a little big. I mean if the data entry greater than 500 entries. But 
> the node for backup and restore is using mavibot partition. Because I found 
> so many problems for jdbm. So I change it to mavibot partition. Another 
> question is that do you know is there some good way to do the data backup and 
> restore for apacheds?
> May be my mavibot partition has some problems, so someone can tell me how to 
> create a mavibot partition in APACHEDS? Because the mavibot parttion I 
> created can't be viewed when click the "Open Configuration" in apacheds 
> studio. Also I used unboundid JDK to insert many entries apacheds and the 
> same problem happened. So someone can tell me how to config the mavibot 
> partition on APACHEDS? That's may be very helpful.
> Below is the exceptions from apacheds when problems happened:
> [16:21:41] INFO [org.apache.directory.server.ldap.LdapServer] - Ldap service 
> stopped.
> [16:21:41] WARN 
> [org.apache.directory.server.core.shared.partition.DefaultPartitionNexus] - 
> Failed to flush partition data out.
> org.apache.directory.api.ldap.model.exception.LdapOperationErrorException
> at 
> org.apache.directory.server.core.partition.impl.btree.AbstractBTreePartition.saveContextCsn(AbstractBTreePartition.java:3364)
> at 
> org.apache.directory.server.core.shared.partition.DefaultPartitionNexus.sync(DefaultPartitionNexus.java:319)
> at 
> org.apache.directory.server.core.DefaultDirectoryService.shutdown(DefaultDirectoryService.java:1283)
> at org.apache.directory.server.ApacheDsService.stop(ApacheDsService.java:600)
> at 
> org.apache.directory.server.wrapper.ApacheDsTanukiWrapper.stop(ApacheDsTanukiWrapper.java:97)
> at org.tanukisoftware.wrapper.WrapperManager$13.run(WrapperManager.java:3134)
> Caused by: java.lang.NullPointerException
> at 
> org.apache.directory.server.core.partition.impl.btree.AbstractBTreePartition.saveContextCsn(AbstractBTreePartition.java:3350)
> ... 5 more
> [16:21:41] ERROR [org.apache.directory.server.wrapper.ApacheDsTanukiWrapper] 
> - Failed to stop the service.
> org.apache.directory.api.util.exception.MultiException: ERR_265 Grouping many 
> exceptions on root nexus sync()
> at 
> org.apache.directory.server.core.shared.partition.DefaultPartitionNexus.sync(DefaultPartitionNexus.java:328)
> at 
> org.apache.directory.server.core.DefaultDirectoryService.shutdown(DefaultDirectoryService.java:1283)
> at org.apache.directory.server.ApacheDsService.stop(ApacheDsService.java:600)
> at 
> org.apache.directory.server.wrapper.ApacheDsTanukiWrapper.stop(ApacheDsTanukiWrapper.java:97)
> at org.tanukisoftware.wrapper.WrapperManager$13.run(WrapperManager.java:3134)
> Nested exceptions to follow:
> INFO | jvm 1 | 2015/02/02 17:11:06 | [17:11:06] WARN 
> [org.apache.directory.server.ldap.LdapProtocolHandler] - Unexpected exception 
> forcing session to close: sending disconnect notice to client.
> INFO | jvm 1 | 2015/02/02 17:11:06 | java.io.IOException: Connection reset by 
> peer
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> sun.nio.ch.FileDispatcherImpl.read0(Native Method)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> sun.nio.ch.IOUtil.read(IOUtil.java:197)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:311)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:45)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:694)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1121)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> INFO | jvm 1 | 2015/02/02 17:11:06 | at java.lang.Thread.run(Thread.java:745)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to