Return-Path: X-Original-To: apmail-incubator-jena-dev-archive@minotaur.apache.org Delivered-To: apmail-incubator-jena-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 71A348DC6 for ; Mon, 8 Aug 2011 22:19:56 +0000 (UTC) Received: (qmail 38580 invoked by uid 500); 8 Aug 2011 22:19:56 -0000 Delivered-To: apmail-incubator-jena-dev-archive@incubator.apache.org Received: (qmail 38555 invoked by uid 500); 8 Aug 2011 22:19:56 -0000 Mailing-List: contact jena-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jena-dev@incubator.apache.org Delivered-To: mailing list jena-dev@incubator.apache.org Received: (qmail 38547 invoked by uid 99); 8 Aug 2011 22:19:55 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Aug 2011 22:19:55 +0000 X-ASF-Spam-Status: No, hits=-0.1 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_MED,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of shelsen@ca.ibm.com designates 32.97.182.139 as permitted sender) Received: from [32.97.182.139] (HELO e9.ny.us.ibm.com) (32.97.182.139) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Aug 2011 22:19:44 +0000 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by e9.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id p78LkGOr011058 for ; Mon, 8 Aug 2011 17:46:16 -0400 Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p78MJLLG245356 for ; Mon, 8 Aug 2011 18:19:21 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p78MJLli009040 for ; Mon, 8 Aug 2011 19:19:21 -0300 Received: from d25ml03.torolab.ibm.com (d25ml03.torolab.ibm.com [9.26.6.104]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p78MJLHH009037 for ; Mon, 8 Aug 2011 19:19:21 -0300 In-Reply-To: References: To: jena-dev@incubator.apache.org Cc: jena-dev@incubator.apache.org MIME-Version: 1.0 Subject: Re: Current ByteBuffers only work for bigEndian systems... X-KeepSent: FBBA3E11:DCD7D32E-852578E6:007A8082; type=4; name=$KeepSent X-Mailer: Lotus Notes Release 8.5.1FP5 SHF29 November 12, 2010 Message-ID: From: Simon Helsen Date: Mon, 8 Aug 2011 18:19:19 -0400 X-MIMETrack: Serialize by Router on D25ML03/25/M/IBM(Release 8.5.1FP5|September 29, 2010) at 08/08/2011 18:19:20, Serialize complete at 08/08/2011 18:19:20 Content-Type: multipart/alternative; boundary="=_alternative 007A9EA9852578E6_=" X-Virus-Checked: Checked by ClamAV on apache.org --=_alternative 007A9EA9852578E6_= Content-Type: text/plain; charset="US-ASCII" this analysis I made below is not correct - I'll move the discussion to the JIRA issue for those interested Simon From: Simon Helsen/Toronto/IBM@IBMCA To: jena-dev@incubator.apache.org Cc: jena-dev@incubator.apache.org Date: 08/08/2011 03:53 PM Subject: Re: Current ByteBuffers only work for bigEndian systems... I created https://issues.apache.org/jira/browse/JENA-91, and I adjusted my comment a bit because it is presumably only an issue if the bytes are used a length markers and read with getInt or other type-getters which use the platform endianness. However, I suggest that the code is checked for other occurrences of the same problem thanks, Simon From: Simon Helsen/Toronto/IBM@IBMCA To: jena-dev@incubator.apache.org Date: 08/08/2011 03:42 PM Subject: Current ByteBuffers only work for bigEndian systems... Andy, others, I tried to debug the OME and check why the bytebuffer is causing my native memory to explode in almost no time. It all seems to happen in this bit of code in com.hp.hpl.jena.tdb.base.objectfile.ObjectFileStorage (lines 243 onwards) // No - it's in the underlying file storage. lengthBuffer.clear() ; int x = file.read(lengthBuffer, loc) ; if ( x != 4 ) throw new FileException("ObjectFile.read("+loc+")["+filesize+ "]["+file.size()+"]: Failed to read the length : got "+x+" bytes") ; int len = lengthBuffer.getInt(0) ; ByteBuffer bb = ByteBuffer.allocate(len) ; My debugger shows that x==4. It also shows the lengthBuffer has the following content: [111, 110, 61, 95], however the value of len=1869495647 , which is rather a lot :-) Obviously, the next statement (ByteBuffer.allocate) causes the OME So, looking into it, lengthBuffer.getInt(0)==1869495647, but lenghtBuffer.get(0)==111, which seems more correct. Then I noticed that the bytebuffer also says bigEndian==true. I am running all of this on Windows 7. which is to the best of my knowledge little endian I think this can only work correctly if these byteBuffers have their order explicilty set to that of the platform. So, somewhere in the code, you'd need to make sure to set lengthBuffer.order(ByteOrder.nativeOrder()) And this probably for all usages of ByteBuffer. That will probably solve the problem on little endian systems such as Windows Any thoughts or should I create a Jira Issue? Simon --=_alternative 007A9EA9852578E6_=--