You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2016/01/29 17:39:39 UTC

svn commit: r1727613 - in /qpid/java/branches/6.0.x: ./ bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/ bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ bdbstore/src/main/java/org/apache/qpid/server/virtualhos...

Author: kwall
Date: Fri Jan 29 16:39:39 2016
New Revision: 1727613

URL: http://svn.apache.org/viewvc?rev=1727613&view=rev
Log:
QPID-7006 , QPID-7007 : Add operations to update BDB configuration, retrieve statistics, clean log and perform checkpoint

svn merge -c 1726176,1726249   ^/qpid/java/trunk


Added:
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java
      - copied, changed from r1726176, qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java
Modified:
    qpid/java/branches/6.0.x/   (props changed)
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
    qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java

Propchange: qpid/java/branches/6.0.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jan 29 16:39:39 2016
@@ -9,5 +9,5 @@
 /qpid/branches/java-broker-vhost-refactor/java:1493674-1494547
 /qpid/branches/java-network-refactor/qpid/java:805429-821809
 /qpid/branches/qpid-2935/qpid/java:1061302-1072333
-/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555,1716602,1716606-1716610,1716619,1716636,1717269,1717299,1717401,1717446,1717449,1717626,1717691,1717735,1717780,1718744,1718889,1718893,1718918,1718922,1719026,1719028,1719033,1719037,1719047,1719051,1720340,1720664,1721151,1721198,1722019,1722246,1722339,1723064,1723194,1723563,1724216,1724251,1724257,1724292,1724375,1724397,1724432,1724582,1724603,1724780,1724843-1724844,1725295,1725569,1726244-1726246,1726358,1726436,1726449,1726456,1726646,1726653,1726755,1726778,1727608
+/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555,1716602,1716606-1716610,1716619,1716636,1717269,1717299,1717401,1717446,1717449,1717626,1717691,1717735,1717780,1718744,1718889,1718893,1718918,1718922,1719026,1719028,1719033,1719037,1719047,1719051,1720340,1720664,1721151,1721198,1722019,1722246,1722339,1723064,1723194,1723563,1724216,1724251,1724257,1724292,1724375,1724397,1724432,1724582,1724603,1724780,1724843-1724844,1725295,1725569,1726176,1726244-1726246,1726249,1726358,1726436,1726449,1726456,1726646,1726653,1726755,1726778,1727608
 /qpid/trunk/qpid:796646-796653

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java Fri Jan 29 16:39:39 2016
@@ -19,7 +19,31 @@
 
 package org.apache.qpid.server.store.berkeleydb;
 
-public interface BDBEnvironmentContainer
+import java.util.Map;
+
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ManagedOperation;
+import org.apache.qpid.server.model.Param;
+
+public interface BDBEnvironmentContainer<X extends ConfiguredObject<X>> extends ConfiguredObject<X>
 {
     void setBDBCacheSize(long cacheSize);
+
+    @ManagedOperation(description = "Update BDB mutable configuration from settings in context variables")
+    void updateMutableConfig();
+
+    @ManagedOperation(description = "Instruct BDB to attempt to clean up its log files")
+    int cleanLog();
+
+    @ManagedOperation(description = "Instruct BDB to perform a checkpoint operation")
+    void checkpoint(@Param(name = "force", defaultValue = "false") boolean force);
+
+    @ManagedOperation(description = "Get the BDB environment statistics", nonModifying = true)
+    Map<String,Map<String,Object>> environmentStatistics(@Param(name="reset", defaultValue = "false", description = "If true, reset the statistics") boolean reset);
+
+    @ManagedOperation(description = "Get the BDB transaction statistics", nonModifying = true)
+    Map<String, Object> transactionStatistics(@Param(name="reset", defaultValue = "false", description = "If true, reset the statistics")boolean reset);
+
+    @ManagedOperation(description = "Get the BDB database statistics", nonModifying = true)
+    Map<String, Object> databaseStatistics(@Param(name="database", description = "database table for which to retrieve statistics")String database, @Param(name="reset", defaultValue = "false", description = "If true, reset the statistics") boolean reset);
 }

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java Fri Jan 29 16:39:39 2016
@@ -45,6 +45,8 @@ public interface EnvironmentFacade
         put(EnvironmentConfig.LOCK_N_LOCK_TABLES, "7");
         // Turn off stats generation - feature introduced (and on by default) from BDB JE 5.0.84
         put(EnvironmentConfig.STATS_COLLECT, "false");
