You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-dev@xml.apache.org by vg...@apache.org on 2007/11/12 23:10:44 UTC
svn commit: r594315 - in
/xml/xindice/trunk/java/src/org/apache/xindice/core: Collection.java
data/Value.java
Author: vgritsenko
Date: Mon Nov 12 14:10:44 2007
New Revision: 594315
URL: http://svn.apache.org/viewvc?rev=594315&view=rev
Log:
binary data caching, and other minor changes
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
xml/xindice/trunk/java/src/org/apache/xindice/core/data/Value.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?rev=594315&r1=594314&r2=594315&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Mon Nov 12 14:10:44 2007
@@ -812,29 +812,28 @@
* method returns Entry that identifies resource type and holds its
* value and metadata.
*
- * @param docKey identifying the desired database entry
+ * @param id identifying the desired database entry
* @return Entry containing the database entry and its metadata, or null
* if no matching entry is found
* @throws DBException in case of backing store error,
* and in case of header corruption
*/
- public final Entry getEntry(Object docKey) throws DBException {
-
+ public final Entry getEntry(Object id) throws DBException {
// I would prefer to throw an exception (NPE) in this case,
// but we have a test indicating a null return...
- if (docKey == null) {
+ if (id == null) {
return null;
}
String localDebugHeader = null;
if (log.isTraceEnabled()) {
- localDebugHeader = debugHeader() + "getEntry: docKey=<" + docKey + ">: ";
+ localDebugHeader = debugHeader() + "getEntry: id=<" + id + ">: ";
log.trace(localDebugHeader);
}
checkFiler(FaultCodes.COL_NO_FILER);
- Key key = getIdentityKey(createNewKey(docKey));
+ Key key = getIdentityKey(createNewKey(id));
synchronized (key) {
/*
@@ -862,17 +861,19 @@
}
Value value;
- InlineMetaMap metaMap = null;
+ boolean isDocument;
if (inlineMetaService == null) {
value = record.getValue();
+ isDocument = true;
if (log.isTraceEnabled()) {
log.trace(localDebugHeader + "Type is not available, Length=" + value.getLength());
}
} else {
InlineMetaService.DatabaseEntry databaseEntry = inlineMetaService.readDatabaseEntry(record.getValue());
- metaMap = databaseEntry.map;
+ InlineMetaMap metaMap = databaseEntry.map;
value = databaseEntry.value;
+ isDocument = metaMap.get("type").equals(ResourceTypeReader.XML);
if (log.isTraceEnabled()) {
log.trace(localDebugHeader + "Type=" + metaMap.get("type") + ", Length=" + value.getLength());
@@ -880,7 +881,7 @@
}
Map entryMeta = Entry.createMetaMap(record);
- if (inlineMetaService == null || metaMap.get("type").equals(ResourceTypeReader.XML)) {
+ if (isDocument) {
Document document;
if (compressed) {
document = new DocumentImpl(value.getData(), symbols, new NodeSource(this, key));
@@ -915,6 +916,10 @@
log.trace(localDebugHeader + "Binary document");
}
+ if (cache != null) {
+ cache.putBinaryEntry(this, key, value.getData(), entryMeta);
+ }
+
return new Entry(key, value.getData(), entryMeta);
}
}
@@ -1373,8 +1378,10 @@
* </ul>
*/
private boolean putBinary(Key key, byte[] bytes, byte action) throws DBException {
+ Entry entry;
+
synchronized (getIdentityKey(key)) {
- Entry entry = getEntry(key);
+ entry = getEntry(key);
if (action == ACTION_INSERT && entry != null) {
throw new DBException(FaultCodes.COL_DUPLICATE_RESOURCE,
"Error inserting binary resource '" + key + "' in '" + getCanonicalName() +
@@ -1386,10 +1393,7 @@
}
if (entry != null && entry.getEntryType() == Entry.DOCUMENT) {
- // binary resources aren't stored in cache or indexes
- if (cache != null) {
- cache.removeEntry(this, key);
- }
+ // binary resources aren't stored in indexes
indexManager.removeDocument(key, (Document) entry.getValue());
}
@@ -1398,29 +1402,32 @@
Value value = inlineMetaService.createValue(map, bytes, 0, bytes.length);
Record record = filer.writeRecord(key, value);
+ if (cache != null) {
+ cache.putBinaryEntry(this, key, bytes, Entry.createMetaMap(record));
+ }
+
// update the meta for this document
updateDocumentMeta(record);
- return entry == null;
}
+
+ return entry == null;
}
/**
* remove removes an object from the Collection based on its Key,
* regardless of it's type.
*
- * @param key The Object's Key
+ * @param id The Object's Key
* @throws DBException if operation failed
*/
- public final void remove(Object key) throws DBException {
+ public final void remove(Object id) throws DBException {
if (log.isInfoEnabled()) {
- log.info(debugHeader() + "Remove " + key);
+ log.info(debugHeader() + "Remove " + id);
}
checkFiler(FaultCodes.COL_NO_FILER);
- Key objKey = createNewKey(key);
-
- objKey = getIdentityKey(objKey);
+ Key objKey = getIdentityKey(createNewKey(id));
synchronized (objKey) {
Entry entry = getEntry(objKey);
if (entry != null && entry.getEntryType() == Entry.DOCUMENT) {
@@ -1436,13 +1443,15 @@
"Resource '" + objKey + "' does not exist in '" + getCanonicalName() + "'");
}
- // update the meta for this collection if necessary
- updateCollectionMeta();
// remove the document meta
if (isMetaEnabled()) {
getMetaSystemCollection().dropDocumentMeta(this, objKey.toString());
}
}
+
+ // update the meta for this collection if necessary
+ updateCollectionMeta();
+
DBObserver.getInstance().dropDocument(this, objKey);
}
@@ -1519,20 +1528,20 @@
* If no matching entry is found, null is returned, otherwise this method
* return Entry that holds metadata only.
*
- * @param docKey identifying the desired database entry
+ * @param id identifying the desired database entry
* @return Entry containing the metadata of the database entry, or null if no
* matching entry is found
* @throws DBException in case of backing store error,
* and in case of header corruption
*/
- public final Entry getEntryMeta(Object docKey) throws DBException {
- if (docKey == null) {
+ public final Entry getEntryMeta(Object id) throws DBException {
+ if (id == null) {
return null;
}
checkFiler(FaultCodes.COL_NO_FILER);
- Key key = getIdentityKey(createNewKey(docKey));
+ Key key = getIdentityKey(createNewKey(id));
synchronized (key) {
/*
* If the key has a corresponding value in the cache, return it
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/data/Value.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/data/Value.java?rev=594315&r1=594314&r2=594315&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/data/Value.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/data/Value.java Mon Nov 12 14:10:44 2007
@@ -91,7 +91,7 @@
}
/**
- * getData retrieves a <strong>copy</copy> of the data which is being stored
+ * getData retrieves a copy of the data which is being stored
* by this value as a byte array.
*
* <p>Data copying is performed in order to ensure immutability of the Value.