Fix checkstyle issues to enforce it
[controller.git] / opendaylight / config / config-manager / src / main / java / org / opendaylight / controller / config / manager / impl / DeadlockMonitor.java
index d34a739703e8f8eba7d60a90ca6fa713a301f802..cad98b30f4edd9a3f2689fd43bfa0a6127316103 100644 (file)
@@ -1,17 +1,24 @@
-package org.opendaylight.controller.config.manager.impl;
+/*
+ * Copyright (c) 2014, 2017 Cisco Systems, 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
+ */
 
-import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+package org.opendaylight.controller.config.manager.impl;
 
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.GuardedBy;
 import java.util.Deque;
 import java.util.LinkedList;
 import java.util.concurrent.TimeUnit;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DeadlockMonitor implements AutoCloseable {
-    private static final Logger logger = LoggerFactory.getLogger(DeadlockMonitorRunnable.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DeadlockMonitor.class);
 
     private static final long WARN_AFTER_MILLIS = 5000;
 
@@ -20,21 +27,21 @@ public class DeadlockMonitor implements AutoCloseable {
     @GuardedBy("this")
     private final Deque<ModuleIdentifierWithNanos> moduleIdentifierWithNanosStack = new LinkedList<>();
     @GuardedBy("this")
-    private ModuleIdentifierWithNanos top = ModuleIdentifierWithNanos.EMPTY;
+    private ModuleIdentifierWithNanos top = ModuleIdentifierWithNanos.empty;
 
-    public DeadlockMonitor(TransactionIdentifier transactionIdentifier) {
+    public DeadlockMonitor(final TransactionIdentifier transactionIdentifier) {
         this.transactionIdentifier = transactionIdentifier;
         thread = new DeadlockMonitorRunnable();
         thread.start();
     }
 
-    public synchronized void setCurrentlyInstantiatedModule(ModuleIdentifier currentlyInstantiatedModule) {
+    public synchronized void setCurrentlyInstantiatedModule(final ModuleIdentifier currentlyInstantiatedModule) {
 
         boolean popping = currentlyInstantiatedModule == null;
         if (popping) {
             moduleIdentifierWithNanosStack.pop();
             if (moduleIdentifierWithNanosStack.isEmpty()) {
-                top = ModuleIdentifierWithNanos.EMPTY;
+                top = ModuleIdentifierWithNanos.empty;
             } else {
                 top = moduleIdentifierWithNanosStack.peekLast();
             }
@@ -43,7 +50,7 @@ public class DeadlockMonitor implements AutoCloseable {
             moduleIdentifierWithNanosStack.push(current);
             top = current;
         }
-        logger.trace("setCurrentlyInstantiatedModule {}, top {}", currentlyInstantiatedModule, top);
+        LOG.trace("setCurrentlyInstantiatedModule {}, top {}", currentlyInstantiatedModule, top);
     }
 
     public boolean isAlive() {
@@ -68,26 +75,31 @@ public class DeadlockMonitor implements AutoCloseable {
 
         @Override
         public void run() {
-            ModuleIdentifierWithNanos old = new ModuleIdentifierWithNanos(); // null moduleId
-            while (this.isInterrupted() == false) {
-                ModuleIdentifierWithNanos copy = new ModuleIdentifierWithNanos(DeadlockMonitor.this.top);
-                if (old.moduleIdentifier == null || old.equals(copy) == false) {
+            // null moduleId
+            ModuleIdentifierWithNanos old = new ModuleIdentifierWithNanos();
+            while (!this.isInterrupted()) {
+                ModuleIdentifierWithNanos copy;
+                synchronized (this) {
+                    copy = new ModuleIdentifierWithNanos(DeadlockMonitor.this.top);
+                }
+
+                if (old.moduleIdentifier == null || !old.equals(copy)) {
                     // started
                     old = copy;
                 } else {
                     // is the getInstance() running longer than WARN_AFTER_MILLIS ?
                     long runningTime = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - copy.nanoTime);
                     if (runningTime > WARN_AFTER_MILLIS) {
-                        logger.warn("{} did not finish after {} ms", copy.moduleIdentifier, runningTime);
+                        LOG.warn("{} did not finish after {} ms", copy.moduleIdentifier, runningTime);
                     }
                 }
                 try {
-                    sleep(1000);
-                } catch (InterruptedException e) {
+                    sleep(WARN_AFTER_MILLIS);
+                } catch (final InterruptedException e) {
                     interrupt();
                 }
             }
-            logger.trace("Exiting {}", this);
+            LOG.trace("Exiting {}", this);
         }
 
         @Override
@@ -96,40 +108,45 @@ public class DeadlockMonitor implements AutoCloseable {
         }
     }
 
-
-
-
     private static class ModuleIdentifierWithNanos {
-        private static ModuleIdentifierWithNanos EMPTY = new ModuleIdentifierWithNanos();
+        private static ModuleIdentifierWithNanos empty = new ModuleIdentifierWithNanos();
         @Nullable
         private final ModuleIdentifier moduleIdentifier;
 
         private final long nanoTime;
 
         private ModuleIdentifierWithNanos() {
-            this((ModuleIdentifier)null);
+            this((ModuleIdentifier) null);
         }
 
-        private ModuleIdentifierWithNanos(ModuleIdentifier moduleIdentifier) {
+        private ModuleIdentifierWithNanos(final ModuleIdentifier moduleIdentifier) {
             this.moduleIdentifier = moduleIdentifier;
             nanoTime = System.nanoTime();
         }
 
-        private ModuleIdentifierWithNanos(ModuleIdentifierWithNanos copy) {
+        private ModuleIdentifierWithNanos(final ModuleIdentifierWithNanos copy) {
             moduleIdentifier = copy.moduleIdentifier;
             nanoTime = copy.nanoTime;
         }
 
         @Override
-        public boolean equals(Object o) {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
+        public boolean equals(final Object object) {
+            if (this == object) {
+                return true;
+            }
+            if (object == null || getClass() != object.getClass()) {
+                return false;
+            }
 
-            ModuleIdentifierWithNanos that = (ModuleIdentifierWithNanos) o;
+            ModuleIdentifierWithNanos that = (ModuleIdentifierWithNanos) object;
 
-            if (nanoTime != that.nanoTime) return false;
-            if (moduleIdentifier != null ? !moduleIdentifier.equals(that.moduleIdentifier) : that.moduleIdentifier != null)
+            if (nanoTime != that.nanoTime) {
                 return false;
+            }
+            if (moduleIdentifier != null ? !moduleIdentifier.equals(that.moduleIdentifier)
+                    : that.moduleIdentifier != null) {
+                return false;
+            }
 
             return true;
         }
@@ -137,15 +154,13 @@ public class DeadlockMonitor implements AutoCloseable {
         @Override
         public int hashCode() {
             int result = moduleIdentifier != null ? moduleIdentifier.hashCode() : 0;
-            result = 31 * result + (int) (nanoTime ^ (nanoTime >>> 32));
+            result = 31 * result + (int) (nanoTime ^ nanoTime >>> 32);
             return result;
         }
 
         @Override
         public String toString() {
-            return "ModuleIdentifierWithNanos{" +
-                    moduleIdentifier +
-                    '}';
+            return "ModuleIdentifierWithNanos{" + moduleIdentifier + '}';
         }
     }
 }