+        put(EnvironmentConfig.FILE_LOGGING_LEVEL, "OFF");
+        put(EnvironmentConfig.CONSOLE_LOGGING_LEVEL, "OFF");
         put(EnvironmentConfig.CLEANER_UPGRADE_TO_LOG_VERSION, "-1");
         // Automatic cleaner adjustment has been seen to stop the cleaner working at all, disable it
         // Newer versions of BDB JE 6.3 ignore this setting.
@@ -80,4 +82,16 @@ public interface EnvironmentFacade
     void setCacheSize(long cacheSize);
 
     void flushLogFailed(RuntimeException failure);
+
+    void updateMutableConfig(ConfiguredObject<?> object);
+
+    int cleanLog();
+
+    void checkpoint(final boolean force);
+
+    Map<String,Map<String,Object>> getEnvironmentStatistics(boolean reset);
+
+    Map<String, Object> getTransactionStatistics(boolean reset);
+
+    Map<String,Object> getDatabaseStatistics(String database, boolean reset);
 }

Copied: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java (from r1726176, qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java)
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java?p2=qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java&p1=qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java&r1=1726176&r2=1727613&rev=1727613&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java Fri Jan 29 16:39:39 2016
@@ -192,18 +192,18 @@ final public class EnvironmentUtils
                         if(!currentlySetInEnv || !contextValue.equals(mutableConfig.getConfigParam(paramName)))
                         {
                             mutableConfig.setConfigParam(paramName, contextValue);
-                            LOGGER.debug("Setting BDB configuration parameter '%1' to value '%2'.", param, contextValue);
+                            LOGGER.debug("Setting BDB configuration parameter '{}' to value '{}'.", param, contextValue);
                         }
                     }
                     else if(currentlySetInEnv && !paramsSetByDefault.contains(paramName))
                     {
                         mutableConfig.setConfigParam(paramName, param.getDefault());
-                        LOGGER.debug("Setting BDB configuration parameter '%1' to its default value.", param);
+                        LOGGER.debug("Setting BDB configuration parameter '{}' to its default value.", param);
                     }
                 }
                 catch (IllegalArgumentException e)
                 {
-                    LOGGER.warn("Unable to set BDB configuration parameter '%1' to value '%2'.", param, contextValue, e);
+                    LOGGER.warn("Unable to set BDB configuration parameter '{}' to value '{}'.", param, contextValue, e);
                 }
 
             }

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java Fri Jan 29 16:39:39 2016
@@ -21,14 +21,19 @@
 package org.apache.qpid.server.store.berkeleydb;
 
 import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicReference;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import com.sleepycat.je.CacheMode;
+import com.sleepycat.je.CheckpointConfig;
 import com.sleepycat.je.Database;
 import com.sleepycat.je.DatabaseConfig;
 import com.sleepycat.je.DatabaseEntry;
@@ -42,6 +47,7 @@ import com.sleepycat.je.Transaction;
 import com.sleepycat.je.TransactionConfig;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.store.berkeleydb.upgrade.Upgrader;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,6 +66,18 @@ public class StandardEnvironmentFacade i
     private final Committer _committer;
     private final File _environmentPath;
 
+    private static final Set<String> PARAMS_SET_BY_DEFAULT;
+
+    static
+    {
+        Set<String> excludes = new HashSet<>(ENVCONFIG_DEFAULTS.keySet());
+        excludes.addAll(Arrays.asList(EnvironmentConfig.MAX_MEMORY,
+                                      EnvironmentConfig.MAX_MEMORY_PERCENT
+                                      ));
+        PARAMS_SET_BY_DEFAULT = Collections.unmodifiableSet(excludes);
+    }
+
+
     public StandardEnvironmentFacade(StandardEnvironmentConfiguration configuration)
     {
         _storePath = configuration.getStorePath();
@@ -84,8 +102,6 @@ public class StandardEnvironmentFacade i
         envConfig.setAllowCreate(true);
         envConfig.setTransactional(true);
         envConfig.setCacheMode(configuration.getCacheMode());
-        envConfig.setConfigParam(EnvironmentConfig.FILE_LOGGING_LEVEL, "OFF");
-        envConfig.setConfigParam(EnvironmentConfig.CONSOLE_LOGGING_LEVEL, "OFF");
         envConfig.setLoggingHandler(new Slf4jLoggingHandler("["+configuration.getName()+"]"));
 
         LOGGER.debug("Cache mode {}", envConfig.getCacheMode());
@@ -243,6 +259,45 @@ public class StandardEnvironmentFacade i
         }
     }
 
