<properties>
<guice.version>4.1.0</guice.version>
<guice.config.version>1.2.0</guice.config.version>
+ <honeycomb.infra.version>1.0.0-SNAPSHOT</honeycomb.infra.version>
</properties>
<dependencies>
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>translate-impl</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${honeycomb.infra.version}</version>
</dependency>
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>translate-api</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${honeycomb.infra.version}</version>
</dependency>
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>notification-api</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${honeycomb.infra.version}</version>
</dependency>
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>cfg-init</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${honeycomb.infra.version}</version>
</dependency>
</dependencies>
</project>
<properties>
<exec.parameters>-Xms128m -Xmx128m</exec.parameters>
<main.class>io.fd.honeycomb.samples.distro.Main</main.class>
+ <interfaces.mapping.version>1.0.0-SNAPSHOT</interfaces.mapping.version>
+ <honeycomb.min.distro.version>1.0.0-SNAPSHOT</honeycomb.min.distro.version>
</properties>
<build>
<dependency>
<groupId>io.fd.honeycomb.samples.interfaces</groupId>
<artifactId>interfaces-mapping</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${interfaces.mapping.version}</version>
</dependency>
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>minimal-distribution</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${honeycomb.min.distro.version}</version>
</dependency>
</dependencies>
<version>${project.version}</version>
</dependency>
- <!-- Keepalives -->
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>config-util</artifactId>
- <version>0.4.2-Beryllium-SR2</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.controller</groupId>
- <artifactId>threadpool-config-api</artifactId>
- <version>0.4.2-Beryllium-SR2</version>
- </dependency>
- <!---->
-
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>translate-impl</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>io.fd.honeycomb.vpp</groupId>
- <artifactId>vpp-jvpp-cfg</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>cfg-init</artifactId>
import io.fd.honeycomb.translate.read.ReaderFactory;
import io.fd.honeycomb.translate.v3po.cfgattrs.V3poConfiguration;
import io.fd.honeycomb.translate.v3po.initializers.InterfacesInitializer;
-import io.fd.honeycomb.translate.v3po.initializers.VppClasifierInitializer;
+import io.fd.honeycomb.translate.v3po.initializers.VppClassifierInitializer;
import io.fd.honeycomb.translate.v3po.initializers.VppInitializer;
import io.fd.honeycomb.translate.v3po.notification.InterfaceChangeNotificationProducer;
import io.fd.honeycomb.translate.v3po.util.NamingContext;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import net.jmob.guice.conf.core.ConfigurationModule;
-import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
public class V3poModule extends AbstractModule {
.toInstance(new NamingContext("classify-table-", "classify-table-context"));
// Executor needed for keepalives
- // TODO-minimal remove the funny wrapper. it is only here because of config subsystem
- final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
- bind(ScheduledThreadPool.class).toInstance(new ScheduledThreadPool() {
- @Override
- public ScheduledExecutorService getExecutor() {
- return executor;
- }
-
- @Override
- public int getMaxThreadCount() {
- return 1;
- }
- });
+ bind(ScheduledExecutorService.class).toInstance(Executors.newScheduledThreadPool(1));
// Readers
final Multibinder<ReaderFactory> readerFactoryBinder = Multibinder.newSetBinder(binder(), ReaderFactory.class);
final Multibinder<DataTreeInitializer> initializerBinder =
Multibinder.newSetBinder(binder(), DataTreeInitializer.class);
initializerBinder.addBinding().to(InterfacesInitializer.class);
- initializerBinder.addBinding().to(VppClasifierInitializer.class);
+ initializerBinder.addBinding().to(VppClassifierInitializer.class);
initializerBinder.addBinding().to(VppInitializer.class);
// Notifications
import io.fd.honeycomb.translate.v3po.vppstate.BridgeDomainCustomizer;
import io.fd.honeycomb.translate.v3po.vppstate.L2FibEntryCustomizer;
import io.fd.honeycomb.translate.v3po.vppstate.VersionCustomizer;
-import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
+import java.util.concurrent.ScheduledExecutorService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppState;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppStateBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.fib.attributes.L2FibTable;
private final FutureJVpp jVpp;
private final NamingContext ifcCtx;
private final NamingContext bdCtx;
- private final ScheduledThreadPool keepaliveExecutor;
+ private final ScheduledExecutorService keepaliveExecutor;
@Inject
public VppStateHoneycombReaderFactory(final FutureJVpp jVpp,
@Named("interface-context") final NamingContext ifcCtx,
@Named("bridge-domain-context") final NamingContext bdCtx,
- final ScheduledThreadPool keepaliveExecutorDependency) {
+ final ScheduledExecutorService keepaliveExecutorDependency) {
this.jVpp = jVpp;
this.ifcCtx = ifcCtx;
this.bdCtx = bdCtx;
// is truly generic
registry.add(new KeepaliveReaderWrapper<>(
new GenericReader<>(vppStateId.child(Version.class), new VersionCustomizer(jVpp)),
- keepaliveExecutor.getExecutor(), ReadTimeoutException.class, 30,
+ keepaliveExecutor, ReadTimeoutException.class, 30,
// FIXME-minimal trigger jvpp reinitialization here
() -> LOG.error("Keepalive failed. VPP is probably DOWN!")));
// BridgeDomains(Structural)
/**
* Initializes vpp-classfier node in config data tree based on operational state.
*/
-public final class VppClasifierInitializer extends AbstractDataTreeConverter<VppClassifierState, VppClassifier> {
+public final class VppClassifierInitializer extends AbstractDataTreeConverter<VppClassifierState, VppClassifier> {
private static final InstanceIdentifier<VppClassifierState> OPER_ID =
InstanceIdentifier.create(VppClassifierState.class);
private static final InstanceIdentifier<VppClassifier> CFG_ID = InstanceIdentifier.create(VppClassifier.class);
@Inject
- public VppClasifierInitializer(@Named("honeycomb-initializer") @Nonnull final DataBroker bindingDataBroker) {
+ public VppClassifierInitializer(@Named("honeycomb-initializer") @Nonnull final DataBroker bindingDataBroker) {
super(bindingDataBroker, OPER_ID, CFG_ID);
}
<properties>
<main.class>io.fd.honeycomb.vpp.distro.Main</main.class>
+ <honeycomb.min.distro.version>1.0.0-SNAPSHOT</honeycomb.min.distro.version>
</properties>
<build>
<dependency>
<groupId>io.fd.honeycomb</groupId>
<artifactId>minimal-distribution</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${honeycomb.min.distro.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>naming-context-impl</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vpp-jvpp-cfg</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>io.fd.vpp</groupId>
<artifactId>jvpp</artifactId>
import groovy.transform.ToString
import groovy.util.logging.Slf4j
import io.fd.honeycomb.infra.distro.ProviderTrait
+import io.fd.honeycomb.infra.distro.data.context.ContextPipelineModule
import io.fd.honeycomb.translate.read.ReaderFactory
import org.opendaylight.controller.md.sal.binding.api.DataBroker
import io.fd.honeycomb.vpp.context.ContextsReaderFactory
class ContextsReaderFactoryProvider extends ProviderTrait<ReaderFactory> {
@Inject
- @Named("honeycomb-context")
+ @Named(ContextPipelineModule.HONEYCOMB_CONTEXT)
DataBroker contextDataBroker
def create() { new ContextsReaderFactory(contextDataBroker) }
import org.openvpp.jvpp.future.FutureJVpp
import org.openvpp.jvpp.future.FutureJVppFacade
+/**
+ * This must be a singleton due to shutdown hook usage.
+ */
@Slf4j
@ToString
class JVppProvider extends ProviderTrait<FutureJVpp> {
def jVpp = new JVppImpl(connection)
// Closing JVpp connection with shutdown hook to erase the connection from VPP so HC will be able
- // to connect next time
- // TODO is there a safer way than a shutdown hook ?
+ // to connect next time. If JVM is force closed, this will not be executed and VPP connection
+ // with name from config will stay open and prevent next startup of HC to success
Runtime.addShutdownHook {
log.info("Disconnecting from VPP")
jVpp.close()
bind(FutureJVpp).toProvider(JVppProvider).in(Singleton)
- // Naming contexts reader exposing context storage over REST/NETCONF
+ // Naming contexts reader exposing context storage over REST/HONEYCOMB_NETCONF
Multibinder.newSetBinder(binder(), ReaderFactory.class).with {
addBinding().toProvider(ContextsReaderFactoryProvider).in(Singleton)
}
<properties>
<main.class>io.fd.honeycomb.vpp.integration.distro.Main</main.class>
+ <v3po.version>1.0.0-SNAPSHOT</v3po.version>
+ <vpp.common.min.distro.version>1.0.0-SNAPSHOT</vpp.common.min.distro.version>
</properties>
<build>
<dependency>
<groupId>io.fd.honeycomb.vpp</groupId>
<artifactId>minimal-distribution</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${vpp.common.min.distro.version}</version>
</dependency>
<dependency>
<groupId>io.fd.honeycomb.v3po</groupId>
<artifactId>v3po2vpp</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>${v3po.version}</version>
</dependency>
</dependencies>