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

Reply via email to