Repository: brooklyn-server Updated Branches: refs/heads/master af4576d09 -> cbec083b1
Fix usage of AtomicBooleas CAS idiom Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/08432bec Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/08432bec Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/08432bec Branch: refs/heads/master Commit: 08432bec90209d20d2ac5efd21417ba32640a781 Parents: 82511c3 Author: Andrew Donald Kennedy <[email protected]> Authored: Thu Jun 16 08:17:24 2016 +0100 Committer: Andrew Donald Kennedy <[email protected]> Committed: Thu Jun 16 09:10:50 2016 +0100 ---------------------------------------------------------------------- .../core/internal/BrooklynInitialization.java | 23 +++++++------ .../brooklyn/core/location/PortRanges.java | 21 +++++------- .../mgmt/internal/LocalManagementContext.java | 36 +++++++++----------- .../core/mgmt/persist/FileBasedObjectStore.java | 26 ++++++-------- .../brooklyn/entity/java/JavaAppUtils.java | 31 +++++++---------- 5 files changed, 61 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/08432bec/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java index 6dc825d..c7bc9b7 100644 --- a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java +++ b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java @@ -61,21 +61,22 @@ public class BrooklynInitialization { * */ - public synchronized static void initAll() { - if (done.get()) return; - initTypeCoercionStandardAdapters(); - initSecureKeysBouncyCastleProvider(); - initNetworking(); - initPortRanges(); - initLegacyLanguageExtensions(); - done.set(true); + public static void initAll() { + if (done.compareAndSet(false, true)) { + initTypeCoercionStandardAdapters(); + initSecureKeysBouncyCastleProvider(); + initNetworking(); + initPortRanges(); + initLegacyLanguageExtensions(); + } } @SuppressWarnings("deprecation") public synchronized static void reinitAll() { - done.set(false); - org.apache.brooklyn.util.core.BrooklynLanguageExtensions.reinit(); - initAll(); + if (done.compareAndSet(true, false)) { + org.apache.brooklyn.util.core.BrooklynLanguageExtensions.reinit(); + initAll(); + } } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/08432bec/core/src/main/java/org/apache/brooklyn/core/location/PortRanges.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/location/PortRanges.java b/core/src/main/java/org/apache/brooklyn/core/location/PortRanges.java index 4265e36..ca4c2e4 100644 --- a/core/src/main/java/org/apache/brooklyn/core/location/PortRanges.java +++ b/core/src/main/java/org/apache/brooklyn/core/location/PortRanges.java @@ -22,23 +22,22 @@ import static com.google.common.base.Preconditions.checkArgument; import java.io.Serializable; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.concurrent.atomic.AtomicBoolean; -import org.apache.brooklyn.api.location.PortRange; -import org.apache.brooklyn.util.core.flags.TypeCoercions; -import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes; - import com.google.common.base.Function; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.primitives.Ints; +import org.apache.brooklyn.api.location.PortRange; +import org.apache.brooklyn.util.core.flags.TypeCoercions; +import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes; + public class PortRanges { public static final int MAX_PORT = 65535; @@ -246,13 +245,12 @@ public class PortRanges { } } - private static AtomicBoolean initialized = new AtomicBoolean(false); + private static AtomicBoolean initialized = new AtomicBoolean(false); + /** performs the language extensions required for this project */ @SuppressWarnings("rawtypes") public static void init() { - if (initialized.get()) return; - synchronized (initialized) { - if (initialized.get()) return; + if (initialized.compareAndSet(false, true)) { TypeCoercions.registerAdapter(Integer.class, PortRange.class, new Function<Integer,PortRange>() { public PortRange apply(Integer x) { return fromInteger(x); } }); @@ -262,12 +260,11 @@ public class PortRanges { TypeCoercions.registerAdapter(Iterable.class, PortRange.class, new Function<Iterable,PortRange>() { public PortRange apply(Iterable x) { return fromIterable(x); } }); - initialized.set(true); } } - + static { init(); } - + } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/08432bec/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContext.java index 0731b84..b1bf856 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContext.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContext.java @@ -318,26 +318,24 @@ public class LocalManagementContext extends AbstractManagementContext { @Override public void terminate() { - synchronized (terminated) { - if (terminated.getAndSet(true)) { - log.trace("Already terminated management context "+this); - // no harm in doing it twice, but it makes logs ugly! - return; - } - log.debug("Terminating management context "+this); - - INSTANCES.remove(this); - super.terminate(); - if (osgiManager!=null) { - osgiManager.stop(); - osgiManager = null; - } - if (usageManager != null) usageManager.terminate(); - if (execution != null) execution.shutdownNow(); - if (gc != null) gc.shutdownNow(); - - log.debug("Terminated management context "+this); + if (terminated.getAndSet(true)) { + log.trace("Already terminated management context "+this); + // no harm in doing it twice, but it makes logs ugly! + return; } + log.debug("Terminating management context "+this); + + INSTANCES.remove(this); + super.terminate(); + if (osgiManager!=null) { + osgiManager.stop(); + osgiManager = null; + } + if (usageManager != null) usageManager.terminate(); + if (execution != null) execution.shutdownNow(); + if (gc != null) gc.shutdownNow(); + + log.debug("Terminated management context "+this); } @Override http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/08432bec/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/FileBasedObjectStore.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/FileBasedObjectStore.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/FileBasedObjectStore.java index 980b416..e5fb831 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/FileBasedObjectStore.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/FileBasedObjectStore.java @@ -94,25 +94,19 @@ public class FileBasedObjectStore implements PersistenceObjectStore { } public void prepareForMasterUse() { - if (doneFirstContentiousWrite.get()) - return; - synchronized (this) { - if (doneFirstContentiousWrite.get()) - return; - try { - if (deferredBackupNeeded) { - // defer backup and path creation until first write - // this way if node is standby or auto, the backup is not created superfluously + if (doneFirstContentiousWrite.getAndSet(true)) return; + try { + if (deferredBackupNeeded) { + // defer backup and path creation until first write + // this way if node is standby or auto, the backup is not created superfluously - File backup = backupDirByCopying(basedir); - log.info("Persistence deferred backup, directory "+basedir+" backed up to "+backup.getAbsolutePath()); + File backup = backupDirByCopying(basedir); + log.info("Persistence deferred backup, directory "+basedir+" backed up to "+backup.getAbsolutePath()); - deferredBackupNeeded = false; - } - } catch (Exception e) { - throw Exceptions.propagate(e); + deferredBackupNeeded = false; } - doneFirstContentiousWrite.getAndSet(true); + } catch (Exception e) { + throw Exceptions.propagate(e); } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/08432bec/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java index ef161ea..374bb62 100644 --- a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java +++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaAppUtils.java @@ -235,26 +235,21 @@ public class JavaAppUtils { /** Setup renderer hints for the MXBean attributes. */ public static void init() { - if (initialized.get()) return; - synchronized (initialized) { - if (initialized.get()) return; + if (initialized.getAndSet(true)) return; - RendererHints.register(UsesJavaMXBeans.USED_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); - RendererHints.register(UsesJavaMXBeans.INIT_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); - RendererHints.register(UsesJavaMXBeans.MAX_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); - RendererHints.register(UsesJavaMXBeans.COMMITTED_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); - RendererHints.register(UsesJavaMXBeans.NON_HEAP_MEMORY_USAGE, RendererHints.displayValue(ByteSizeStrings.metric())); - RendererHints.register(UsesJavaMXBeans.TOTAL_PHYSICAL_MEMORY_SIZE, RendererHints.displayValue(ByteSizeStrings.metric())); - RendererHints.register(UsesJavaMXBeans.FREE_PHYSICAL_MEMORY_SIZE, RendererHints.displayValue(ByteSizeStrings.metric())); + RendererHints.register(UsesJavaMXBeans.USED_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); + RendererHints.register(UsesJavaMXBeans.INIT_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); + RendererHints.register(UsesJavaMXBeans.MAX_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); + RendererHints.register(UsesJavaMXBeans.COMMITTED_HEAP_MEMORY, RendererHints.displayValue(ByteSizeStrings.metric())); + RendererHints.register(UsesJavaMXBeans.NON_HEAP_MEMORY_USAGE, RendererHints.displayValue(ByteSizeStrings.metric())); + RendererHints.register(UsesJavaMXBeans.TOTAL_PHYSICAL_MEMORY_SIZE, RendererHints.displayValue(ByteSizeStrings.metric())); + RendererHints.register(UsesJavaMXBeans.FREE_PHYSICAL_MEMORY_SIZE, RendererHints.displayValue(ByteSizeStrings.metric())); - RendererHints.register(UsesJavaMXBeans.START_TIME, RendererHints.displayValue(Time.toDateString())); - RendererHints.register(UsesJavaMXBeans.UP_TIME, RendererHints.displayValue(Duration.millisToStringRounded())); - RendererHints.register(UsesJavaMXBeans.PROCESS_CPU_TIME, RendererHints.displayValue(Duration.millisToStringRounded())); - RendererHints.register(UsesJavaMXBeans.PROCESS_CPU_TIME_FRACTION_LAST, RendererHints.displayValue(MathFunctions.percent(4))); - RendererHints.register(UsesJavaMXBeans.PROCESS_CPU_TIME_FRACTION_IN_WINDOW, RendererHints.displayValue(MathFunctions.percent(4))); - - initialized.set(true); - } + RendererHints.register(UsesJavaMXBeans.START_TIME, RendererHints.displayValue(Time.toDateString())); + RendererHints.register(UsesJavaMXBeans.UP_TIME, RendererHints.displayValue(Duration.millisToStringRounded())); + RendererHints.register(UsesJavaMXBeans.PROCESS_CPU_TIME, RendererHints.displayValue(Duration.millisToStringRounded())); + RendererHints.register(UsesJavaMXBeans.PROCESS_CPU_TIME_FRACTION_LAST, RendererHints.displayValue(MathFunctions.percent(4))); + RendererHints.register(UsesJavaMXBeans.PROCESS_CPU_TIME_FRACTION_IN_WINDOW, RendererHints.displayValue(MathFunctions.percent(4))); } static {
