BUG-139: Implement PCEP state synchronization avoidance
[bgpcep.git] / pcep / segment-routing / src / main / java / org / opendaylight / controller / config / yang / pcep / sr / cfg / SrPCEPSessionProposalFactoryModule.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.config.yang.pcep.sr.cfg;
10
11 import com.google.common.base.Preconditions;
12 import java.net.InetSocketAddress;
13 import org.opendaylight.controller.config.api.JmxAttributeValidationException;
14 import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
15 import org.opendaylight.protocol.pcep.segment.routing.SegmentRoutingSessionProposalFactory;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19
20 public class SrPCEPSessionProposalFactoryModule extends org.opendaylight.controller.config.yang.pcep.sr.cfg.AbstractSrPCEPSessionProposalFactoryModule {
21
22     private static final String VALUE_IS_NOT_SET = "value is not set.";
23
24     private static final int DEADTIMER_KEEPALIVE_RATIO = 4;
25
26     private static final Logger LOG = LoggerFactory.getLogger(SrPCEPSessionProposalFactoryModule.class);
27
28     public SrPCEPSessionProposalFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
29         super(identifier, dependencyResolver);
30     }
31
32     public SrPCEPSessionProposalFactoryModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final org.opendaylight.controller.config.yang.pcep.sr.cfg.SrPCEPSessionProposalFactoryModule oldModule, final java.lang.AutoCloseable oldInstance) {
33         super(identifier, dependencyResolver, oldModule, oldInstance);
34     }
35
36     @Override
37     public void customValidation() {
38         JmxAttributeValidationException.checkNotNull(getActive(), VALUE_IS_NOT_SET, activeJmxAttribute);
39         JmxAttributeValidationException.checkNotNull(getInitiated(), VALUE_IS_NOT_SET, initiatedJmxAttribute);
40         JmxAttributeValidationException.checkNotNull(getDeadTimerValue(), VALUE_IS_NOT_SET, deadTimerValueJmxAttribute);
41         JmxAttributeValidationException.checkNotNull(getKeepAliveTimerValue(), VALUE_IS_NOT_SET, keepAliveTimerValueJmxAttribute);
42         JmxAttributeValidationException.checkNotNull(getTriggeredInitialSync(), VALUE_IS_NOT_SET, triggeredInitialSyncJmxAttribute);
43         JmxAttributeValidationException.checkNotNull(getTriggeredResync(), VALUE_IS_NOT_SET, triggeredResyncJmxAttribute);
44         JmxAttributeValidationException.checkNotNull(getDeltaLspSyncCapability(), VALUE_IS_NOT_SET, deltaLspSyncCapabilityJmxAttribute);
45         JmxAttributeValidationException.checkNotNull(getIncludeDbVersion(), VALUE_IS_NOT_SET, includeDbVersionJmxAttribute);
46         if (getKeepAliveTimerValue() != 0) {
47             JmxAttributeValidationException.checkCondition(getKeepAliveTimerValue() >= 1, "minimum value is 1.", keepAliveTimerValueJmxAttribute);
48             if (getDeadTimerValue() != 0 && (getDeadTimerValue() / getKeepAliveTimerValue() != DEADTIMER_KEEPALIVE_RATIO)) {
49                 LOG.warn("DeadTimerValue should be 4 times greater than KeepAliveTimerValue");
50             }
51         }
52         if ((getActive() || getTriggeredInitialSync() || getTriggeredResync() || getDeltaLspSyncCapability() || getIncludeDbVersion()) && !getStateful()) {
53             setStateful(true);
54         }
55         if ((getTriggeredInitialSync() || getDeltaLspSyncCapability()) && !getIncludeDbVersion()) {
56             setIncludeDbVersion(true);
57         }
58         JmxAttributeValidationException.checkNotNull(getStateful(), VALUE_IS_NOT_SET, statefulJmxAttribute);
59         JmxAttributeValidationException.checkNotNull(getSrCapable(), VALUE_IS_NOT_SET, srCapableJmxAttribute);
60     }
61
62     @Override
63     public java.lang.AutoCloseable createInstance() {
64         final SegmentRoutingSessionProposalFactory inner = new SegmentRoutingSessionProposalFactory(getDeadTimerValue(), getKeepAliveTimerValue(), getStateful(), getActive(), getInitiated(), getSrCapable(),
65             getTriggeredInitialSync(), getTriggeredResync(), getDeltaLspSyncCapability(), getIncludeDbVersion());
66         return new PCEPSessionProposalFactoryCloseable(inner);
67     }
68
69     private static final class PCEPSessionProposalFactoryCloseable implements PCEPSessionProposalFactory, AutoCloseable {
70         private final SegmentRoutingSessionProposalFactory inner;
71
72         public PCEPSessionProposalFactoryCloseable(final SegmentRoutingSessionProposalFactory inner) {
73             this.inner = Preconditions.checkNotNull(inner);
74         }
75
76         @Override
77         public void close() {
78         }
79
80         @Override
81         public Open getSessionProposal(final InetSocketAddress inetSocketAddress, final int sessionId) {
82             return this.inner.getSessionProposal(inetSocketAddress, sessionId);
83         }
84     }
85
86 }