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

Emmanuel Lecharny commented on DIRSERVER-1556:
----------------------------------------------

After some moe investigation, there is only one reason for such a strange 
behavior : that the entry being returned is modified while being encoded. Let 
me explain :
when we build the list of entries to be returned, we grab them one by one from 
the backend storage and send them one by one to the client. 
During the send, we process the entry to first compute the length of the PDU 
that will be transmitted, then we transform the entry to a byte[]. 
*if* the entry is being modified after the length of the byte[] has been 
computed but before the byte[] itself is generated, then the error message 
(PDU-buffer size is too small) might be generated.

This is supposed not to happen, and one reason why it could have happened in 
1.5.7 is that the entry we read from the backend was not correctly and entirely 
copied 
(we don't manipulate the entry itself, we copy it before generating the byte[], 
because this entry is likely to be found in a cache, and used by another 
thread). Once this copy has been
done, there is only one thread that can use it.

I'll check if the entry is correctly copied, but we may have modified this 
since 1.5.7. Anyway, this is an critical issue that need to be checked.

> Error message: ERR_00004 The PDU buffer size is too small !
> -----------------------------------------------------------
>
>                 Key: DIRSERVER-1556
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-1556
>             Project: Directory ApacheDS
>          Issue Type: Bug
>    Affects Versions: 1.5.7
>         Environment: Windows Server 2003 SP2 / Sun JRE 6 update 21
>            Reporter: Ewald Wasscher
>            Priority: Critical
>             Fix For: 2.0.0-RC1
>
>
> We're currently testing Apache Directory Server (ADS) in a custom environment 
> for a customer of ours. In this environment ADS is used to store certificates 
> and certificate revocation lists. At first everything seemed to be working 
> fine, but we encounter an error that seems to randomly occur every now. When 
> adding an object, viewing an object in Directory Studio or adding attributes 
> (the certificate) to an existing object this fails with the following message 
> in apacheds-rolling.log: ERR_00004 The PDU buffer size is too small !. After 
> encountering this error I twice raised the max PDU buffer size in server.xml 
> to:
>  
> maxPDUSize="40000000"
>  
> And restarted the server. Unfortunately the error still occurs every now and 
> then. The issue occurs seemingly randomly, independent of the accessed object 
> or the LDAP client that is used. If ADS is restarted and Directory Studio 
> reconnects the same object can be viewed normally.
> I'd appreciate if someone could explain why this occurs and, if possible, how 
> this can be fixed. A log fragment is below. The company name as it occurs in 
> the log file has been modified.
> Log fragment:
> [16:58:09] ERROR [org.apache.directory.shared.ldap.codec.LdapEncoder] - 
> ERR_04065 Ldap encoder failed to encode object:     Search Result Entry
>         entry
> ServerEntry
>     dn[n]: cn=Test 01 User+givenName=Test 
> [email protected]+sn=user,organizationalUnitName=Test,o=Test 
> Bedrijf, c=NL
>     objectClass: organizationalPerson
>     objectClass: person
>     objectClass: inetOrgPerson
>     objectClass: top
>     sn: User
>     mail: [email protected]
>     givenName: Test 01
>     cn: Test 01 User
>     x500uniqueidentifier: 
> '0011001100111001011001100011010100110011011001100110010001100100001101110011011001100100001100110011001100110111001101000011011000110101001110010110000101100011001100000110011001100011001101000011011100110111011000100011001100110000001110000110000100110111'B
>     businesscategory: Valid
>     userCertificate;binary: '0x30 0x82 0x06 0xD6 0x30 0x82 0x04 0xBE 0xA0 
> 0x03 0x02 0x01 0x02 0x02 0x10 0x39 ...'
> , error : ERR_00004 The PDU buffer size is too small !
> [16:58:09] WARN [org.apache.directory.server.ldap.LdapProtocolHandler] - 
> Unexpected exception forcing session to close: sending disconnect notice to 
> client.
> org.apache.mina.filter.codec.ProtocolEncoderException: 
> org.apache.directory.shared.ldap.message.spi.ProviderException: ERR_04065 
> Ldap encoder failed to encode object:     Search Result Entry
>         entry
> ServerEntry
>     dn[n]: cn=Test 01 User+givenName=Test 
> [email protected]+sn=user,organizationalUnitName=Test,o=Test 
> Bedrijf, c=NL
>     objectClass: organizationalPerson
>     objectClass: person
>     objectClass: inetOrgPerson
>     objectClass: top
>     sn: User
>     mail: [email protected]
>     givenName: Test 01
>     cn: Test 01 User
>     x500uniqueidentifier: 
> '0011001100111001011001100011010100110011011001100110010001100100001101110011011001100100001100110011001100110111001101000011011000110101001110010110000101100011001100000110011001100011001101000011011100110111011000100011001100110000001110000110000100110111'B
>     businesscategory: Valid
>     userCertificate;binary: '0x30 0x82 0x06 0xD6 0x30 0x82 0x04 0xBE 0xA0 
> 0x03 0x02 0x01 0x02 0x02 0x10 0x39 ...'
> , error : ERR_00004 The PDU buffer size is too small !
>       at 
> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:313)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:46)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:805)
>       at 
> org.apache.mina.filter.executor.ExecutorFilter.filterWrite(ExecutorFilter.java:706)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:46)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:805)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:731)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:498)
>       at 
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:428)
>       at 
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:369)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.readResults(SearchHandler.java:334)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.doSimpleSearch(SearchHandler.java:749)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.handleIgnoringReferrals(SearchHandler.java:978)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.handleWithReferrals(SearchHandler.java:1054)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.handleWithReferrals(SearchHandler.java:78)
>       at 
> org.apache.directory.server.ldap.handlers.ReferralAwareRequestHandler.handle(ReferralAwareRequestHandler.java:94)
>       at 
> org.apache.directory.server.ldap.handlers.ReferralAwareRequestHandler.handle(ReferralAwareRequestHandler.java:57)
>       at 
> org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:208)
>       at 
> org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:58)
>       at 
> org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived(DemuxingIoHandler.java:232)
>       at 
> org.apache.directory.server.ldap.LdapProtocolHandler.messageReceived(LdapProtocolHandler.java:193)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:713)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
>       at 
> org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:71)
>       at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
>       at 
> org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.runTask(UnorderedThreadPoolExecutor.java:480)
>       at 
> org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.run(UnorderedThreadPoolExecutor.java:434)
>       at java.lang.Thread.run(Unknown Source)
> Caused by: org.apache.directory.shared.ldap.message.spi.ProviderException: 
> ERR_04065 Ldap encoder failed to encode object:     Search Result Entry
>         entry
> ServerEntry
>     dn[n]: cn=Test 01 User+givenName=Test 
> [email protected]+sn=user,organizationalUnitName=Test,o=Test 
> Bedrijf, c=NL
>     objectClass: organizationalPerson
>     objectClass: person
>     objectClass: inetOrgPerson
>     objectClass: top
>     sn: User
>     mail: [email protected]
>     givenName: Test 01
>     cn: Test 01 User
>     x500uniqueidentifier: 
> '0011001100111001011001100011010100110011011001100110010001100100001101110011011001100100001100110011001100110111001101000011011000110101001110010110000101100011001100000110011001100011001101000011011100110111011000100011001100110000001110000110000100110111'B
>     businesscategory: Valid
>     userCertificate;binary: '0x30 0x82 0x06 0xD6 0x30 0x82 0x04 0xBE 0xA0 
> 0x03 0x02 0x01 0x02 0x02 0x10 0x39 ...'
> , error : ERR_00004 The PDU buffer size is too small !
>       at 
> org.apache.directory.shared.ldap.codec.LdapEncoder.encodeBlocking(LdapEncoder.java:139)
>       at 
> org.apache.directory.shared.ldap.codec.LdapEncoder.encode(LdapEncoder.java:200)
>       at 
> org.apache.directory.shared.ldap.message.MessageEncoder.encode(MessageEncoder.java:125)
>       at 
> org.apache.directory.shared.asn1.codec.Asn1CodecEncoder.encode(Asn1CodecEncoder.java:58)
>       at 
> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:298)
>       ... 32 more
> [16:58:09] WARN [org.apache.directory.shared.asn1.ber.Asn1Decoder] - The PDU 
> has been fully decoded but there are still bytes in the buffer.
> [16:58:09] WARN [org.apache.directory.server.ldap.LdapProtocolHandler] - Null 
> LdapSession given to cleanUpSession.
> [16:58:09] ERROR [org.apache.directory.shared.ldap.codec.LdapEncoder] - 
> ERR_04065 Ldap encoder failed to encode object:     Search Result Entry
>         entry
> ServerEntry
>     dn[n]: cn=Test 01 User+givenName=Test 
> [email protected]+sn=user,organizationalUnitName=Test,o=Test 
> Bedrijf, c=NL
>     objectClass: organizationalPerson
>     objectClass: person
>     objectClass: inetOrgPerson
>     objectClass: top
>     sn: User
>     mail: [email protected]
>     givenName: Test 01
>     cn: Test 01 User
>     x500uniqueidentifier: 
> '0011001100111001011001100011010100110011011001100110010001100100001101110011011001100100001100110011001100110111001101000011011000110101001110010110000101100011001100000110011001100011001101000011011100110111011000100011001100110000001110000110000100110111'B
>     businesscategory: Valid
>     userCertificate;binary: '0x30 0x82 0x06 0xD6 0x30 0x82 0x04 0xBE 0xA0 
> 0x03 0x02 0x01 0x02 0x02 0x10 0x39 ...'
> , error : ERR_00004 The PDU buffer size is too small !
> [16:58:09] WARN [org.apache.directory.server.ldap.LdapProtocolHandler] - 
> Unexpected exception forcing session to close: sending disconnect notice to 
> client.
> org.apache.mina.filter.codec.ProtocolEncoderException: 
> org.apache.directory.shared.ldap.message.spi.ProviderException: ERR_04065 
> Ldap encoder failed to encode object:     Search Result Entry
>         entry
> ServerEntry
>     dn[n]: cn=Test 01 User+givenName=Test 
> [email protected]+sn=user,organizationalUnitName=Test,o=Test 
> Bedrijf, c=NL
>     objectClass: organizationalPerson
>     objectClass: person
>     objectClass: inetOrgPerson
>     objectClass: top
>     sn: User
>     mail: [email protected]
>     givenName: Test 01
>     cn: Test 01 User
>     x500uniqueidentifier: 
> '0011001100111001011001100011010100110011011001100110010001100100001101110011011001100100001100110011001100110111001101000011011000110101001110010110000101100011001100000110011001100011001101000011011100110111011000100011001100110000001110000110000100110111'B
>     businesscategory: Valid
>     userCertificate;binary: '0x30 0x82 0x06 0xD6 0x30 0x82 0x04 0xBE 0xA0 
> 0x03 0x02 0x01 0x02 0x02 0x10 0x39 ...'
> , error : ERR_00004 The PDU buffer size is too small !
>       at 
> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:313)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:46)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:805)
>       at 
> org.apache.mina.filter.executor.ExecutorFilter.filterWrite(ExecutorFilter.java:706)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:46)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:805)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:731)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:498)
>       at 
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:428)
>       at 
> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:369)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.readResults(SearchHandler.java:334)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.doSimpleSearch(SearchHandler.java:749)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.handleIgnoringReferrals(SearchHandler.java:978)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.handleWithReferrals(SearchHandler.java:1054)
>       at 
> org.apache.directory.server.ldap.handlers.SearchHandler.handleWithReferrals(SearchHandler.java:78)
>       at 
> org.apache.directory.server.ldap.handlers.ReferralAwareRequestHandler.handle(ReferralAwareRequestHandler.java:94)
>       at 
> org.apache.directory.server.ldap.handlers.ReferralAwareRequestHandler.handle(ReferralAwareRequestHandler.java:57)
>       at 
> org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:208)
>       at 
> org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:58)
>       at 
> org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived(DemuxingIoHandler.java:232)
>       at 
> org.apache.directory.server.ldap.LdapProtocolHandler.messageReceived(LdapProtocolHandler.java:193)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:713)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
>       at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
>       at 
> org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:71)
>       at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
>       at 
> org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.runTask(UnorderedThreadPoolExecutor.java:480)
>       at 
> org.apache.mina.filter.executor.UnorderedThreadPoolExecutor$Worker.run(UnorderedThreadPoolExecutor.java:434)
>       at java.lang.Thread.run(Unknown Source)
> Caused by: org.apache.directory.shared.ldap.message.spi.ProviderException: 
> ERR_04065 Ldap encoder failed to encode object:     Search Result Entry
>         entry
> ServerEntry
>     dn[n]: cn=Test 01 User+givenName=Test 
> [email protected]+sn=user,organizationalUnitName=Test,o=Test 
> Bedrijf, c=NL
>     objectClass: organizationalPerson
>     objectClass: person
>     objectClass: inetOrgPerson
>     objectClass: top
>     sn: User
>     mail: [email protected]
>     givenName: Test 01
>     cn: Test 01 User
>     x500uniqueidentifier: 
> '0011001100111001011001100011010100110011011001100110010001100100001101110011011001100100001100110011001100110111001101000011011000110101001110010110000101100011001100000110011001100011001101000011011100110111011000100011001100110000001110000110000100110111'B
>     businesscategory: Valid
>     userCertificate;binary: '0x30 0x82 0x06 0xD6 0x30 0x82 0x04 0xBE 0xA0 
> 0x03 0x02 0x01 0x02 0x02 0x10 0x39 ...'
> , error : ERR_00004 The PDU buffer size is too small !
>       at 
> org.apache.directory.shared.ldap.codec.LdapEncoder.encodeBlocking(LdapEncoder.java:139)
>       at 
> org.apache.directory.shared.ldap.codec.LdapEncoder.encode(LdapEncoder.java:200)
>       at 
> org.apache.directory.shared.ldap.message.MessageEncoder.encode(MessageEncoder.java:125)
>       at 
> org.apache.directory.shared.asn1.codec.Asn1CodecEncoder.encode(Asn1CodecEncoder.java:58)
>       at 
> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:298)
>       ... 32 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to