Author: vgritsenko
Date: Sun Apr 8 16:47:39 2007
New Revision: 526622
URL: http://svn.apache.org/viewvc?view=rev&rev=526622
Log:
uncompressed collection fixes:
- convert passed in document in putDocument to xindice document impl
- compress & flush symbol table when storing uncompressed document
- save document string, not document itself in the document cache
so that when document is requested from cache, new copy is created.
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
xml/xindice/trunk/java/src/org/apache/xindice/core/DocumentCache.java
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java?view=diff&rev=526622&r1=526621&r2=526622
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
(original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Sun Apr
8 16:47:39 2007
@@ -697,6 +697,7 @@
if (log.isTraceEnabled()) {
log.trace(localDebugHeader + "Returning cached: " +
document);
}
+
return document;
}
}
@@ -738,15 +739,17 @@
documentCache.putDocument(this, key, value.getData());
}
} else {
+ String documentChars = value.toString();
if (log.isTraceEnabled()) {
- log.trace(localDebugHeader + "Pre parseDocument():
value=<" + value + ">");
+ log.trace(localDebugHeader + "Pre parseDocument():
value=<" + documentChars + ">");
}
- document = parseDocument(key, value.toString());
+ // FIXME These should be no reason here to re-compress the
document & flush symbols table?
+ document = parseDocument(key, documentChars);
flushSymbolTable();
if (documentCache != null) {
- documentCache.putDocument(this, key, document);
+ documentCache.putDocument(this, key, documentChars);
}
}
@@ -1127,34 +1130,48 @@
*/
byte[] documentBytes;
+ String documentChars = null;
if (compressed) {
+ // Create compressed document bytes to be stored in the filer
documentBytes = DOMCompressor.compress(document, symbols);
if (log.isTraceEnabled()) {
log.trace(localDebugHeader + "length=" + documentBytes.length);
}
- // Why must it be re-created?
+ // Create xindice document with just compressed bytes.
+ // Passed in document might not necessarily be xindice document,
+ // but we should be passing only our documents to index manager.
document = new DocumentImpl(documentBytes, symbols, new
NodeSource(this, key));
+
if (log.isTraceEnabled()) {
log.trace(localDebugHeader + "packedDocument: length=" +
documentBytes.length +
" document=<" + TextWriter.toString(document) + ">");
}
} else {
+ // Create uncompressed document bytes to be stored in the filer
+ documentChars = TextWriter.toString(document);
try {
- documentBytes =
TextWriter.toString(document).getBytes("utf-8");
- if (log.isTraceEnabled()) {
- log.trace(localDebugHeader + "utf8Document: length=" +
documentBytes.length +
- " document=<" + new String(documentBytes,
"utf-8") + ">");
- }
+ documentBytes = documentChars.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
// Should never happen
throw new DBException(FaultCodes.GEN_FATAL_ERROR,
"utf-8 encoding not supported", e);
}
+
+ // Create xindice document from the string.
+ // In addition to converting passed document to xindice document
+ // instance, parseDocument() also updates the symbol table,
+ // if necessary.
+ document = parseDocument(key, documentChars);
+
+ if (log.isTraceEnabled()) {
+ log.trace(localDebugHeader + "utf8Document: length=" +
documentBytes.length +
+ " document=<" + documentChars + ">");
+ }
}
- // TODO: Move into if(compressed) ?
+ // Symbol table could have been updated above, flush it to the disk.
flushSymbolTable();
// Temporary until insert and update are separate
@@ -1164,9 +1181,7 @@
}
indexManager.addDocument(key, document);
- /*
- * Construct the Value object that is stored in the BTree.
- */
+ // Construct the Value object that is stored in the BTree.
Value value;
if (inlineMetaService == null) {
value = new Value(documentBytes);
@@ -1182,11 +1197,11 @@
if (compressed) {
documentCache.putDocument(this, key, documentBytes);
} else {
- documentCache.putDocument(this, key, document);
+ documentCache.putDocument(this, key, documentChars);
}
}
- // update the meta for this document
+ // Update the meta for this document
updateDocumentMeta(key.toString());
DBObserver.getInstance().putDocument(this, key, document, oldDoc ==
null);
}
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/DocumentCache.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/DocumentCache.java?view=diff&rev=526622&r1=526621&r2=526622
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/DocumentCache.java
(original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/DocumentCache.java Sun
Apr 8 16:47:39 2007
@@ -25,6 +25,7 @@
import org.apache.xindice.xml.NodeSource;
import org.apache.xindice.xml.SymbolTable;
import org.apache.xindice.xml.dom.DBDocument;
+import org.apache.xindice.xml.dom.DOMParser;
import org.apache.xindice.xml.dom.DocumentImpl;
import org.w3c.dom.Document;
@@ -64,6 +65,15 @@
return null;
} else if (v instanceof Document) {
return (Document) v;
+ } else if (v instanceof String) {
+ try {
+ Document doc = DOMParser.toDocument((String) v);
+ ((DBDocument) doc).setSource(new NodeSource(col, key));
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn("ignored exception", e);
+ }
+ }
} else if (v instanceof byte[]) {
try {
SymbolTable s = col.getSymbols();
@@ -95,11 +105,11 @@
*
* @param col document collection
* @param key document key
- * @param doc document to store in the cache
+ * @param chars uncompressed document
*/
- public void putDocument(Collection col, Key key, Document doc) {
+ public void putDocument(Collection col, Key key, String chars) {
CacheKey ckey = new CacheKey(col, key);
- table.put(ckey, doc);
+ table.put(ckey, chars);
}
/**