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/15 16:46:55 UTC
svn commit: r1724843 - in /qpid/java/trunk/broker-core/src:
main/java/org/apache/qpid/server/model/
test/java/org/apache/qpid/server/model/testmodels/singleton/
Author: kwall
Date: Fri Jan 15 15:46:55 2016
New Revision: 1724843
URL: http://svn.apache.org/viewvc?rev=1724843&view=rev
Log:
QPID-6996: Add tmp model feature that allows a attribute update to proceed even if its value is unchanged
The role attribute is special in that its local view get update sponantenously when an election occurs
in the group. We need a special model feature to allow an attribute update to proceed even if the model
believes the value already has the desired value.
Modified:
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/ConfiguredAutomatedAttribute.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
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=1724843&r1=1724842&r2=1724843&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 Jan 15 15:46:55 2016
@@ -1685,18 +1685,21 @@ public abstract class AbstractConfigured
});
}
-
protected boolean changeAttribute(final String name, final Object expected, final Object desired)
{
synchronized (_attributes)
{
Object currentValue = getAttribute(name);
- if((currentValue == null && expected == null)
- || (currentValue != null && currentValue.equals(expected)))
+ Object actualValue = _attributes.get(name);
+
+ ConfiguredObjectAttribute<?,?> attr = _attributeTypes.get(name);
+
+ if(attr.updateAttributeDespiteUnchangedValue() ||
+ (((currentValue == null && expected == null) || (currentValue != null && currentValue.equals(expected))) &&
+ ((actualValue != null && !actualValue.equals(desired)) || (actualValue == null && desired != null))))
{
//TODO: don't put nulls
_attributes.put(name, desired);
- ConfiguredObjectAttribute<?,?> attr = _attributeTypes.get(name);
if(attr != null && attr.isAutomated())
{
automatedSetValue(name, desired);
@@ -2504,10 +2507,7 @@ public abstract class AbstractConfigured
{
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))
+ if (changeAttribute(attributeName, expected, desired))
{
attributeSet(attributeName, expected, desired);
}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java?rev=1724843&r1=1724842&r2=1724843&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java Fri Jan 15 15:46:55 2016
@@ -148,6 +148,12 @@ public class ConfiguredAutomatedAttribut
}
@Override
+ public boolean updateAttributeDespiteUnchangedValue()
+ {
+ return _annotation.updateAttributeDespiteUnchangedValue();
+ }
+
+ @Override
public String getOversizedAltText()
{
return _annotation.oversizedAltText();
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java?rev=1724843&r1=1724842&r2=1724843&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java Fri Jan 15 15:46:55 2016
@@ -73,6 +73,12 @@ public class ConfiguredDerivedAttribute<
}
@Override
+ public boolean updateAttributeDespiteUnchangedValue()
+ {
+ return false;
+ }
+
+ @Override
public String getOversizedAltText()
{
return "";
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java?rev=1724843&r1=1724842&r2=1724843&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java Fri Jan 15 15:46:55 2016
@@ -46,6 +46,8 @@ public abstract class ConfiguredObjectAt
public abstract boolean isOversized();
+ public abstract boolean updateAttributeDespiteUnchangedValue();
+
public abstract String getOversizedAltText();
public abstract String getDescription();
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java?rev=1724843&r1=1724842&r2=1724843&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java Fri Jan 15 15:46:55 2016
@@ -41,4 +41,5 @@ public @interface ManagedAttribute
/** If true, the model attribute value cannot be mutated after construction. */
boolean immutable() default false;
+ boolean updateAttributeDespiteUnchangedValue() default false;
}
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=1724843&r1=1724842&r2=1724843&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 Jan 15 15:46:55 2016
@@ -597,7 +597,7 @@ public class AbstractConfiguredObjectTes
assertEquals(originalType, object.getType());
}
- public void testAttributeSetListenerFiring()
+ public void testSetAttributesFiresListener()
{
final String objectName = "listenerFiring";
@@ -651,6 +651,55 @@ public class AbstractConfiguredObjectTes
assertEquals("null=>third", delta);
}
+ public void testSetAttributesInterpolateValues()
+ {
+ setTestSystemProperty("foo1", "myValue1");
+ setTestSystemProperty("foo2", "myValue2");
+ setTestSystemProperty("foo3", null);
+
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(ConfiguredObject.NAME, getTestName());
+ attributes.put(TestSingleton.STRING_VALUE, "${foo1}");
+
+ final TestSingleton object = _model.getObjectFactory().create(TestSingleton.class, attributes);
+
+ final AtomicInteger listenerCount = new AtomicInteger();
+ object.addChangeListener(new NoopConfigurationChangeListener()
+ {
+ @Override
+ public void attributeSet(final ConfiguredObject<?> object,
+ final String attributeName,
+ final Object oldAttributeValue,
+ final Object newAttributeValue)
+ {
+ listenerCount.incrementAndGet();
+ }
+ });
+
+ assertEquals("myValue1", object.getStringValue());
+ assertEquals("${foo1}", object.getActualAttributes().get(TestSingleton.STRING_VALUE));
+
+ // Update the actual value ${foo1} => ${foo2}
+ object.setAttributes(Collections.singletonMap(TestSingleton.STRING_VALUE, "${foo2}"));
+ assertEquals(1, listenerCount.get());
+
+ assertEquals("myValue2", object.getStringValue());
+ assertEquals("${foo2}", object.getActualAttributes().get(TestSingleton.STRING_VALUE));
+
+ // No change
+ object.setAttributes(Collections.singletonMap(TestSingleton.STRING_VALUE, "${foo2}"));
+ assertEquals(1, listenerCount.get());
+
+ // Update the actual value ${foo2} => ${foo3} (which doesn't have a value)
+ object.setAttributes(Collections.singletonMap(TestSingleton.STRING_VALUE, "${foo3}"));
+ // TODO KW - I would expect this to be equivilent to the above, but it is not because setAttribute wants the
+ // effective value as the expected.
+ //object.setAttribute(TestSingleton.STRING_VALUE, "${foo2}", "${foo3}");
+ assertEquals(2, listenerCount.get());
+ assertEquals("${foo3}", object.getStringValue());
+ assertEquals("${foo3}", object.getActualAttributes().get(TestSingleton.STRING_VALUE));
+ }
+
private static class NoopConfigurationChangeListener implements ConfigurationChangeListener
{
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org