This is an automated email from the ASF dual-hosted git repository. ctubbsii pushed a commit to branch single-node-props in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/single-node-props by this push: new cccb8b40b1 Improve getting parent from AccumuloConfiguration cccb8b40b1 is described below commit cccb8b40b15678bc90d297a04752f48ad0d46b53 Author: Christopher Tubbs <ctubb...@apache.org> AuthorDate: Wed Apr 27 13:46:24 2022 -0400 Improve getting parent from AccumuloConfiguration * Also improve the singleton loading of DefaultConfiguration to reduce object creation --- .../apache/accumulo/core/conf/AccumuloConfiguration.java | 15 +++++++++++++-- .../apache/accumulo/core/conf/DefaultConfiguration.java | 10 ++++++++-- .../org/apache/accumulo/core/conf/SiteConfiguration.java | 5 +++++ .../accumulo/server/conf/NamespaceConfiguration.java | 14 +++++--------- .../apache/accumulo/server/conf/TableConfiguration.java | 14 +++++--------- .../org/apache/accumulo/server/conf/ZooConfiguration.java | 5 +++++ .../accumulo/server/conf/NamespaceConfigurationTest.java | 2 +- .../accumulo/server/conf/TableConfigurationTest.java | 2 +- 8 files changed, 43 insertions(+), 24 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/conf/AccumuloConfiguration.java b/core/src/main/java/org/apache/accumulo/core/conf/AccumuloConfiguration.java index 84043937c0..f7cc68ac62 100644 --- a/core/src/main/java/org/apache/accumulo/core/conf/AccumuloConfiguration.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/AccumuloConfiguration.java @@ -63,7 +63,7 @@ public abstract class AccumuloConfiguration implements Iterable<Entry<String,Str } private volatile EnumMap<Property,PrefixProps> cachedPrefixProps = new EnumMap<>(Property.class); - private Lock prefixCacheUpdateLock = new ReentrantLock(); + private final Lock prefixCacheUpdateLock = new ReentrantLock(); private static final Logger log = LoggerFactory.getLogger(AccumuloConfiguration.class); @@ -162,7 +162,9 @@ public abstract class AccumuloConfiguration implements Iterable<Entry<String,Str PrefixProps prefixProps = cachedPrefixProps.get(property); - if (prefixProps == null || prefixProps.updateCount != getUpdateCount()) { + long currentCount = getUpdateCount(); + + if (prefixProps == null || prefixProps.updateCount != currentCount) { prefixCacheUpdateLock.lock(); try { // Very important that update count is read before getting properties. Also only read it @@ -600,6 +602,15 @@ public abstract class AccumuloConfiguration implements Iterable<Entry<String,Str */ public void invalidateCache() {} + /** + * get a parent configuration or null if it does not exist. + * + * @since 2.1.0 + */ + public AccumuloConfiguration getParent() { + return null; + } + public Stream<Entry<String,String>> stream() { return StreamSupport.stream(this.spliterator(), false); } diff --git a/core/src/main/java/org/apache/accumulo/core/conf/DefaultConfiguration.java b/core/src/main/java/org/apache/accumulo/core/conf/DefaultConfiguration.java index f8d958a34d..b4c25570df 100644 --- a/core/src/main/java/org/apache/accumulo/core/conf/DefaultConfiguration.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/DefaultConfiguration.java @@ -21,15 +21,21 @@ package org.apache.accumulo.core.conf; import java.util.Arrays; import java.util.Map; import java.util.function.Predicate; +import java.util.function.Supplier; import java.util.stream.Collectors; +import com.google.common.base.Suppliers; + /** * An {@link AccumuloConfiguration} that contains only default values for properties. This class is * a singleton. */ public class DefaultConfiguration extends AccumuloConfiguration { - private static final Map<String,String> resolvedProps = + private static final Supplier<DefaultConfiguration> singleton = + Suppliers.memoize(DefaultConfiguration::new); + + private final Map<String,String> resolvedProps = Arrays.stream(Property.values()).filter(p -> p.getType() != PropertyType.PREFIX) .collect(Collectors.toMap(Property::getKey, Property::getDefaultValue)); @@ -41,7 +47,7 @@ public class DefaultConfiguration extends AccumuloConfiguration { * @return default configuration */ public static DefaultConfiguration getInstance() { - return new DefaultConfiguration(); + return singleton.get(); } @Override diff --git a/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java b/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java index fb97876fb6..e2380138a8 100644 --- a/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java @@ -271,4 +271,9 @@ public class SiteConfiguration extends AccumuloConfiguration { } }); } + + @Override + public AccumuloConfiguration getParent() { + return parent; + } } diff --git a/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java b/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java index 1e7586eeff..e3eb342332 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java +++ b/server/base/src/main/java/org/apache/accumulo/server/conf/NamespaceConfiguration.java @@ -53,15 +53,6 @@ public class NamespaceConfiguration extends AccumuloConfiguration { + Constants.ZNAMESPACE_CONF; } - /** - * Gets the parent configuration of this configuration. - * - * @return parent configuration - */ - public AccumuloConfiguration getParentConfiguration() { - return parent; - } - void setZooCacheFactory(ZooCacheFactory zcf) { this.zcf = zcf; } @@ -142,4 +133,9 @@ public class NamespaceConfiguration extends AccumuloConfiguration { public long getUpdateCount() { return parent.getUpdateCount() + getPropCacheAccessor().getZooCache().getUpdateCount(); } + + @Override + public AccumuloConfiguration getParent() { + return parent; + } } diff --git a/server/base/src/main/java/org/apache/accumulo/server/conf/TableConfiguration.java b/server/base/src/main/java/org/apache/accumulo/server/conf/TableConfiguration.java index 01ae607493..7de0d53bda 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/conf/TableConfiguration.java +++ b/server/base/src/main/java/org/apache/accumulo/server/conf/TableConfiguration.java @@ -134,15 +134,6 @@ public class TableConfiguration extends AccumuloConfiguration { return tableId; } - /** - * Gets the parent configuration of this configuration. - * - * @return parent configuration - */ - public NamespaceConfiguration getParentConfiguration() { - return parent; - } - @Override public synchronized void invalidateCache() { ZooCachePropertyAccessor pca = propCacheAccessor.get(); @@ -264,4 +255,9 @@ public class TableConfiguration extends AccumuloConfiguration { public CompactionDispatcher getCompactionDispatcher() { return compactionDispatchDeriver.derive(); } + + @Override + public AccumuloConfiguration getParent() { + return parent; + } } diff --git a/server/base/src/main/java/org/apache/accumulo/server/conf/ZooConfiguration.java b/server/base/src/main/java/org/apache/accumulo/server/conf/ZooConfiguration.java index 82129128cc..7d2306b6d7 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/conf/ZooConfiguration.java +++ b/server/base/src/main/java/org/apache/accumulo/server/conf/ZooConfiguration.java @@ -141,4 +141,9 @@ public class ZooConfiguration extends AccumuloConfiguration { public long getUpdateCount() { return parent.getUpdateCount() + propCache.getUpdateCount(); } + + @Override + public AccumuloConfiguration getParent() { + return parent; + } } diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/NamespaceConfigurationTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/NamespaceConfigurationTest.java index c5a9d35622..dcc6286760 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/conf/NamespaceConfigurationTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/conf/NamespaceConfigurationTest.java @@ -78,7 +78,7 @@ public class NamespaceConfigurationTest { @Test public void testGetters() { assertEquals(NSID, c.getNamespaceId()); - assertEquals(parent, c.getParentConfiguration()); + assertEquals(parent, c.getParent()); } @Test diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/TableConfigurationTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/TableConfigurationTest.java index f16d404a41..c92b06e129 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/conf/TableConfigurationTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/conf/TableConfigurationTest.java @@ -74,7 +74,7 @@ public class TableConfigurationTest { @Test public void testGetters() { assertEquals(TID, c.getTableId()); - assertEquals(parent, c.getParentConfiguration()); + assertEquals(parent, c.getParent()); } @Test