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?

>                       }
>               } catch (EOFException e) {
>                       long size = l * (dataBlockSize + headerBlockSize);

Attachment: pgpUia0W7Le2H.pgp
Description: PGP signature

_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to