private boolean synced = false;
private PCEPSession session;
private SyncOptimization syncOptimization;
+ private boolean triggeredResyncInProcess;
private ListenerStateRuntimeRegistration registration;
private final SessionListenerState listenerState;
updatePccNode(ctx, new PathComputationClientBuilder().setStateSync(pccSyncState).build());
if (pccSyncState != PccSyncState.Synchronized) {
this.synced = false;
+ this.triggeredResyncInProcess = true;
}
// All set, commit the modifications
Futures.addCallback(ctx.trans.submit(), new FutureCallback<Void>() {
});
}
+ protected boolean isTriggeredSyncInProcess() {
+ return this.triggeredResyncInProcess;
+ }
+
@GuardedBy("this")
private void tearDown(final PCEPSession session) {
this.serverSessionManager.releaseNodeState(this.nodeState, session, isLspDbPersisted());
// Update synchronization flag
this.synced = true;
+ if(this.triggeredResyncInProcess) {
+ this.triggeredResyncInProcess = false;
+ }
updatePccNode(ctx, new PathComputationClientBuilder().setStateSync(PccSyncState.Synchronized).build());
// The node has completed synchronization, cleanup metadata no longer reported back
public synchronized ListenableFuture<OperationResult> triggerSync(final TriggerSyncArgs input) {
if (isTriggeredInitialSynchro() && !isSynchronized()) {
return triggerSynchronization(input);
- } else if (isSynchronized() && isTriggeredReSyncEnabled()) {
+ } else if (getSynchronized() && isTriggeredReSyncEnabled()) {
Preconditions.checkArgument(input != null && input.getNode() != null, MISSING_XML_TAG);
if (input.getName() == null) {
return triggerResyncronization(input);
case Active:
case Down:
case Up:
- final PCEPRequest req = removeRequest(id);
- if (req != null) {
- LOG.debug("Request {} resulted in LSP operational state {}", id, lsp.getOperational());
- rlb.setMetadata(req.getMetadata());
- ctx.resolveRequest(req);
- } else {
- LOG.warn("Request ID {} not found in outstanding DB", id);
+ if(!isTriggeredSyncInProcess()) {
+ final PCEPRequest req = removeRequest(id);
+ if (req != null) {
+ LOG.debug("Request {} resulted in LSP operational state {}", id, lsp.getOperational());
+ rlb.setMetadata(req.getMetadata());
+ ctx.resolveRequest(req);
+ } else {
+ LOG.warn("Request ID {} not found in outstanding DB", id);
+ }
}
break;
case GoingDown:
if (!lsp.isSync() && (plspid == null || plspid.getValue() == 0)) {
purgeStaleLsps(ctx);
+ if(isTriggeredSyncInProcess()) {
+ if (srp == null) {
+ return false;
+ }
+ final SrpIdNumber id = srp.getOperationId();
+ if (id.getValue() == 0) {
+ return false;
+ }
+ final PCEPRequest req = removeRequest(id);
+ ctx.resolveRequest(req);
+ }
stateSynchronizationAchieved(ctx);
return true;
}
private final boolean isSyncAvoidanceEnabled;
private final boolean isDeltaSyncEnabled;
private final boolean isDbVersionPresent;
- private final boolean isTriggeredInitialSynEnable;
+ private final boolean isTriggeredInitialSyncEnable;
private final boolean isTriggeredReSyncEnable;
public SyncOptimization(final PCEPSession session) {
this.isSyncAvoidanceEnabled = isSyncAvoidance(local) && isSyncAvoidance(remote);
this.isDeltaSyncEnabled = isDeltaSync(local) && isDeltaSync(remote);
this.isDbVersionPresent = localLspDbVersion != null || remoteLspDbVersion != null;
- this.isTriggeredInitialSynEnable = isTriggeredInitialSync(local) && isTriggeredInitialSync(remote);
+ this.isTriggeredInitialSyncEnable = isTriggeredInitialSync(local) && isTriggeredInitialSync(remote) &&
+ (this.isDeltaSyncEnabled || this.isSyncAvoidanceEnabled);
this.isTriggeredReSyncEnable = isTriggeredReSync(local) && isTriggeredReSync(remote);
}
}
public boolean isTriggeredInitSyncEnabled() {
- return isTriggeredInitialSynEnable;
+ return isTriggeredInitialSyncEnable;
}
public boolean isTriggeredReSyncEnabled() {
return isTriggeredReSyncEnable;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Pcrpt;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiersBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.symbolic.path.name.tlv.SymbolicPathNameBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject;
}
private Pcrpt getSyncMsg() {
+ final SrpBuilder srpBuilder = new SrpBuilder();
+ // not sue whether use 0 instead of nextRequest() or do not insert srp == SRP-ID-number = 0
+ srpBuilder.setOperationId(new SrpIdNumber(1L));
return MsgBuilderUtil.createPcRtpMessage(createLsp(0, false, Optional.of(
new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder().addAugmentation(
org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs1.class,
new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs1Builder()
- .setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(BigInteger.valueOf(3l)).build()).build()).build()), true, false), Optional.<Srp>absent(),
- createPath(Collections.<Subobject>emptyList()));
+ .setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(BigInteger.valueOf(3l)).build()).build()).build()), true, false),
+ Optional.of(srpBuilder.build()), createPath(Collections.<Subobject>emptyList()));
}
private Pcrpt getPcrt() {