You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "jack yan (JIRA)" <ji...@apache.org> on 2015/03/05 10:10:38 UTC

[jira] [Comment Edited] (DIRSERVER-2052) Sometimes apacheds will throw ArrayIndexOfBoundsException

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

jack yan edited comment on DIRSERVER-2052 at 3/5/15 9:10 AM:
-------------------------------------------------------------

hi Emmanuel Lecharny

when encapsulation of ByteBuffer with pageIOs array, there is a lack of condition or not , for example. 1186 line in RecordManager.java (readBytes method), finished modification and done testing many times , this issue no reproduce, as following source code

before changing of source code
 while ( length > 0 )
            {
                {color:red}if ( length <= remaining ){color}
                {
                //TO-DO
                }
                //TO-DO
            }

after changing of source code
 while ( length > 0 )
            {
                {color:red}if ( length <= remaining || pageNb + 2 > pageIos.length){color}
                {
                //TO-DO
                }
                //TO-DO
            }

changing source code to add "pageNb + 2 > pageIos.length".  is it correct?


was (Author: jackyan):
when encapsulation of ByteBuffer with pageIOs array, there is a lack of condition or not , for example. 1186 line in RecordManager.java (readBytes method), finished modification and done testing many times , this issue no reproduce, as following source code

before changing of source code
 while ( length > 0 )
            {
                {color:red}if ( length <= remaining ){color}
                {
                //TO-DO
                }
                //TO-DO
            }

after changing of source code
 while ( length > 0 )
            {
                {color:red}if ( length <= remaining || pageNb + 2 > pageIos.length){color}
                {
                //TO-DO
                }
                //TO-DO
            }

changing source code to add "pageNb + 2 > pageIos.length".  is it correct?

> Sometimes apacheds will throw ArrayIndexOfBoundsException
> ---------------------------------------------------------
>
>                 Key: DIRSERVER-2052
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-2052
>             Project: Directory ApacheDS
>          Issue Type: Bug
>          Components: ldap
>    Affects Versions: 2.0.0-M19
>         Environment: centOS 6.5 with apacheds M19 installed
>            Reporter: linzhao
>            Priority: Blocker
>
> When using multi-thread to add,edit,delete and query apacheds, sometimes it will throw ArrayIndexOfBoundsException. Exception list below:
> [06:25:40] ERROR [org.apache.directory.server.core.partition.impl.btree.mavibot.MavibotTable] - ERR_133 Exception while removing 6c7dd69c-0f53-4b49-8ce6-be84b165938b from index 1.3.6.1.4.1.18060.0.4.1.2.50_reverse
> java.lang.ArrayIndexOutOfBoundsException: 6
>         at org.apache.directory.mavibot.btree.RecordManager.readBytes(RecordManager.java:1209)
>         at org.apache.directory.mavibot.btree.RecordManager.readPage(RecordManager.java:1021)
>         at org.apache.directory.mavibot.btree.RecordManager.deserialize(RecordManager.java:989)
>         at org.apache.directory.mavibot.btree.PersistedPageHolder.fetchElement(PersistedPageHolder.java:133)
>         at org.apache.directory.mavibot.btree.PersistedPageHolder.getValue(PersistedPageHolder.java:113)
>         at org.apache.directory.mavibot.btree.AbstractPage.getReference(AbstractPage.java:155)
>         at org.apache.directory.mavibot.btree.RecordManager.serializeNodeValue(RecordManager.java:1708)
>         at org.apache.directory.mavibot.btree.RecordManager.serializePage(RecordManager.java:1653)
>         at org.apache.directory.mavibot.btree.RecordManager.writePage(RecordManager.java:2808)
>         at org.apache.directory.mavibot.btree.PersistedNode.createHolder(PersistedNode.java:906)
>         at org.apache.directory.mavibot.btree.PersistedNode.handleRemoveResult(PersistedNode.java:207)
>         at org.apache.directory.mavibot.btree.PersistedNode.delete(PersistedNode.java:607)
>         at org.apache.directory.mavibot.btree.AbstractPage.delete(AbstractPage.java:217)
>         at org.apache.directory.mavibot.btree.PersistedBTree.processDelete(PersistedBTree.java:332)
>         at org.apache.directory.mavibot.btree.PersistedBTree.delete(PersistedBTree.java:292)
>         at org.apache.directory.mavibot.btree.AbstractBTree.delete(AbstractBTree.java:390)
>         at org.apache.directory.mavibot.btree.AbstractBTree.delete(AbstractBTree.java:324)
>         at org.apache.directory.mavibot.btree.PersistedBTree.delete(PersistedBTree.java:43)
>         at org.apache.directory.server.core.partition.impl.btree.mavibot.MavibotTable.remove(MavibotTable.java:389)
>         at org.apache.directory.server.core.partition.impl.btree.mavibot.MavibotIndex.drop(MavibotIndex.java:391)
>         at org.apache.directory.server.core.partition.impl.btree.mavibot.MavibotIndex.drop(MavibotIndex.java:58)
>         at org.apache.directory.server.core.partition.impl.btree.AbstractBTreePartition.delete(AbstractBTreePartition.java:1078)
>         at org.apache.directory.server.core.partition.impl.btree.AbstractBTreePartition.delete(AbstractBTreePartition.java:917)
>         at org.apache.directory.server.core.shared.partition.DefaultPartitionNexus.delete(DefaultPartitionNexus.java:405)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor$1.delete(BaseInterceptor.java:192)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.journal.JournalInterceptor.delete(JournalInterceptor.java:181)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.trigger.TriggerInterceptor.delete(TriggerInterceptor.java:336)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.event.EventInterceptor.delete(EventInterceptor.java:250)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.subtree.SubentryInterceptor.delete(SubentryInterceptor.java:1058)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.operational.OperationalAttributeInterceptor.delete(OperationalAttributeInterceptor.java:462)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.exception.ExceptionInterceptor.delete(ExceptionInterceptor.java:207)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.admin.AdministrativePointInterceptor.delete(AdministrativePointInterceptor.java:1261)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.authz.DefaultAuthorizationInterceptor.delete(DefaultAuthorizationInterceptor.java:225)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.authz.AciAuthorizationInterceptor.delete(AciAuthorizationInterceptor.java:663)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.referral.ReferralInterceptor.delete(ReferralInterceptor.java:288)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.authn.AuthenticationInterceptor.delete(AuthenticationInterceptor.java:754)
>         at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(BaseInterceptor.java:490)
>         at org.apache.directory.server.core.normalization.NormalizationInterceptor.delete(NormalizationInterceptor.java:174)
>         at org.apache.directory.server.core.DefaultOperationManager.delete(DefaultOperationManager.java:641)
>         at org.apache.directory.server.core.shared.DefaultCoreSession.delete(DefaultCoreSession.java:924)
>         at org.apache.directory.server.core.shared.DefaultCoreSession.delete(DefaultCoreSession.java:907)
>         at org.apache.directory.server.ldap.handlers.request.DeleteRequestHandler.handle(DeleteRequestHandler.java:55)
>         at org.apache.directory.server.ldap.handlers.request.DeleteRequestHandler.handle(DeleteRequestHandler.java:39)
>         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)
> [06:36:54] ERROR [org.apache.directory.server.ldap.handlers.LdapRequestHandler] - ERR_732 Cannot process a Request while binding



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