From: Tom Pantelis Date: Sat, 24 Mar 2018 00:33:03 +0000 (-0400) Subject: Remove SingletonHolder X-Git-Tag: release/fluorine~133 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=31c39251295b8866614053b98f95361cb9cf7616 Remove SingletonHolder It is not used except for the static JAVASSIST field. This was moved to BindingToNormalizedNodeCodecFactory. Change-Id: I6e503696f7f625b257b8a377099d113cd6a85fd3 Signed-off-by: Tom Pantelis --- diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java index f24eda2c4c..ddb098c17f 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java @@ -7,10 +7,11 @@ */ package org.opendaylight.controller.md.sal.binding.impl; -import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; +import javassist.ClassPool; import org.opendaylight.mdsal.binding.dom.codec.gen.impl.StreamWriterGenerator; import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy; +import org.opendaylight.mdsal.binding.generator.util.JavassistUtils; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; @@ -21,6 +22,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; * @author Thomas Pantelis */ public final class BindingToNormalizedNodeCodecFactory { + private static final JavassistUtils JAVASSIST = JavassistUtils.forClassPool(ClassPool.getDefault()); + private BindingToNormalizedNodeCodecFactory() { } @@ -32,7 +35,7 @@ public final class BindingToNormalizedNodeCodecFactory { */ public static BindingToNormalizedNodeCodec newInstance(final ClassLoadingStrategy classLoadingStrategy) { final BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry( - StreamWriterGenerator.create(SingletonHolder.JAVASSIST)); + StreamWriterGenerator.create(JAVASSIST)); return new BindingToNormalizedNodeCodec(classLoadingStrategy, codecRegistry, true); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java deleted file mode 100644 index 13312b51b3..0000000000 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.sal.binding.codegen.impl; - -import com.google.common.util.concurrent.ForwardingBlockingQueue; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.common.util.concurrent.ThreadFactoryBuilder; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import javassist.ClassPool; -import org.apache.commons.lang3.StringUtils; -import org.opendaylight.mdsal.binding.generator.util.JavassistUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public final class SingletonHolder { - private static final Logger LOG = LoggerFactory.getLogger(SingletonHolder.class); - - public static final ClassPool CLASS_POOL = ClassPool.getDefault(); - public static final JavassistUtils JAVASSIST = JavassistUtils.forClassPool(CLASS_POOL); - - public static final int CORE_NOTIFICATION_THREADS = 4; - public static final int MAX_NOTIFICATION_THREADS = 32; - // block caller thread after MAX_NOTIFICATION_THREADS + MAX_NOTIFICATION_QUEUE_SIZE pending notifications - public static final int MAX_NOTIFICATION_QUEUE_SIZE = 1000; - public static final int NOTIFICATION_THREAD_LIFE = 15; - private static final String NOTIFICATION_QUEUE_SIZE_PROPERTY = "mdsal.notificationqueue.size"; - - private static ListeningExecutorService NOTIFICATION_EXECUTOR = null; - private static ListeningExecutorService COMMIT_EXECUTOR = null; - private static ListeningExecutorService CHANGE_EVENT_EXECUTOR = null; - - private SingletonHolder() { - } - - /** - * Deprecated. - * - * @deprecated This method is only used from configuration modules and thus callers of it - * should use service injection to make the executor configurable. - */ - @Deprecated - public static synchronized ListeningExecutorService getDefaultNotificationExecutor() { - - if (NOTIFICATION_EXECUTOR == null) { - int queueSize = MAX_NOTIFICATION_QUEUE_SIZE; - final String queueValue = System.getProperty(NOTIFICATION_QUEUE_SIZE_PROPERTY); - if (StringUtils.isNotBlank(queueValue)) { - try { - queueSize = Integer.parseInt(queueValue); - LOG.trace("Queue size was set to {}", queueSize); - } catch (final NumberFormatException e) { - LOG.warn("Cannot parse {} as set by {}, using default {}", queueValue, - NOTIFICATION_QUEUE_SIZE_PROPERTY, queueSize); - } - } - - // Overriding the queue: - // ThreadPoolExecutor would not create new threads if the queue is not full, thus adding - // occurs in RejectedExecutionHandler. - // This impl saturates threadpool first, then queue. When both are full caller will get blocked. - final BlockingQueue delegate = new LinkedBlockingQueue<>(queueSize); - final BlockingQueue queue = new ForwardingBlockingQueue() { - @Override - protected BlockingQueue delegate() { - return delegate; - } - - @Override - public boolean offer(final Runnable runnrunnableable) { - // ThreadPoolExecutor will spawn a new thread after core size is reached only - // if the queue.offer returns false. - return false; - } - }; - - final ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true) - .setNameFormat("md-sal-binding-notification-%d").build(); - - final ThreadPoolExecutor executor = new ThreadPoolExecutor(CORE_NOTIFICATION_THREADS, - MAX_NOTIFICATION_THREADS, NOTIFICATION_THREAD_LIFE, TimeUnit.SECONDS, queue, factory, - // if the max threads are met, then it will raise a rejectedExecution. We then push to the queue. - (runnable, executor1) -> { - try { - executor1.getQueue().put(runnable); - } catch (final InterruptedException e) { - throw new RejectedExecutionException("Interrupted while waiting on the queue", e); - } - }); - - NOTIFICATION_EXECUTOR = MoreExecutors.listeningDecorator(executor); - } - - return NOTIFICATION_EXECUTOR; - } - - /** - * Deprecated. - * - * @deprecated This method is only used from configuration modules and thus callers of it - * should use service injection to make the executor configurable. - */ - @Deprecated - public static synchronized ListeningExecutorService getDefaultCommitExecutor() { - if (COMMIT_EXECUTOR == null) { - final ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true) - .setNameFormat("md-sal-binding-commit-%d").build(); - /* - * FIXME: this used to be newCacheThreadPool(), but MD-SAL does not have transaction - * ordering guarantees, which means that using a concurrent threadpool results - * in application data being committed in random order, potentially resulting - * in inconsistent data being present. Once proper primitives are introduced, - * concurrency can be reintroduced. - */ - final ExecutorService executor = Executors.newSingleThreadExecutor(factory); - COMMIT_EXECUTOR = MoreExecutors.listeningDecorator(executor); - } - - return COMMIT_EXECUTOR; - } - - public static synchronized ExecutorService getDefaultChangeEventExecutor() { - if (CHANGE_EVENT_EXECUTOR == null) { - final ThreadFactory factory = new ThreadFactoryBuilder().setDaemon(true) - .setNameFormat("md-sal-binding-change-%d").build(); - /* - * FIXME: this used to be newCacheThreadPool(), but MD-SAL does not have transaction - * ordering guarantees, which means that using a concurrent threadpool results - * in application data being committed in random order, potentially resulting - * in inconsistent data being present. Once proper primitives are introduced, - * concurrency can be reintroduced. - */ - final ExecutorService executor = Executors.newSingleThreadExecutor(factory); - CHANGE_EVENT_EXECUTOR = MoreExecutors.listeningDecorator(executor); - } - - return CHANGE_EVENT_EXECUTOR; - } -}