On Tue, May 20, 2008 at 2:49 AM, Matthew Toseland
<[EMAIL PROTECTED]> wrote:
> On Friday 16 May 2008 16:15, [EMAIL PROTECTED] wrote:
>> Author: j16sdiz
>> Date: 2008-05-16 15:15:24 +0000 (Fri, 16 May 2008)
>> New Revision: 19954
>>
>> Modified:
>>    trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
>> Log:
>> BDBFS: reconstruct() - read data only when needed
>>
>>
>> Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
>> ===================================================================
>> --- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java       
>> 2008-05-16
> 02:45:51 UTC (rev 19953)
>> +++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java       
>> 2008-05-16
> 15:15:24 UTC (rev 19954)
>> @@ -987,11 +987,9 @@
>>                                       System.err.println("File pointer is 
>> "+storeRAF.getFilePointer()+" but
> should be "+((headerBlockSize + dataBlockSize)));
>>                                       
>> System.exit(NodeInitException.EXIT_STORE_RECONSTRUCT);
>>                               }
>> -                             // FIXME only do the read if we need the data, 
>> and if we do, do a seek
> first.
>> -                             // Post 0.7.0; only a useful optimisation if 
>> we have a good .keys file,
> but should
>> -                             // save some I/O when we do.
>>                               storeRAF.readFully(header);
>> -                             storeRAF.readFully(data);
>
> Why read the header?
>
>> +                             boolean dataRead = false;
>> +                             try {
>>                               if(lruRAFLength > (l+1)*8) {
>>                                       try {
>>                                               lruVal = lruRAF.readLong();
>> @@ -1030,6 +1028,10 @@
>>                                                       routingkey = newkey;
>>                                               }
>>                                       }
>> +                                     if (!dataRead) {
>> +                                             storeRAF.readFully(data);
>> +                                             dataRead = true;
>> +                                     }
>
> Why not seek here?
>
>>                                       if (routingkey == null && 
>> !isAllNull(header) && !isAllNull(data)) {
>>                                               keyFromData = true;
>>                                               try {
>> @@ -1061,6 +1063,10 @@
>>                                               if(!keyFromData) {
>>                                                       byte[] oldRoutingkey = 
>> routingkey;
>>                                                       try {
>> +                                     if (!dataRead) {
>> +                                             storeRAF.readFully(data);
>> +                                             dataRead = true;
>> +                                     }
>
> Likewise.
>
>>                                                               StorableBlock 
>> block = callback.construct(data, header, null,
> keyBuf);
>>                                                               routingkey = 
>> block.getRoutingKey();
>>                                                               
>> if(Arrays.equals(oldRoutingkey, routingkey)) {
>> @@ -1115,6 +1121,11 @@
>>                               } finally {
>>                                       if(t != null) t.abort();
>>                               }
>> +                             } finally {
>> +                                     if (!dataRead) {
>> +                                             
>> storeRAF.skipBytes(data.length);
>> +                                     }
>> +                             }
>
> An interesting solution to not having to seek ... but surely it would be
> better to seek when needed, and not read the header?
>

fixed in r19963

>>                       }
>>               } catch (EOFException e) {
>>                       long size = l * (dataBlockSize + headerBlockSize);
>
_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to