BUG-2283 : workaround in programming-impl 27/12927/3
authorDana Kutenicsova <dkutenic@cisco.com>
Tue, 18 Nov 2014 14:37:39 +0000 (15:37 +0100)
committerDana Kutenicsova <dkutenic@cisco.com>
Thu, 20 Nov 2014 14:21:12 +0000 (15:21 +0100)
Change-Id: Ibff71c25a5106e1cff96feb8a1429caa54735825
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
programming/impl/src/main/java/org/opendaylight/bgpcep/programming/impl/ProgrammingServiceImpl.java

index fa69d7e5011d06fcd41daeac4aaea3d06f490460..da258b79bf205f3ff5e5364cf0cd8e73f6caf94c 100644 (file)
@@ -78,34 +78,34 @@ public final class ProgrammingServiceImpl implements AutoCloseable, InstructionS
         private final InstructionBuilder builder = new InstructionBuilder();
 
         InstructionPusher(final InstructionId id, final Nanotime deadline) {
-            builder.setDeadline(deadline);
-            builder.setId(id);
-            builder.setKey(new InstructionKey(id));
-            builder.setStatus(InstructionStatus.Queued);
+            this.builder.setDeadline(deadline);
+            this.builder.setId(id);
+            this.builder.setKey(new InstructionKey(id));
+            this.builder.setStatus(InstructionStatus.Queued);
         }
 
         @Override
         public void instructionUpdated(final InstructionStatus status, final Details details) {
-            if (!status.equals(builder.getStatus())) {
-                builder.setStatus(status);
+            if (!status.equals(this.builder.getStatus())) {
+                this.builder.setStatus(status);
 
-                final WriteTransaction t = dataProvider.newWriteOnlyTransaction();
+                final WriteTransaction t = ProgrammingServiceImpl.this.dataProvider.newWriteOnlyTransaction();
                 t.put(LogicalDatastoreType.OPERATIONAL,
-                        qid.child(
+                        ProgrammingServiceImpl.this.qid.child(
                                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.instruction.queue.Instruction.class,
-                                new InstructionKey(builder.getId())), builder.build());
+                                new InstructionKey(this.builder.getId())), this.builder.build());
                 t.submit();
             }
 
-            notifs.publish(new InstructionStatusChangedBuilder().setId(builder.getId()).setStatus(status).setDetails(details).build());
+            ProgrammingServiceImpl.this.notifs.publish(new InstructionStatusChangedBuilder().setId(this.builder.getId()).setStatus(status).setDetails(details).build());
         }
 
         @Override
         public void instructionRemoved() {
-            final WriteTransaction t = dataProvider.newWriteOnlyTransaction();
-            t.delete(LogicalDatastoreType.OPERATIONAL, qid.child(
+            final WriteTransaction t = ProgrammingServiceImpl.this.dataProvider.newWriteOnlyTransaction();
+            t.delete(LogicalDatastoreType.OPERATIONAL, ProgrammingServiceImpl.this.qid.child(
                     org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.instruction.queue.Instruction.class,
-                    new InstructionKey(builder.getId())));
+                    new InstructionKey(this.builder.getId())));
             t.submit();
         }
     }
@@ -116,16 +116,16 @@ public final class ProgrammingServiceImpl implements AutoCloseable, InstructionS
         this.notifs = Preconditions.checkNotNull(notifs);
         this.executor = Preconditions.checkNotNull(executor);
         this.timer = Preconditions.checkNotNull(timer);
-        qid = InstanceIdentifier.builder(InstructionsQueue.class).toInstance();
+        this.qid = InstanceIdentifier.builder(InstructionsQueue.class).toInstance();
 
         final ReadWriteTransaction t = dataProvider.newReadWriteTransaction();
         try {
-            Preconditions.checkState(!t.read(LogicalDatastoreType.OPERATIONAL, qid).get().isPresent(), "Conflicting instruction queue found");
+            Preconditions.checkState(!t.read(LogicalDatastoreType.OPERATIONAL, this.qid).get().isPresent(), "Conflicting instruction queue found");
         } catch (InterruptedException | ExecutionException e) {
             throw new IllegalStateException("Failed to acquire instruction queue", e);
         }
 
-        t.put(LogicalDatastoreType.OPERATIONAL, qid,
+        t.put(LogicalDatastoreType.OPERATIONAL, this.qid,
                 new InstructionsQueueBuilder().setInstruction(
                         Collections.<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.instruction.queue.Instruction> emptyList()).build());
         t.submit();
@@ -338,13 +338,18 @@ public final class ProgrammingServiceImpl implements AutoCloseable, InstructionS
     @Override
     public synchronized void close() {
         try {
-            for (InstructionImpl i : insns.values()) {
+            for (final InstructionImpl i : this.insns.values()) {
                 i.tryCancel(null);
             }
         } finally {
-            final WriteTransaction t = dataProvider.newWriteOnlyTransaction();
-            t.delete(LogicalDatastoreType.OPERATIONAL, qid);
-            t.submit();
+            try {
+                // Workaround for BUG-2283
+                final WriteTransaction t = this.dataProvider.newWriteOnlyTransaction();
+                t.delete(LogicalDatastoreType.OPERATIONAL, this.qid);
+                t.submit().checkedGet();
+            } catch (final Exception e) {
+                LOG.error("Failed to shutdown Instruction Queue", e);
+            }
         }
     }
 }