+    @Override
+    public void updateMutableConfig(final ConfiguredObject<?> object)
+    {
+        EnvironmentUtils.updateMutableConfig(getEnvironment(), PARAMS_SET_BY_DEFAULT, false, object);
+    }
+
+    @Override
+    public int cleanLog()
+    {
+        return getEnvironment().cleanLog();
+    }
+
+    @Override
+    public void checkpoint(final boolean force)
+    {
+        CheckpointConfig ckptConfig = new CheckpointConfig();
+        ckptConfig.setForce(force);
+        getEnvironment().checkpoint(ckptConfig);
+    }
+
+    @Override
+    public Map<String,Map<String,Object>> getEnvironmentStatistics(boolean reset)
+    {
+        return EnvironmentUtils.getEnvironmentStatistics(getEnvironment(), reset);
+    }
+
+
+    @Override
+    public Map<String,Object> getDatabaseStatistics(String database, boolean reset)
+    {
+        return EnvironmentUtils.getDatabaseStatistics(getEnvironment(), database, reset);
+    }
+
+    @Override
+    public Map<String, Object> getTransactionStatistics(boolean reset)
+    {
+        return EnvironmentUtils.getTransactionStatistics(getEnvironment(), reset);
+    }
+
     private void closeSequences()
     {
         RuntimeException firstThrownException = null;

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java Fri Jan 29 16:39:39 2016
@@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.net.InetSocketAddress;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -47,24 +48,11 @@ import java.util.concurrent.atomic.Atomi
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
-import com.sleepycat.je.Database;
-import com.sleepycat.je.DatabaseConfig;
-import com.sleepycat.je.DatabaseEntry;
-import com.sleepycat.je.DatabaseException;
-import com.sleepycat.je.Durability;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
+import com.sleepycat.je.*;
 import com.sleepycat.je.Durability.ReplicaAckPolicy;
 import com.sleepycat.je.Durability.SyncPolicy;
-import com.sleepycat.je.EnvironmentConfig;
-import com.sleepycat.je.EnvironmentFailureException;
-import com.sleepycat.je.EnvironmentMutableConfig;
-import com.sleepycat.je.ExceptionEvent;
-import com.sleepycat.je.LogWriteException;
-import com.sleepycat.je.Sequence;
-import com.sleepycat.je.SequenceConfig;
-import com.sleepycat.je.Transaction;
-import com.sleepycat.je.TransactionConfig;
 import com.sleepycat.je.rep.*;
 import com.sleepycat.je.rep.impl.node.NameIdPair;
 import com.sleepycat.je.rep.util.DbPing;
@@ -75,6 +63,7 @@ import com.sleepycat.je.rep.vlsn.VLSNRan
 import com.sleepycat.je.utilint.PropUtil;
 import com.sleepycat.je.utilint.VLSN;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.store.berkeleydb.EnvironmentUtils;
 import org.apache.qpid.server.store.berkeleydb.upgrade.Upgrader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -190,6 +179,21 @@ public class ReplicatedEnvironmentFacade
         put(ReplicationConfig.CONSISTENCY_POLICY, NoConsistencyRequiredPolicy.NAME);
     }});
 
+    private static final Set<String> PARAMS_SET_BY_DEFAULT;
+
+    static
+    {
+        Set<String> excludes = new HashSet<>(ENVCONFIG_DEFAULTS.keySet());
+
+        excludes.addAll(REPCONFIG_DEFAULTS.keySet());
+
+        excludes.addAll(Arrays.asList(EnvironmentConfig.MAX_MEMORY,
+                                      EnvironmentConfig.MAX_MEMORY_PERCENT
+                                     ));
+        PARAMS_SET_BY_DEFAULT = Collections.unmodifiableSet(excludes);
+    }
+
+
     public static final String PERMITTED_NODE_LIST = "permittedNodes";
 
     private final ReplicatedEnvironmentConfiguration _configuration;
