Changeset 208db9a


Ignore:
Timestamp:
Feb 8, 2011 12:45:23 AM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
ba9c701
Parents:
7f10a67
Message:

initial blockfile mods

Location:
core/java/src/net/metanotion
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/metanotion/io/block/BlockFile.java

    r7f10a67 r208db9a  
    4545
    4646import net.metanotion.io.block.index.BSkipList;
     47import net.metanotion.util.skiplist.SkipList;
    4748
    4849class CorruptFileException extends IOException { }
     
    6061        private int freeListStart = 0;
    6162        private short mounted = 0;
    62         public short spanSize = 127;
     63        public short spanSize = 16;
    6364
    6465        private BSkipList metaIndex = null;
     
    247248
    248249        public BSkipList getIndex(String name, Serializer key, Serializer val) throws IOException {
     250                // added I2P
     251                BSkipList bsl = (BSkipList) openIndices.get(name);
     252                if (bsl != null)
     253                        return bsl;
     254
    249255                Integer page = (Integer) metaIndex.get(name);
    250256                if (page == null) { return null; }
    251                 BSkipList bsl = new BSkipList(spanSize, this, page.intValue(), key, val);
     257                bsl = new BSkipList(spanSize, this, page.intValue(), key, val, true);
    252258                openIndices.put(name, bsl);
    253259                return bsl;
     
    259265                metaIndex.put(name, new Integer(page));
    260266                BSkipList.init(this, page, spanSize);
    261                 BSkipList bsl = new BSkipList(spanSize, this, page, key, val);
     267                BSkipList bsl = new BSkipList(spanSize, this, page, key, val, true);
    262268                openIndices.put(name, bsl);
    263269                return bsl;
     
    268274                if (page == null) { return; }
    269275                NullBytes nb = new NullBytes();
    270                 BSkipList bsl = new BSkipList(spanSize, this, page.intValue(), nb, nb);
     276                BSkipList bsl = new BSkipList(spanSize, this, page.intValue(), nb, nb, true);
    271277                bsl.delete();
    272278        }
    273279
     280        /**
     281         *  Added I2P
     282         */
     283        public void closeIndex(String name) {
     284                BSkipList bsl = (BSkipList) openIndices.remove(name);
     285                if (bsl != null)
     286                        bsl.flush();
     287        }
     288
     289        /**
     290         *  Note (I2P)
     291         *  Does NOT close the RAF / RAI.
     292         */
    274293        public void close() throws IOException {
     294                // added I2P
     295                if (metaIndex == null)
     296                        return;
     297
    275298                metaIndex.close();
    276299                metaIndex = null;
  • core/java/src/net/metanotion/io/block/index/BSkipList.java

    r7f10a67 r208db9a  
    4848
    4949        protected BSkipList() { }
     50
    5051        public BSkipList(int spanSize, BlockFile bf, int skipPage, Serializer key, Serializer val) throws IOException {
     52                this(spanSize, bf, skipPage, key, val, false);
     53        }
     54
     55        public BSkipList(int spanSize, BlockFile bf, int skipPage, Serializer key, Serializer val, boolean fileOnly) throws IOException {
    5156                if(spanSize < 1) { throw new Error("Span size too small"); }
    5257
     
    5964                size = bf.file.readInt();
    6065                spans = bf.file.readInt();
    61                 System.out.println(size + " " + spans);
     66                //System.out.println(size + " " + spans);
    6267
    63                 first = new BSkipSpan(bf, this, firstSpanPage, key, val);
     68                if (fileOnly)
     69                        first = new IBSkipSpan(bf, this, firstSpanPage, key, val);
     70                else
     71                        first = new BSkipSpan(bf, this, firstSpanPage, key, val);
    6472                stack = new BSkipLevels(bf, firstLevelPage, this);
    65                 rng = new Random(System.currentTimeMillis());
     73                //rng = new Random(System.currentTimeMillis());
    6674        }
    6775
    6876        public void close() {
    69                 System.out.println("Closing index " + size + " and " + spans);
     77                //System.out.println("Closing index " + size + " and " + spans);
    7078                flush();
    7179                first = null;
  • core/java/src/net/metanotion/io/block/index/BSkipSpan.java

    r7f10a67 r208db9a  
    4848        protected Serializer keySer;
    4949        protected Serializer valSer;
     50
     51        // I2P
     52        protected int spanSize;
    5053
    5154        public static void init(BlockFile bf, int page, int spanSize) throws IOException {
     
    126129
    127130        private static void load(BSkipSpan bss, BlockFile bf, BSkipList bsl, int spanPage, Serializer key, Serializer val) throws IOException {
     131                loadInit(bss, bf, bsl, spanPage, key, val);
     132                loadData(bss, bf, spanPage, key, val);
     133        }
     134
     135        /**
     136         * I2P - first half of load()
     137         * Only read the span headers
     138         */
     139        protected static void loadInit(BSkipSpan bss, BlockFile bf, BSkipList bsl, int spanPage, Serializer key, Serializer val) throws IOException {
    128140                bss.bf = bf;
    129141                bss.page = spanPage;
     
    138150                bss.prevPage = bf.file.readInt();
    139151                bss.nextPage = bf.file.readInt();
    140                 int sz = bf.file.readShort();
     152                bss.spanSize = bf.file.readShort();
    141153                bss.nKeys = bf.file.readShort();
    142 
    143                 bss.keys = new Comparable[sz];
    144                 bss.vals = new Object[sz];
     154        }
     155
     156        /**
     157         * I2P - second half of load()
     158         * Load the whole span's keys and values into memory
     159         */
     160        protected static void loadData(BSkipSpan bss, BlockFile bf, int spanPage, Serializer key, Serializer val) throws IOException {
     161                bss.keys = new Comparable[bss.spanSize];
     162                bss.vals = new Object[bss.spanSize];
    145163
    146164                int ksz, vsz;
  • core/java/src/net/metanotion/util/skiplist/SkipLevels.java

    r7f10a67 r208db9a  
    8282        }
    8383
    84         public Comparable key() { return bottom.keys[0]; }
     84        public Comparable key() { return bottom.firstKey(); }
    8585
    8686        public Object get(int start, Comparable key) {
  • core/java/src/net/metanotion/util/skiplist/SkipList.java

    r7f10a67 r208db9a  
    3131import java.util.Random;
    3232
     33import net.i2p.util.RandomSource;
     34
    3335public class SkipList {
    3436        protected SkipSpan first;
    3537        protected SkipLevels stack;
    36         public Random rng;
     38        // I2P mod
     39        public static final Random rng = RandomSource.getInstance();
    3740
    3841        public int size=0;
     
    4750                stack = new SkipLevels(1, first);
    4851                spans = 1;
    49                 rng = new Random(System.currentTimeMillis());
     52                //rng = new Random(System.currentTimeMillis());
    5053        }
    5154
  • core/java/src/net/metanotion/util/skiplist/SkipSpan.java

    r7f10a67 r208db9a  
    184184                        loc = -1 * (loc + 1);
    185185                        if(next != null) {
    186                                 int cmp = next.keys[0].compareTo(key);
     186                                int cmp = next.firstKey().compareTo(key);
    187187                                if((loc >= nKeys) && (cmp > 0)) {
    188188                                        // It fits in between this span and the next
     
    265265                return res;
    266266        }
     267
     268        /** I2P */
     269        public Comparable firstKey() {
     270                return keys[0];
     271        }
    267272}
Note: See TracChangeset for help on using the changeset viewer.