Use the memorized service reference
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / impl / EventDispatcherImpl.java
index 27741c478b282102691700451a97a65222ebb571..e73fe171e5ec1a4d315ddd7a84a55ce6d1c92881 100644 (file)
@@ -1,11 +1,9 @@
 /*
- * Copyright (C) 2014 Red Hat, Inc.
+ * Copyright (c) 2013, 2015 Red Hat, Inc. and others. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Authors : Dave Tucker, Flavio Fernandes
  */
 
 package org.opendaylight.ovsdb.openstack.netvirt.impl;
@@ -16,7 +14,6 @@ import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
 
-import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,7 +25,7 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 
 public class EventDispatcherImpl implements EventDispatcher, ConfigInterface {
-    static final Logger logger = LoggerFactory.getLogger(EventDispatcher.class);
+    private static final Logger LOG = LoggerFactory.getLogger(EventDispatcher.class);
     private ExecutorService eventHandler;
     private volatile BlockingQueue<AbstractEvent> events;
     private AbstractHandler[] handlers;
@@ -46,24 +43,24 @@ public class EventDispatcherImpl implements EventDispatcher, ConfigInterface {
             public void run() {
                 Thread t = Thread.currentThread();
                 t.setName("EventDispatcherImpl");
-                logger.info("EventDispatcherImpl: started {}", t.getName());
+                LOG.info("EventDispatcherImpl: started {}", t.getName());
                 while (true) {
                     AbstractEvent ev;
                     try {
                         ev = events.take();
                     } catch (InterruptedException e) {
-                        logger.info("The event handler thread was interrupted, shutting down", e);
+                        LOG.info("The event handler thread was interrupted, shutting down", e);
                         return;
                     }
                     try {
                         dispatchEvent(ev);
                     } catch (Exception e) {
-                        logger.error("Exception in dispatching event "+ev.toString(), e);
+                        LOG.error("Exception in dispatching event {}", ev.toString(), e);
                     }
                 }
             }
         });
-        logger.debug("event dispatcher is started");
+        LOG.debug("event dispatcher is started");
     }
 
     void stop() {
@@ -74,8 +71,9 @@ public class EventDispatcherImpl implements EventDispatcher, ConfigInterface {
             if (!eventHandler.awaitTermination(10, TimeUnit.SECONDS)) {
                 eventHandler.shutdownNow();
                 // Wait a while for tasks to respond to being cancelled
-                if (!eventHandler.awaitTermination(10, TimeUnit.SECONDS))
-                    logger.error("Dispatcher's event handler did not terminate");
+                if (!eventHandler.awaitTermination(10, TimeUnit.SECONDS)) {
+                    LOG.error("Dispatcher's event handler did not terminate");
+                }
             }
         } catch (InterruptedException e) {
             // (Re-)Cancel if current thread also interrupted
@@ -83,13 +81,13 @@ public class EventDispatcherImpl implements EventDispatcher, ConfigInterface {
             // Preserve interrupt status
             Thread.currentThread().interrupt();
         }
-        logger.debug("event dispatcher is stopped");
+        LOG.debug("event dispatcher is stopped");
     }
 
     private void dispatchEvent(AbstractEvent ev) {
         AbstractHandler handler = handlers[ev.getHandlerType().ordinal()];
         if (handler == null) {
-            logger.warn("event dispatcher found no handler for {}", ev);
+            LOG.warn("event dispatcher found no handler for {}", ev);
             return;
         }
 
@@ -100,25 +98,28 @@ public class EventDispatcherImpl implements EventDispatcher, ConfigInterface {
         Long pid = (Long) ref.getProperty(org.osgi.framework.Constants.SERVICE_ID);
         Object handlerTypeObject = ref.getProperty(Constants.EVENT_HANDLER_TYPE_PROPERTY);
         if (!(handlerTypeObject instanceof AbstractEvent.HandlerType)){
-            logger.error("Abstract handler reg failed to provide a valid handler type {}", handlerTypeObject);
+            // The exception should give us a stacktrace
+            LOG.error("Abstract handler reg failed to provide a valid handler type: {} ref: {} handler: {}",
+                    handlerTypeObject, ref.getClass().getName(), handler.getClass().getName(),
+                    new IllegalArgumentException("Missing handler type"));
             return;
         }
         AbstractEvent.HandlerType handlerType = (AbstractEvent.HandlerType) handlerTypeObject;
         handlers[handlerType.ordinal()] = handler;
-        logger.debug("Event handler for type {} registered for {}, pid {}",
-                     handlerType, handler.getClass().getName(), pid);
+        LOG.info("eventHandlerAdded: handler: {}, pid: {}, type: {}",
+                handler.getClass().getName(), pid, handlerType);
     }
 
     public void eventHandlerRemoved(final ServiceReference ref){
         Long pid = (Long) ref.getProperty(org.osgi.framework.Constants.SERVICE_ID);
         Object handlerTypeObject = ref.getProperty(Constants.EVENT_HANDLER_TYPE_PROPERTY);
         if (!(handlerTypeObject instanceof AbstractEvent.HandlerType)){
-            logger.error("Abstract handler unreg failed to provide a valid handler type " + handlerTypeObject);
+            LOG.error("Abstract handler unreg failed to provide a valid handler type {}", handlerTypeObject);
             return;
         }
         AbstractEvent.HandlerType handlerType = (AbstractEvent.HandlerType) handlerTypeObject;
         handlers[handlerType.ordinal()] = null;
-        logger.debug("Event handler for type {} unregistered pid {}", handlerType, pid);
+        LOG.debug("Event handler for type {} unregistered pid {}", handlerType, pid);
     }
 
     /**
@@ -129,20 +130,19 @@ public class EventDispatcherImpl implements EventDispatcher, ConfigInterface {
     @Override
     public void enqueueEvent(AbstractEvent event) {
         if (event == null) {
-            logger.warn("enqueueEvent: event is null");
+            LOG.warn("enqueueEvent: event is null");
             return;
         }
 
         try {
             events.put(event);
-            System.out.println("LA" + events.size());
         } catch (InterruptedException e) {
-            logger.error("Thread was interrupted while trying to enqueue event ", e);
+            LOG.error("Thread was interrupted while trying to enqueue event ", e);
         }
     }
 
     @Override
-    public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {}
+    public void setDependencies(ServiceReference serviceReference) {}
 
     @Override
     public void setDependencies(Object impl) {}