Author: rgodfrey
Date: Fri Jan 22 11:21:10 2016
New Revision: 1726176
URL: http://svn.apache.org/viewvc?rev=1726176&view=rev
Log:
QPID-7006 , QPID-7007 : Add operations to update BDB configuration, retrieve
statistics, clean log and perform checkpoint
Added:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java
(with props)
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBEnvironmentContainer.java
Fri Jan 22 11:21:10 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/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentFacade.java
Fri Jan 22 11:21:10 2016
@@ -72,4 +72,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);
}
Added:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java?rev=1726176&view=auto
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java
(added)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java
Fri Jan 22 11:21:10 2016
@@ -0,0 +1,213 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.store.berkeleydb;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import com.sleepycat.je.BtreeStats;
+import com.sleepycat.je.Database;
+import com.sleepycat.je.DatabaseConfig;
+import com.sleepycat.je.DatabaseStats;
+import com.sleepycat.je.DbInternal;
+import com.sleepycat.je.Environment;
+import com.sleepycat.je.EnvironmentMutableConfig;
+import com.sleepycat.je.EnvironmentStats;
+import com.sleepycat.je.StatsConfig;
+import com.sleepycat.je.TransactionStats;
+import com.sleepycat.je.config.ConfigParam;
+import com.sleepycat.je.config.EnvironmentParams;
+import com.sleepycat.je.utilint.IntegralLongAvg;
+import com.sleepycat.je.utilint.Stat;
+import com.sleepycat.je.utilint.StatDefinition;
+import com.sleepycat.je.utilint.StatGroup;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.server.model.ConfiguredObject;
+
+
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_BINS_BYLEVEL;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_BIN_COUNT;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_DELETED_LN_COUNT;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.GROUP_NAME;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.GROUP_DESC;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_INS_BYLEVEL;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_IN_COUNT;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_LN_COUNT;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_MAINTREE_MAXDEPTH;
+import static
com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_RELATCHES_REQUIRED;
+import static com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_ROOT_SPLITS;
+import static
com.sleepycat.je.dbi.BTreeStatDefinition.BTREE_BIN_ENTRIES_HISTOGRAM;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_ABORTS;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_ACTIVE;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_ACTIVE_TXNS;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_BEGINS;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_COMMITS;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_XAABORTS;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_XACOMMITS;
+import static com.sleepycat.je.dbi.TxnStatDefinition.TXN_XAPREPARES;
+
+
+final public class EnvironmentUtils
+{
+ private static final Logger LOGGER =
LoggerFactory.getLogger(EnvironmentUtils.class);
+
+ private EnvironmentUtils()
+ {
+ }
+
+ public static Map<String,Object> getTransactionStatistics(Environment
environment, boolean reset)
+ {
+ StatsConfig config = new StatsConfig();
+ config.setClear(reset);
+ config.setFast(false);
+ final TransactionStats stats = environment.getTransactionStats(config);
+ Map<String,Object> results = new LinkedHashMap<>();
+
+ results.put(TXN_ACTIVE.getName(), stats.getNActive());
+ results.put(TXN_BEGINS.getName(), stats.getNBegins());
+ results.put(TXN_COMMITS.getName(), stats.getNCommits());
+ results.put(TXN_ABORTS.getName(), stats.getNAborts());
+ results.put(TXN_XAPREPARES.getName(), stats.getNXAPrepares());
+ results.put(TXN_XACOMMITS.getName(), stats.getNXACommits());
+ results.put(TXN_XAABORTS.getName(), stats.getNXAAborts());
+
+ return results;
+ }
+
+
+ public static Map<String,Map<String,Object>>
getEnvironmentStatistics(Environment environment, boolean reset)
+ {
+ StatsConfig config = new StatsConfig();
+ config.setClear(reset);
+ config.setFast(false);
+ EnvironmentStats stats = environment.getStats(config);
+ Collection<StatGroup> statGroups = stats.getStatGroups();
+ return getStatsFromStatGroup(statGroups);
+ }
+
+ public static Map<String,Object> getDatabaseStatistics(Environment
environment, String database, boolean reset)
+ {
+ DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setReadOnly(true);
+ DbInternal.setUseExistingConfig(dbConfig, true);
+ try (Database db = environment.openDatabase(null, database, dbConfig))
+ {
+ StatsConfig config = new StatsConfig();
+ config.setClear(reset);
+ config.setFast(false);
+
+ BtreeStats stats = (BtreeStats) db.getStats(config);
+
+ Map<String, Object> results = new TreeMap<>();
+ results.put(BTREE_BIN_COUNT.getName(),
stats.getBottomInternalNodeCount());
+ results.put(BTREE_DELETED_LN_COUNT.getName(),
stats.getDeletedLeafNodeCount());
+ results.put(BTREE_IN_COUNT.getName(),
stats.getInternalNodeCount());
+ results.put(BTREE_LN_COUNT.getName(), stats.getLeafNodeCount());
+ results.put(BTREE_MAINTREE_MAXDEPTH.getName(),
stats.getMainTreeMaxDepth());
+ results.put(BTREE_INS_BYLEVEL.getName(),
Arrays.asList(stats.getINsByLevel()));
+ results.put(BTREE_BINS_BYLEVEL.getName(),
Arrays.asList(stats.getBINsByLevel()));
+ results.put(BTREE_BIN_ENTRIES_HISTOGRAM.getName(),
Arrays.asList(stats.getBINEntriesHistogram()));
+ results.put(BTREE_RELATCHES_REQUIRED.getName(),
stats.getRelatches());
+ results.put(BTREE_ROOT_SPLITS.getName(), stats.getRootSplits());
+
+ return results;
+ }
+
+ }
+
+ private static Map<String, Map<String, Object>>
getStatsFromStatGroup(final Collection<StatGroup> statGroups)
+ {
+ Map<String,Map<String,Object>> results = new LinkedHashMap<>();
+ for(StatGroup group : statGroups)
+ {
+ Map<String,Object> groupResults = new TreeMap<>();
+ for(Map.Entry<StatDefinition, Stat<?>> entry :
group.getStats().entrySet())
+ {
+ if(!entry.getValue().isNotSet())
+ {
+ Object value = entry.getValue().get();
+ if(value instanceof IntegralLongAvg)
+ {
+ value = ((Number) value).doubleValue();
+ }
+ groupResults.put(entry.getKey().getName(), value);
+
+ }
+ }
+ if(!groupResults.isEmpty())
+ {
+ results.put(group.getName(), groupResults);
+ }
+ }
+ return results;
+ }
+
+ public static void updateMutableConfig(Environment environment,
Set<String> paramsSetByDefault, boolean includeHA, final ConfiguredObject<?>
object)
+ {
+ EnvironmentMutableConfig mutableConfig =
environment.getMutableConfig();
+
+ final Set<String> contextVariables = object.getContextKeys(false);
+
+ for(Map.Entry<String, ConfigParam> entry :
EnvironmentParams.SUPPORTED_PARAMS.entrySet())
+ {
+ String paramName = entry.getKey();
+ ConfigParam param = entry.getValue();
+
+ if(param.isMutable() && (includeHA || !param.isForReplication()))
+ {
+ boolean contextValueSet = contextVariables.contains(paramName);
+ boolean currentlySetInEnv =
mutableConfig.isConfigParamSet(paramName);
+ String contextValue = contextValueSet ?
object.getContextValue(String.class, paramName) : null;
+ contextValueSet = (contextValue != null);
+
+ try
+ {
+ if(contextValueSet)
+ {
+ if(!currentlySetInEnv ||
!contextValue.equals(mutableConfig.getConfigParam(paramName)))
+ {
+ mutableConfig.setConfigParam(paramName,
contextValue);
+ LOGGER.debug("Setting BDB configuration parameter
'%1' to value '%2'.", 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);
+ }
+ }
+ catch (IllegalArgumentException e)
+ {
+ LOGGER.warn("Unable to set BDB configuration parameter
'%1' to value '%2'.", param, contextValue, e);
+ }
+
+ }
+ }
+ }
+
+}
Propchange:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/EnvironmentUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java
Fri Jan 22 11:21:10 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;
@@ -61,6 +67,20 @@ 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.FILE_LOGGING_LEVEL,
+ EnvironmentConfig.CONSOLE_LOGGING_LEVEL,
+ EnvironmentConfig.MAX_MEMORY,
+ EnvironmentConfig.MAX_MEMORY_PERCENT
+ ));
+ PARAMS_SET_BY_DEFAULT = Collections.unmodifiableSet(excludes);
+ }
+
+
public StandardEnvironmentFacade(StandardEnvironmentConfiguration
configuration)
{
_storePath = configuration.getStorePath();
@@ -240,6 +260,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/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
Fri Jan 22 11:21:10 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,23 +48,9 @@ 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.CacheMode;
-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.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;
@@ -74,6 +61,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;
@@ -180,6 +168,23 @@ 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.FILE_LOGGING_LEVEL,
+ EnvironmentConfig.CONSOLE_LOGGING_LEVEL,
+ 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;
@@ -681,7 +686,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()
@@ -689,11 +694,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)
{
@@ -705,20 +833,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)
{
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHost.java
Fri Jan 22 11:21:10 2016
@@ -26,7 +26,7 @@ import org.apache.qpid.server.model.Virt
import org.apache.qpid.server.store.SizeMonitoringSettings;
import org.apache.qpid.server.store.berkeleydb.BDBEnvironmentContainer;
-public interface BDBVirtualHost<X extends BDBVirtualHost<X>> extends
VirtualHost<X>, org.apache.qpid.server.store.FileBasedSettings,
SizeMonitoringSettings, BDBEnvironmentContainer
+public interface BDBVirtualHost<X extends BDBVirtualHost<X>> extends
VirtualHost<X>, org.apache.qpid.server.store.FileBasedSettings,
SizeMonitoringSettings, BDBEnvironmentContainer<X>
{
String STORE_PATH = "storePath";
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBVirtualHostImpl.java
Fri Jan 22 11:21:10 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/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNode.java
Fri Jan 22 11:21:10 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/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java
Fri Jan 22 11:21:10 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/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNode.java
Fri Jan 22 11:21:10 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/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java?rev=1726176&r1=1726175&r2=1726176&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java
(original)
+++
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBVirtualHostNodeImpl.java
Fri Jan 22 11:21:10 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: [email protected]
For additional commands, e-mail: [email protected]