Author: rgodfrey
Date: Fri May 15 14:12:31 2015
New Revision: 1679569
URL: http://svn.apache.org/r1679569
Log:
QPID-6543 : Coalesce multi attribute updates into single store write (applied
patch by Lorenz Quack)
Modified:
qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/NoopConfigurationChangeListener.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSource.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSourceCreator.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
Modified:
qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/NoopConfigurationChangeListener.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/NoopConfigurationChangeListener.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/NoopConfigurationChangeListener.java
(original)
+++
qpid/java/trunk/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/NoopConfigurationChangeListener.java
Fri May 15 14:12:31 2015
@@ -50,4 +50,16 @@ public class NoopConfigurationChangeList
Object newAttributeValue)
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
Fri May 15 14:12:31 2015
@@ -30,6 +30,7 @@ import org.apache.qpid.server.store.Dura
public class StoreConfigurationChangeListener implements
ConfigurationChangeListener
{
private final DurableConfigurationStore _store;
+ private boolean _bulkChanges = false;
public StoreConfigurationChangeListener(DurableConfigurationStore store)
{
@@ -77,6 +78,22 @@ public class StoreConfigurationChangeLis
}
@Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+ _bulkChanges = true;
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+ if (object.isDurable() && _bulkChanges)
+ {
+ _store.update(false, object.asObjectRecord());
+ }
+ _bulkChanges = false;
+ }
+
+ @Override
public void childRemoved(ConfiguredObject object, ConfiguredObject child)
{
if(child.isDurable())
@@ -89,7 +106,7 @@ public class StoreConfigurationChangeLis
@Override
public void attributeSet(ConfiguredObject object, String attributeName,
Object oldAttributeValue, Object newAttributeValue)
{
- if(object.isDurable())
+ if (object.isDurable() && !_bulkChanges)
{
_store.update(false, object.asObjectRecord());
}
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
Fri May 15 14:12:31 2015
@@ -2105,24 +2105,57 @@ public abstract class AbstractConfigured
}
}
+ private void bulkChangeStart()
+ {
+ synchronized (_changeListeners)
+ {
+ List<ConfigurationChangeListener> copy = new
ArrayList<ConfigurationChangeListener>(_changeListeners);
+ for(ConfigurationChangeListener listener : copy)
+ {
+ listener.bulkChangeStart(this);
+ }
+ }
+ }
+
+ private void bulkChangeEnd()
+ {
+ synchronized (_changeListeners)
+ {
+ List<ConfigurationChangeListener> copy = new
ArrayList<ConfigurationChangeListener>(_changeListeners);
+ for(ConfigurationChangeListener listener : copy)
+ {
+ listener.bulkChangeEnd(this);
+ }
+ }
+ }
+
protected void changeAttributes(final Map<String, Object> attributes)
{
Collection<String> names = getAttributeNames();
- for (String name : names)
+ try
{
- if (attributes.containsKey(name))
+ bulkChangeStart();
+ for (Map.Entry<String, Object> entry : attributes.entrySet())
{
- Object desired = attributes.get(name);
- Object expected = getAttribute(name);
- Object currentValue = _attributes.get(name);
- if(((currentValue != null && !currentValue.equals(desired))
- || (currentValue == null && desired != null))
- && changeAttribute(name, expected, desired))
+ String attributeName = entry.getKey();
+ if (names.contains(attributeName))
{
- attributeSet(name, expected, desired);
+ Object desired = entry.getValue();
+ Object expected = getAttribute(attributeName);
+ Object currentValue = _attributes.get(attributeName);
+ if (((currentValue != null &&
!currentValue.equals(desired))
+ || (currentValue == null && desired != null))
+ && changeAttribute(attributeName, expected, desired))
+ {
+ attributeSet(attributeName, expected, desired);
+ }
}
}
}
+ finally
+ {
+ bulkChangeEnd();
+ }
}
protected void validateChange(final ConfiguredObject<?>
proxyForValidation, final Set<String> changedAttributes)
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java
Fri May 15 14:12:31 2015
@@ -36,4 +36,26 @@ public interface ConfigurationChangeList
void childRemoved(ConfiguredObject<?> object, ConfiguredObject<?> child);
void attributeSet(ConfiguredObject<?> object, String attributeName, Object
oldAttributeValue, Object newAttributeValue);
+
+ /**
+ * Inform the listener that several attributes of an object are about to
change.
+ *
+ * The listener may choose to defer any action in attributeSet until
bulkChangeEnd is called.
+ * There should not be multiple calls to bulkChangeStart without matching
bulkChangeEnd calls in between.
+ * There should be no calls to attributeSet for objects other than the one
passed as an argument until bulkChangeEnd is called.
+ * There should be no call to childRemove between bulkChangeStart/-End
calls.
+ * @param object the object whose state is about to change
+ * @see #bulkChangeEnd
+ */
+ void bulkChangeStart(ConfiguredObject<?> object);
+
+ /**
+ * Inform the listener that the changes announced by bulkChangeStart are
complete.
+ *
+ * The listener who has chosen to defer any action in attributeSet after
bulkChangeStart was called should now act on those changes.
+ * A call to bulkChangeEnd without a prior matching call to
bulkChangeStart should have no effect.
+ * @param object the object whose state has changed
+ * @see #bulkChangeStart
+ */
+ void bulkChangeEnd(ConfiguredObject<?> object);
}
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
Fri May 15 14:12:31 2015
@@ -3166,6 +3166,18 @@ public abstract class AbstractQueue<X ex
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
private static class EnqueueRequest
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSource.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSource.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSource.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSource.java
Fri May 15 14:12:31 2015
@@ -95,6 +95,18 @@ public class TrustStoreMessageSource ext
{
updateCertCache();
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
});
if(_trustStore.getState() == State.ACTIVE)
{
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSourceCreator.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSourceCreator.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSourceCreator.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/TrustStoreMessageSourceCreator.java
Fri May 15 14:12:31 2015
@@ -99,6 +99,18 @@ public class TrustStoreMessageSourceCrea
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
});
}
@@ -169,5 +181,17 @@ public class TrustStoreMessageSourceCrea
{
updateTrustStoreSourceRegistration(_registry,
(TrustStore<?>)object);
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
}
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
(original)
+++
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
Fri May 15 14:12:31 2015
@@ -608,6 +608,18 @@ public class VirtualHostStoreUpgraderAnd
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
});
}
Modified:
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
(original)
+++
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
Fri May 15 14:12:31 2015
@@ -559,5 +559,17 @@ public class AbstractConfiguredObjectTes
final Object newAttributeValue)
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
}
Modified:
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
(original)
+++
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
Fri May 15 14:12:31 2015
@@ -1217,5 +1217,17 @@ public class ServerSession extends Sessi
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
}
Modified:
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
(original)
+++
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
Fri May 15 14:12:31 2015
@@ -1920,6 +1920,18 @@ public class AMQChannel
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
private void consumerAdded(final Consumer<?> consumer)
Modified:
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
(original)
+++
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
Fri May 15 14:12:31 2015
@@ -958,5 +958,17 @@ public class Session_1_0 implements Sess
{
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
}
Modified:
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
(original)
+++
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagementPluginImpl.java
Fri May 15 14:12:31 2015
@@ -522,6 +522,18 @@ public class JMXManagementPluginImpl
createObjectMBeans(object);
}
}
+
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
}
Modified:
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java?rev=1679569&r1=1679568&r2=1679569&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
(original)
+++
qpid/java/trunk/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
Fri May 15 14:12:31 2015
@@ -265,4 +265,15 @@ public class VirtualHostMBean extends AM
// no-op
}
+ @Override
+ public void bulkChangeStart(final ConfiguredObject<?> object)
+ {
+
+ }
+
+ @Override
+ public void bulkChangeEnd(final ConfiguredObject<?> object)
+ {
+
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]