@@ -720,7 +724,7 @@ public class ReplicatedEnvironmentFacade
     {
         LOGGER.debug("Submitting a job to set cache size on {} to {}", _prettyGroupNodeName, cacheSize);
 
-        Future<Void> future = _environmentJobExecutor.submit(new Callable<Void>()
+        Callable<Void> task = new Callable<Void>()
         {
             @Override
             public Void call()
@@ -728,11 +732,134 @@ public class ReplicatedEnvironmentFacade
                 setCacheSizeInternal(cacheSize);
                 return null;
             }
-        });
-        int timeout = 1;
+        };
+        submitEnvironmentTask(1, task, "setting cache size");
+    }
+
+    @Override
+    public void updateMutableConfig(final ConfiguredObject<?> object)
+    {
+        LOGGER.debug("Submitting a job to set update mutable config on {}", _prettyGroupNodeName);
+
+        Callable<Void> task = new Callable<Void>()
+        {
+            @Override
+            public Void call()
+            {
+                EnvironmentUtils.updateMutableConfig(getEnvironment(), PARAMS_SET_BY_DEFAULT, true, object);
+                return null;
+            }
+        };
+        submitEnvironmentTask(5, task, "updating mutable config");
+
+    }
+
+
+    @Override
+    public int cleanLog()
+    {
+        LOGGER.debug("Submitting a job to clean log files on {} ", _prettyGroupNodeName);
+        int timeout = 5;
+
+        Callable<Integer> task = new Callable<Integer>()
+        {
+            @Override
+            public Integer call()
+            {
+                return getEnvironment().cleanLog();
+            }
+        };
+
+
+        Integer fileCount = submitEnvironmentTask(timeout, task, "cleaning log files");
+        return fileCount == null ? 0 : fileCount;
+    }
+
+    @Override
+    public void checkpoint(final boolean force)
+    {
+        LOGGER.debug("Submitting a job to perform checkpoint on {} ", _prettyGroupNodeName);
+        int timeout = 5;
+
+        Callable<Void> task = new Callable<Void>()
+        {
+            @Override
+            public Void call()
+            {
+                CheckpointConfig checkpointConfig = new CheckpointConfig();
+                checkpointConfig.setForce(force);
+                getEnvironment().checkpoint(checkpointConfig);
+                return null;
+            }
+        };
+
+        submitEnvironmentTask(timeout, task, "perform checkpoint");
+    }
+
+    @Override
+    public Map<String, Map<String, Object>> getEnvironmentStatistics(final boolean reset)
+    {
+        LOGGER.debug("Submitting a job to get environment statistics on {} ", _prettyGroupNodeName);
+        int timeout = 5;
+
+        Callable<Map<String,Map<String,Object>>> task = new Callable<Map<String,Map<String,Object>>>()
+        {
+            @Override
+            public Map<String,Map<String,Object>> call()
+            {
+                return EnvironmentUtils.getEnvironmentStatistics(getEnvironment(), reset);
+
+            }
+        };
+
+        return submitEnvironmentTask(timeout, task, "get environment statistics");
+    }
+
+    @Override
+    public Map<String, Object> getTransactionStatistics(final boolean reset)
+    {
+        LOGGER.debug("Submitting a job to get transaction statistics on {} ", _prettyGroupNodeName);
+        int timeout = 5;
+
+        Callable<Map<String,Object>> task = new Callable<Map<String,Object>>()
+        {
+            @Override
+            public Map<String,Object> call()
+            {
+                return EnvironmentUtils.getTransactionStatistics(getEnvironment(), reset);
+            }
+        };
+
+        return submitEnvironmentTask(timeout, task, "get transaction statistics");
+    }
+
+    @Override
+    public Map<String,Object> getDatabaseStatistics(final String database, final boolean reset)
+    {
+        LOGGER.debug("Submitting a job to get database statistics for {} on {} ", database, _prettyGroupNodeName);
+        int timeout = 5;
+
+        Callable<Map<String,Object>> task = new Callable<Map<String,Object>>()
+        {
+            @Override
+            public Map<String, Object> call()
+            {
+
+                return EnvironmentUtils.getDatabaseStatistics(getEnvironment(), database, reset);
+            }
+        };
+
+        return submitEnvironmentTask(timeout, task, "get database statistics for '" + database + "'");
+
+    }
+
+
+    private <T> T submitEnvironmentTask(final int timeout, final Callable<T> task, String action)
+    {
+        Future<T> future = _environmentJobExecutor.submit(task);
         try
         {
-            future.get(timeout, TimeUnit.SECONDS);
+            return future.get(timeout, TimeUnit.SECONDS);
         }
         catch (InterruptedException e)
         {
@@ -744,20 +871,25 @@ public class ReplicatedEnvironmentFacade
             if (cause instanceof Error)
             {
                 throw (Error) cause;
-            } else if (cause instanceof RuntimeException)
+            }
+            else if (cause instanceof RuntimeException)
             {
                 throw (RuntimeException) cause;
-            } else
+            }
+            else
             {
-                throw new ConnectionScopedRuntimeException("Unexpected exception while setting cache size", e);
+                throw new ConnectionScopedRuntimeException("Unexpected exception while " + action, e);
             }
         }
         catch (TimeoutException e)
         {
-            LOGGER.info("setting of cache size on {} timed out after {} seconds", _prettyGroupNodeName, timeout);
+            LOGGER.info("{}  on {} timed out after {} seconds", action, _prettyGroupNodeName, timeout);
         }
+
+        return null;
     }
 
+
     @Override
     public void flushLogFailed(final RuntimeException e)
     {
@@ -1410,8 +1542,6 @@ public class ReplicatedEnvironmentFacade
         envConfig.setExceptionListener(new ExceptionListener());
         envConfig.setDurability(_defaultDurability);
         envConfig.setCacheMode(_configuration.getCacheMode());
-        envConfig.setConfigParam(EnvironmentConfig.FILE_LOGGING_LEVEL, "OFF");
-        envConfig.setConfigParam(EnvironmentConfig.CONSOLE_LOGGING_LEVEL, "OFF");
         envConfig.setLoggingHandler(new Slf4jLoggingHandler("[" + _configuration.getName() + "]"));
 
         LOGGER.info("Cache mode {}", envConfig.getCacheMode());

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java Fri Jan 29 16:39:39 2016
@@ -28,7 +28,7 @@ import org.apache.qpid.server.store.Size
 import org.apache.qpid.server.store.berkeleydb.BDBEnvironmentContainer;
 import org.apache.qpid.server.virtualhost.VirtualHostImpl;
 
-public interface BDBVirtualHost<X extends BDBVirtualHost<X>> extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, org.apache.qpid.server.store.FileBasedSettings, SizeMonitoringSettings, BDBEnvironmentContainer
+public interface BDBVirtualHost<X extends BDBVirtualHost<X>> extends VirtualHostImpl<X, AMQQueue<?>, ExchangeImpl<?>>, org.apache.qpid.server.store.FileBasedSettings, SizeMonitoringSettings, BDBEnvironmentContainer<X>
 {
 
     String STORE_PATH = "storePath";

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java Fri Jan 29 16:39:39 2016
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.server.virtualhost.berkeleydb;
 
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.qpid.server.model.ManagedAttributeField;
@@ -30,6 +31,7 @@ import org.apache.qpid.server.store.Mess
 import org.apache.qpid.server.store.berkeleydb.BDBMessageStore;
 import org.apache.qpid.server.store.berkeleydb.EnvironmentFacade;
 import org.apache.qpid.server.store.berkeleydb.BDBCacheSizeSetter;
+import org.apache.qpid.server.store.berkeleydb.replication.ReplicatedEnvironmentFacade;
 import org.apache.qpid.server.virtualhost.AbstractVirtualHost;
 
 @ManagedObject(category = false, type = BDBVirtualHostImpl.VIRTUAL_HOST_TYPE)
@@ -92,4 +94,96 @@ public class BDBVirtualHostImpl extends
             }
         }
     }
+
+    @Override
+    public void updateMutableConfig()
+    {
+        getSecurityManager().authoriseUpdate(this);
+        BDBMessageStore bdbMessageStore = (BDBMessageStore) getMessageStore();
+        if (bdbMessageStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbMessageStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                environmentFacade.updateMutableConfig(this);
+            }
+        }
+    }
+
+    @Override
+    public int cleanLog()
+    {
+        getSecurityManager().authoriseUpdate(this);
+        BDBMessageStore bdbMessageStore = (BDBMessageStore) getMessageStore();
+        if (bdbMessageStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbMessageStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.cleanLog();
+            }
+        }
+        return 0;
+    }
+
+    @Override
+    public void checkpoint(final boolean force)
+    {
+        getSecurityManager().authoriseUpdate(this);
+        BDBMessageStore bdbMessageStore = (BDBMessageStore) getMessageStore();
+        if (bdbMessageStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbMessageStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                environmentFacade.checkpoint(force);
+            }
+        }
+    }
+
+    @Override
+    public Map<String, Map<String, Object>> environmentStatistics(final boolean reset)
+    {
+        BDBMessageStore bdbMessageStore = (BDBMessageStore) getMessageStore();
+        if (bdbMessageStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbMessageStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.getEnvironmentStatistics(reset);
+            }
+        }
+        return Collections.emptyMap();
+    }
+
+
+    @Override
+    public Map<String, Object> transactionStatistics(final boolean reset)
+    {
+        BDBMessageStore bdbMessageStore = (BDBMessageStore) getMessageStore();
+        if (bdbMessageStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbMessageStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.getTransactionStatistics(reset);
+            }
+        }
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public Map<String, Object> databaseStatistics(String database, final boolean reset)
+    {
+        BDBMessageStore bdbMessageStore = (BDBMessageStore) getMessageStore();
+        if (bdbMessageStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbMessageStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.getDatabaseStatistics(database, reset);
+            }
+        }
+        return Collections.emptyMap();
+    }
 }

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java Fri Jan 29 16:39:39 2016
@@ -28,7 +28,7 @@ import org.apache.qpid.server.store.berk
 import org.apache.qpid.server.store.berkeleydb.BDBEnvironmentContainer;
 
 
-public interface BDBHAVirtualHostNode<X extends BDBHAVirtualHostNode<X>> extends BDBVirtualHostNode<X>, HASettings, BDBEnvironmentContainer
+public interface BDBHAVirtualHostNode<X extends BDBHAVirtualHostNode<X>> extends BDBVirtualHostNode<X>, HASettings
 {
     public static final String GROUP_NAME = "groupName";
     public static final String ADDRESS = "address";

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java Fri Jan 29 16:39:39 2016
@@ -73,6 +73,7 @@ import org.apache.qpid.server.model.Conf
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObject;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
+import org.apache.qpid.server.model.Param;
 import org.apache.qpid.server.model.RemoteReplicationNode;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.StateTransition;
@@ -1376,6 +1377,80 @@ public class BDBHAVirtualHostNodeImpl ex
         abstract void perform();
     }
 
+    @Override
+    public void updateMutableConfig()
+    {
+        getSecurityManager().authoriseUpdate(getBroker());
+        ReplicatedEnvironmentFacade environmentFacade = getReplicatedEnvironmentFacade();
+        if (environmentFacade != null)
+        {
+            environmentFacade.updateMutableConfig(this);
+        }
+    }
+
+    @Override
+    public int cleanLog()
+    {
+        getSecurityManager().authoriseUpdate(getBroker());
+        ReplicatedEnvironmentFacade environmentFacade = getReplicatedEnvironmentFacade();
+        if (environmentFacade != null)
+        {
+            return environmentFacade.cleanLog();
+        }
+        return 0;
+    }
+
+    @Override
+    public void checkpoint(final boolean force)
+    {
+        getSecurityManager().authoriseUpdate(getBroker());
+        ReplicatedEnvironmentFacade environmentFacade = getReplicatedEnvironmentFacade();
+        if (environmentFacade != null)
+        {
+            environmentFacade.checkpoint(force);
+        }
+    }
+
+    @Override
+    public Map<String, Map<String, Object>> environmentStatistics(final boolean reset)
+    {
+        ReplicatedEnvironmentFacade environmentFacade = getReplicatedEnvironmentFacade();
+        if (environmentFacade != null)
+        {
+            return environmentFacade.getEnvironmentStatistics(reset);
+        }
+        else
+        {
+            return Collections.emptyMap();
+        }
+    }
+
+    @Override
+    public Map<String, Object> transactionStatistics(final boolean reset)
+    {
+        ReplicatedEnvironmentFacade environmentFacade = getReplicatedEnvironmentFacade();
+        if (environmentFacade != null)
+        {
+            return environmentFacade.getTransactionStatistics(reset);
+        }
+        else
+        {
+            return Collections.emptyMap();
+        }
+    }
+    @Override
+    public Map<String, Object> databaseStatistics(String database, final boolean reset)
+    {
+        ReplicatedEnvironmentFacade environmentFacade = getReplicatedEnvironmentFacade();
+        if (environmentFacade != null)
+        {
+            return environmentFacade.getDatabaseStatistics(database, reset);
+        }
+        else
+        {
+            return Collections.emptyMap();
+        }
+    }
     public static Map<String, Collection<String>> getSupportedChildTypes()
     {
         return Collections.singletonMap(VirtualHost.class.getSimpleName(), (Collection<String>) Collections.singleton(BDBHAVirtualHostImpl.VIRTUAL_HOST_TYPE));

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java Fri Jan 29 16:39:39 2016
@@ -23,7 +23,7 @@ package org.apache.qpid.server.virtualho
 import org.apache.qpid.server.model.ManagedAttribute;
 import org.apache.qpid.server.store.berkeleydb.BDBEnvironmentContainer;
 
-public interface BDBVirtualHostNode<X extends BDBVirtualHostNode<X>> extends org.apache.qpid.server.model.VirtualHostNode<X>, org.apache.qpid.server.store.FileBasedSettings, BDBEnvironmentContainer
+public interface BDBVirtualHostNode<X extends BDBVirtualHostNode<X>> extends org.apache.qpid.server.model.VirtualHostNode<X>, org.apache.qpid.server.store.FileBasedSettings, BDBEnvironmentContainer<X>
 {
     String STORE_PATH = "storePath";
 

Modified: qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java?rev=1727613&r1=1727612&r2=1727613&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java (original)
+++ qpid/java/branches/6.0.x/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java Fri Jan 29 16:39:39 2016
@@ -32,6 +32,7 @@ import org.apache.qpid.server.model.Mana
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.store.DurableConfigurationStore;
 import org.apache.qpid.server.store.berkeleydb.BDBConfigurationStore;
+import org.apache.qpid.server.store.berkeleydb.BDBMessageStore;
 import org.apache.qpid.server.store.berkeleydb.EnvironmentFacade;
 import org.apache.qpid.server.store.berkeleydb.BDBCacheSizeSetter;
 import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode;
@@ -94,4 +95,95 @@ public class BDBVirtualHostNodeImpl exte
             }
         }
     }
+
+    @Override
+    public void updateMutableConfig()
+    {
+        getSecurityManager().authoriseUpdate(getBroker());
+        BDBConfigurationStore bdbConfigurationStore = (BDBConfigurationStore) getConfigurationStore();
+        if (bdbConfigurationStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbConfigurationStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                environmentFacade.updateMutableConfig(this);
+            }
+        }
+    }
+
+    @Override
+    public int cleanLog()
+    {
+        getSecurityManager().authoriseUpdate(getBroker());
+        BDBConfigurationStore bdbConfigurationStore = (BDBConfigurationStore) getConfigurationStore();
+        if (bdbConfigurationStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbConfigurationStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.cleanLog();
+            }
+        }
+        return 0;
+    }
+
+    @Override
+    public void checkpoint(final boolean force)
+    {
+        getSecurityManager().authoriseUpdate(getBroker());
+        BDBConfigurationStore bdbConfigurationStore = (BDBConfigurationStore) getConfigurationStore();
+        if (bdbConfigurationStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbConfigurationStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                environmentFacade.checkpoint(force);
+            }
+        }
+    }
+
+    @Override
+    public Map<String, Map<String, Object>> environmentStatistics(final boolean reset)
+    {
+        BDBConfigurationStore bdbConfigurationStore = (BDBConfigurationStore) getConfigurationStore();
+        if (bdbConfigurationStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbConfigurationStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.getEnvironmentStatistics(reset);
+            }
+        }
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public Map<String, Object> transactionStatistics(final boolean reset)
+    {
+        BDBConfigurationStore bdbConfigurationStore = (BDBConfigurationStore) getConfigurationStore();
+        if (bdbConfigurationStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbConfigurationStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.getTransactionStatistics(reset);
+            }
+        }
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public Map<String, Object> databaseStatistics(String database, final boolean reset)
+    {
+        BDBConfigurationStore bdbConfigurationStore = (BDBConfigurationStore) getConfigurationStore();
+        if (bdbConfigurationStore != null)
+        {
+            EnvironmentFacade environmentFacade = bdbConfigurationStore.getEnvironmentFacade();
+            if (environmentFacade != null)
+            {
+                return environmentFacade.getDatabaseStatistics(database, reset);
+            }
+        }
+        return Collections.emptyMap();
+    }
 }




---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org