Author: rwesten
Date: Tue Oct  9 07:25:22 2012
New Revision: 1395879

URL: http://svn.apache.org/viewvc?rev=1395879&view=rev
Log:
STANBOL-763: ManagedIndexMetadata now returns a clone and the ManagedSolrServer 
now checks if Metadata != null (e.g. if a concurrent call removed a managed 
SolrCore while iterating

Modified:
    
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedIndexMetadata.java
    
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedSolrServerImpl.java

Modified: 
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedIndexMetadata.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedIndexMetadata.java?rev=1395879&r1=1395878&r2=1395879&view=diff
==============================================================================
--- 
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedIndexMetadata.java
 (original)
+++ 
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedIndexMetadata.java
 Tue Oct  9 07:25:22 2012
@@ -26,6 +26,7 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumMap;
@@ -260,7 +261,7 @@ public class ManagedIndexMetadata {
             Collection<String> indexNames = 
archiveName2CoreName.get(archiveName);
             return indexNames == null ? 
                     (Collection<String>)Collections.EMPTY_LIST : 
-                        Collections.unmodifiableCollection(indexNames);
+                        Collections.unmodifiableCollection(new 
ArrayList<String>(indexNames));
         }
     }
     

Modified: 
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedSolrServerImpl.java
URL: 
http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedSolrServerImpl.java?rev=1395879&r1=1395878&r2=1395879&view=diff
==============================================================================
--- 
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedSolrServerImpl.java
 (original)
+++ 
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/impl/ManagedSolrServerImpl.java
 Tue Oct  9 07:25:22 2012
@@ -1048,20 +1048,22 @@ public class ManagedSolrServerImpl imple
                 boolean keepTracking = false;
                 for(String indexName : 
managedCores.getIndexNames(resourceName)){
                     IndexMetadata metadata = 
managedCores.getIndexMetadata(indexName);
-                    List<String> archives = metadata.getIndexArchives();
-                    String currentArchive = metadata.getArchive();
-                    if(currentArchive == null || 
-                            archives.indexOf(resourceName) < 
archives.indexOf(currentArchive)){
-                        metadata.setArchive(resourceName);
-                        managedCores.store(metadata);
-                        
indexUpdateDaemon.update(ManagedIndexState.ACTIVE,metadata, ais);
-                        //if synchronised do not remove this listener
-                        keepTracking = keepTracking || 
metadata.isSynchronized();
-                    } else { //currently used Archive is of higher priority as
-                        // this one.
-                        //keep tracking if synchronised
-                        keepTracking = keepTracking || 
metadata.isSynchronized();
-                    }
+                    if(metadata != null){ //the core might be deleted in the 
meantime
+                        List<String> archives = metadata.getIndexArchives();
+                        String currentArchive = metadata.getArchive();
+                        if(currentArchive == null || 
+                                archives.indexOf(resourceName) < 
archives.indexOf(currentArchive)){
+                            metadata.setArchive(resourceName);
+                            managedCores.store(metadata);
+                            
indexUpdateDaemon.update(ManagedIndexState.ACTIVE,metadata, ais);
+                            //if synchronised do not remove this listener
+                            keepTracking = keepTracking || 
metadata.isSynchronized();
+                        } else { //currently used Archive is of higher 
priority as
+                            // this one.
+                            //keep tracking if synchronised
+                            keepTracking = keepTracking || 
metadata.isSynchronized();
+                        }
+                    } //else managed core was deleted in the meantime ...
                 }
                 return !keepTracking;
             } else { //unable to create an ArchiveInputStrem 


Reply via email to