You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2008/03/07 13:24:15 UTC

svn commit: r634632 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene: IndexingQueue.java MultiIndex.java

Author: mreutegg
Date: Fri Mar  7 04:24:15 2008
New Revision: 634632

URL: http://svn.apache.org/viewvc?rev=634632&view=rev
Log:
JCR-1459: NullPointerException on startup if IndexingQueue has pending nodes

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java?rev=634632&r1=634631&r2=634632&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/IndexingQueue.java Fri Mar  7 04:24:15 2008
@@ -53,12 +53,29 @@
     private final Map pendingDocuments = new HashMap();
 
     /**
+     * Flag that indicates whether this indexing queue had been
+     * {@link #initialize(MultiIndex) initialized}.
+     */
+    private volatile boolean initialized = false;
+
+    /**
      * Creates an indexing queue.
      *
      * @param queueStore the store where to read the pending extraction jobs.
      */
-    IndexingQueue(IndexingQueueStore queueStore, MultiIndex index) {
+    IndexingQueue(IndexingQueueStore queueStore) {
         this.queueStore = queueStore;
+    }
+
+    /**
+     * Initializes the indexing queue.
+     *
+     * @param index the multi index this indexing queue belongs to.
+     */
+    void initialize(MultiIndex index) {
+        if (initialized) {
+            throw new IllegalStateException("already initialized");
+        }
         String[] uuids = queueStore.getPending();
         for (int i = 0; i < uuids.length; i++) {
             try {
@@ -78,6 +95,7 @@
                 }
             }
         }
+        initialized = true;
     }
 
     /**
@@ -86,6 +104,7 @@
      * @return the {@link Document}s that are finished.
      */
     public Document[] getFinishedDocuments() {
+        checkInitialized();
         List finished = new ArrayList();
         synchronized (this) {
             finished.addAll(pendingDocuments.values());
@@ -113,6 +132,7 @@
      *                     queue.
      */
     public synchronized Document removeDocument(String uuid) throws IOException {
+        checkInitialized();
         Document doc = (Document) pendingDocuments.remove(uuid);
         if (doc != null) {
             queueStore.removeUUID(uuid);
@@ -133,6 +153,7 @@
      *                     queue.
      */
     public synchronized Document addDocument(Document doc) throws IOException {
+        checkInitialized();
         String uuid = doc.get(FieldNames.UUID);
         Document existing = (Document) pendingDocuments.put(uuid, doc);
         log.debug("added node {}. New size of indexing queue: {}",
@@ -151,6 +172,7 @@
      * @throws IOException if an error occurs while closing this queue.
      */
     public synchronized void close() throws IOException {
+        checkInitialized();
         // go through pending documents and close readers
         Iterator it = pendingDocuments.values().iterator();
         while (it.hasNext()) {
@@ -168,6 +190,17 @@
      *                     disk.
      */
     public synchronized void commit() throws IOException {
+        checkInitialized();
         queueStore.commit();
+    }
+
+    /**
+     * Checks if this indexing queue is initialized and otherwise throws a
+     * {@link IllegalStateException}.
+     */
+    private void checkInitialized() {
+        if (!initialized) {
+            throw new IllegalStateException("not initialized");
+        }
     }
 }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java?rev=634632&r1=634631&r2=634632&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java Fri Mar  7 04:24:15 2008
@@ -261,7 +261,7 @@
         }
 
         // initialize indexing queue
-        this.indexingQueue = new IndexingQueue(store, this);
+        this.indexingQueue = new IndexingQueue(store);
 
         // open persistent indexes
         for (int i = 0; i < indexNames.size(); i++) {
@@ -297,6 +297,8 @@
         } finally {
             reader.close();
         }
+
+        indexingQueue.initialize(this);
 
         redoLogApplied = redoLog.hasEntries();