2 * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. All rights reserved.
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
8 package org.opendaylight.netconf.topology.spi;
10 import com.google.common.util.concurrent.ThreadFactoryBuilder;
11 import java.util.concurrent.Executor;
12 import java.util.concurrent.ThreadFactory;
13 import java.util.concurrent.TimeUnit;
14 import org.eclipse.jdt.annotation.NonNullByDefault;
15 import org.opendaylight.controller.config.threadpool.util.FlexibleThreadPoolWrapper;
16 import org.osgi.service.component.annotations.Activate;
17 import org.osgi.service.component.annotations.Component;
18 import org.osgi.service.component.annotations.Deactivate;
19 import org.osgi.service.metatype.annotations.AttributeDefinition;
20 import org.osgi.service.metatype.annotations.Designate;
21 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
24 @Component(service = NetconfTopologySchemaAssembler.class, configurationPid = "org.opendaylight.netconf.topology")
25 @Designate(ocd = NetconfTopologySchemaAssembler.Configuration.class)
26 public final class NetconfTopologySchemaAssembler implements AutoCloseable {
27 @ObjectClassDefinition
28 public @interface Configuration {
29 @AttributeDefinition(min = "0")
30 int assembler$_$min$_$threads() default 1;
31 @AttributeDefinition(min = "1")
32 int assembler$_$max$_$threads() default 4;
33 @AttributeDefinition(min = "0")
34 long assembler$_$keep$_$alive$_$millis() default 60_000;
37 private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder()
38 .setNameFormat("topology-schema-assembler-%d")
42 private final FlexibleThreadPoolWrapper threadPool;
44 public NetconfTopologySchemaAssembler(final int minThreads, final int maxThreads, final long keepAliveTime,
45 final TimeUnit unit) {
46 threadPool = new FlexibleThreadPoolWrapper(minThreads, maxThreads, keepAliveTime, unit, THREAD_FACTORY);
50 public NetconfTopologySchemaAssembler(final Configuration config) {
51 this(config.assembler$_$min$_$threads(), config.assembler$_$max$_$threads(),
52 config.assembler$_$keep$_$alive$_$millis(), TimeUnit.MILLISECONDS);
62 return threadPool.getExecutor();