Return-Path: Delivered-To: apmail-directory-dev-archive@www.apache.org Received: (qmail 59397 invoked from network); 14 Dec 2010 09:35:31 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 14 Dec 2010 09:35:31 -0000 Received: (qmail 56331 invoked by uid 500); 14 Dec 2010 09:35:31 -0000 Delivered-To: apmail-directory-dev-archive@directory.apache.org Received: (qmail 56121 invoked by uid 500); 14 Dec 2010 09:35:28 -0000 Mailing-List: contact dev-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Apache Directory Developers List" Delivered-To: mailing list dev@directory.apache.org Received: (qmail 56105 invoked by uid 99); 14 Dec 2010 09:35:27 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Dec 2010 09:35:27 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.22] (HELO thor.apache.org) (140.211.11.22) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Dec 2010 09:35:23 +0000 Received: from thor (localhost [127.0.0.1]) by thor.apache.org (8.13.8+Sun/8.13.8) with ESMTP id oBE9Z1mb015406 for ; Tue, 14 Dec 2010 09:35:02 GMT Message-ID: <3753121.110111292319301871.JavaMail.jira@thor> Date: Tue, 14 Dec 2010 04:35:01 -0500 (EST) From: "Emmanuel Lecharny (JIRA)" To: dev@directory.apache.org Subject: [jira] Commented: (DIRSERVER-1556) Error message: ERR_00004 The PDU buffer size is too small ! MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ 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 01+mail=test01user@test.lan+sn=User,organizationalUnitName=Test,o=Test Bedrijf, c=NL > objectClass: organizationalPerson > objectClass: person > objectClass: inetOrgPerson > objectClass: top > sn: User > mail: test01user@test.lan > 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 01+mail=test01user@test.lan+sn=User,organizationalUnitName=Test,o=Test Bedrijf, c=NL > objectClass: organizationalPerson > objectClass: person > objectClass: inetOrgPerson > objectClass: top > sn: User > mail: test01user@test.lan > 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 01+mail=test01user@test.lan+sn=User,organizationalUnitName=Test,o=Test Bedrijf, c=NL > objectClass: organizationalPerson > objectClass: person > objectClass: inetOrgPerson > objectClass: top > sn: User > mail: test01user@test.lan > 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 01+mail=test01user@test.lan+sn=User,organizationalUnitName=Test,o=Test Bedrijf, c=NL > objectClass: organizationalPerson > objectClass: person > objectClass: inetOrgPerson > objectClass: top > sn: User > mail: test01user@test.lan > 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 01+mail=test01user@test.lan+sn=User,organizationalUnitName=Test,o=Test Bedrijf, c=NL > objectClass: organizationalPerson > objectClass: person > objectClass: inetOrgPerson > objectClass: top > sn: User > mail: test01user@test.lan > 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 01+mail=test01user@test.lan+sn=User,organizationalUnitName=Test,o=Test Bedrijf, c=NL > objectClass: organizationalPerson > objectClass: person > objectClass: inetOrgPerson > objectClass: top > sn: User > mail: test01user@test.lan > 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.