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();
}
}
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();
@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);
+ }
}
}
}