Author: [email protected]
Date: Wed Mar 28 17:01:51 2012
New Revision: 2162
Log:
[AMDATUCASSANDRA-179] Fixed duplicate PM service registration by remembering
registered services
Modified:
branches/amdatu-cassandra-0.2.3/cassandra-listener/src/main/java/org/amdatu/cassandra/listener/service/CassandraUpdateListenerImpl.java
Modified:
branches/amdatu-cassandra-0.2.3/cassandra-listener/src/main/java/org/amdatu/cassandra/listener/service/CassandraUpdateListenerImpl.java
==============================================================================
---
branches/amdatu-cassandra-0.2.3/cassandra-listener/src/main/java/org/amdatu/cassandra/listener/service/CassandraUpdateListenerImpl.java
(original)
+++
branches/amdatu-cassandra-0.2.3/cassandra-listener/src/main/java/org/amdatu/cassandra/listener/service/CassandraUpdateListenerImpl.java
Wed Mar 28 17:01:51 2012
@@ -22,6 +22,7 @@
import org.amdatu.cassandra.persistencemanager.CassandraPersistenceManager;
import
org.amdatu.cassandra.persistencemanager.CassandraPersistenceManagerFactory;
+import java.util.ArrayList;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.Hashtable;
@@ -117,6 +118,7 @@
*/
class InspectKeyspaceColumnFamilyThread extends Thread {
private Map<String, List<String>> m_snapshot = new HashMap<String,
List<String>>();
+ private final List<String> m_registeredPMServices = new
ArrayList<String>();
@Override
public void run() {
@@ -175,9 +177,21 @@
String filter = "(" +
CassandraPersistenceManager.KEYSPACE_AWARE_KEY + "=" + keyspace + ")";
ServiceReference[] servRefs =
m_context.getAllServiceReferences(CassandraPersistenceManager.class.getName(),
filter);
+ // Verify if the service is available
if (servRefs == null || servRefs.length == 0) {
- // No Cassandra persistence manager available for this
keyspace, register it now
-
m_pmFactory.createCassandraPersistenceManager(keyspace);
+ // Verify if we did not yet register the PM service
before (this may happen since starting
+ // the service happens asynchronously)
+ if (!m_registeredPMServices.contains(keyspace)) {
+ // No Cassandra persistence manager available for
this keyspace, register it now
+
m_pmFactory.createCassandraPersistenceManager(keyspace);
+ m_registeredPMServices.add(keyspace);
+ }
+ }
+ else if (!m_registeredPMServices.contains(keyspace)) {
+ // The service is available, but not present in our
remembered list of registered
+ // services. This may happen in case this bundle is
stop/started while the PM services
+ // kept on running, so add it.
+ m_registeredPMServices.add(keyspace);
}
}
@@ -239,6 +253,7 @@
if (keyspaces == null || !keyspaces.contains(keyspace)) {
// No keyspace available for this Cassandra
persistence manager, unregister the service now
m_context.ungetService(servRef);
+ m_registeredPMServices.remove(keyspace);
m_logService.log(LogService.LOG_INFO, "Cassandra
Persistence Manager service for keyspace '"
+ keyspace + "' unregistered");
}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits