From: Wolfgang M. M. <wol...@us...> - 2004-04-27 15:47:40
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/storage/store In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28184/src/org/exist/storage/store Modified Files: BFile.java NodeIterator.java DOMFile.java Log Message: * XQuery node construction consumed too much memory: instead of generating a SAX stream, nodes are now directly copied to the created output fragment. * QName objects are now created through the global name pool and thus shared between node objects. Index: DOMFile.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/storage/store/DOMFile.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** DOMFile.java 23 Apr 2004 13:07:45 -0000 1.22 --- DOMFile.java 27 Apr 2004 15:46:57 -0000 1.23 *************** *** 997,1001 **** RecordPos rec = findRecord(p, false); DOMFilePageHeader ph = rec.page.getPageHeader(); - // TODO: 10 is wrong int end = rec.offset + 8; System.arraycopy(rec.page.data, rec.offset + 8, rec.page.data, rec.offset - 2, rec.page.len - end); --- 997,1000 ---- *************** *** 1100,1107 **** } - LOG.debug("previous = " + ph.getPrevDataPage()); if(ph.getPrevDataPage() > -1) { DOMPage prev = getCurrentPage(ph.getPrevDataPage()); - LOG.debug("previous = " + prev.getPageNum()); prev.getPageHeader().setNextDataPage(ph.getNextDataPage()); prev.setDirty(true); --- 1099,1104 ---- *************** *** 1112,1116 **** ph.setNextDataPage(-1); ph.setDataLength(0); - ph.setDataLength(0); ph.setNextTID((short) -1); ph.setRecordCount((short) 0); --- 1109,1112 ---- *************** *** 1210,1214 **** if (value.length < l) { // value is smaller than before ! System.out.println(value.length + " < " + l); System.out.println(rec.page.page.getPageInfo() + "; offset = " + rec.offset + "; data-len = " --- 1206,1210 ---- if (value.length < l) { // value is smaller than before ! System.out.println(value.length + " < " + l + ": " + new String(value)); System.out.println(rec.page.page.getPageInfo() + "; offset = " + rec.offset + "; data-len = " Index: NodeIterator.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/storage/store/NodeIterator.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** NodeIterator.java 23 Apr 2004 13:07:45 -0000 1.6 --- NodeIterator.java 27 Apr 2004 15:46:57 -0000 1.7 *************** *** 35,43 **** private long startAddress = -1; private Object lockKey; ! public NodeIterator(Object lock, DOMFile db, NodeProxy node) throws BTreeException, IOException { this.db = db; this.doc = node.doc; if (-1 < node.getInternalAddress()) startAddress = node.getInternalAddress(); --- 35,45 ---- private long startAddress = -1; private Object lockKey; + private boolean useNodePool = false; ! public NodeIterator(Object lock, DOMFile db, NodeProxy node, boolean poolable) throws BTreeException, IOException { this.db = db; this.doc = node.doc; + this.useNodePool = poolable; if (-1 < node.getInternalAddress()) startAddress = node.getInternalAddress(); *************** *** 151,158 **** offset += 8; final byte[] odata = db.getOverflowValue(overflow); ! nextNode = NodeImpl.deserialize(odata, 0, odata.length, doc); // normal node } else { ! nextNode = NodeImpl.deserialize(p.data, offset, l, doc); offset += l; } --- 153,160 ---- offset += 8; final byte[] odata = db.getOverflowValue(overflow); ! nextNode = NodeImpl.deserialize(odata, 0, odata.length, doc, useNodePool); // normal node } else { ! nextNode = NodeImpl.deserialize(p.data, offset, l, doc, useNodePool); offset += l; } *************** *** 161,165 **** ); nextNode.setOwnerDocument(doc); ! // System.out.println("Next: " + nextNode.getNodeName() + " [" + page + "]"); } while(nextNode == null); } --- 163,167 ---- ); nextNode.setOwnerDocument(doc); ! // System.out.println("Next: " + nextNode.getNodeName() + " [" + page + "]"); } while(nextNode == null); } Index: BFile.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/storage/store/BFile.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** BFile.java 23 Apr 2004 13:07:45 -0000 1.18 --- BFile.java 27 Apr 2004 15:46:57 -0000 1.19 *************** *** 397,401 **** final int offset = findValuePosition(page, tid); if(offset < 0) { - System.out.println("no data found at tid " + tid + "; page " + page.getPageNum()); throw new IOException("no data found at tid " + tid + "; page " + page.getPageNum()); } --- 397,400 ---- *************** *** 931,939 **** int skip = 0; if (freeList.size() > MAX_FREE_LIST_LEN) { ! LOG.debug("removing " + (freeList.size() - MAX_FREE_LIST_LEN) + " free pages."); // no: remove some smaller entries to make it fit ! skip = freeList.size() - MAX_FREE_LIST_LEN; ! // for (int i = 0; i < freeList.size() - MAX_FREE_LIST_LEN; i++) ! // freeList.removeFirst(); } super.write(raf); --- 930,938 ---- int skip = 0; if (freeList.size() > MAX_FREE_LIST_LEN) { ! LOG.warn("removing " + (freeList.size() - MAX_FREE_LIST_LEN) + " free pages."); // no: remove some smaller entries to make it fit ! // skip = freeList.size() - MAX_FREE_LIST_LEN; ! for (int i = 0; i < freeList.size() - MAX_FREE_LIST_LEN; i++) ! freeList.removeFirst(); } super.write(raf); *************** *** 943,949 **** Iterator i = freeList.iterator(); // skip ! for(int j = 0; j < skip && i.hasNext(); j++) { ! i.next(); ! } while (i.hasNext()) { freeSpace = (FreeSpace) i.next(); --- 942,948 ---- Iterator i = freeList.iterator(); // skip ! // for(int j = 0; j < skip && i.hasNext(); j++) { ! // i.next(); ! // } while (i.hasNext()) { freeSpace = (FreeSpace) i.next(); |