You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by dr...@apache.org on 2017/06/12 14:13:45 UTC
[1/3] brooklyn-server git commit: Fix
BrooklynYamlTypeInstantiatorTest.testLoadPolicySpecWithBrooklynConfig
Repository: brooklyn-server
Updated Branches:
refs/heads/master 68babc6f2 -> ed25e5e39
Fix BrooklynYamlTypeInstantiatorTest.testLoadPolicySpecWithBrooklynConfig
Previously it relied on ServiceRestarter to have a constructor that
took a Map or ConfigBag. Now we check if the type implements
Configurable, to handle no-arg constructors as well.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/260c80f9
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/260c80f9
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/260c80f9
Branch: refs/heads/master
Commit: 260c80f95e6a62c5526d81b1f0db0cc3352d3434
Parents: 0fac0d6
Author: Aled Sage <al...@gmail.com>
Authored: Sun Jun 11 15:52:29 2017 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Sun Jun 11 16:06:46 2017 +0100
----------------------------------------------------------------------
.../brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java | 9 +++++++++
1 file changed, 9 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/260c80f9/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
index 5852139..aa1dfe9 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynYamlTypeInstantiator.java
@@ -24,7 +24,9 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
+import org.apache.brooklyn.api.objs.Configurable;
import org.apache.brooklyn.camp.brooklyn.BrooklynCampReservedKeys;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal.ConfigurationSupportInternal;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -141,6 +143,13 @@ public abstract class BrooklynYamlTypeInstantiator {
result = Reflections.invokeConstructorFromArgs(type);
if (result.isPresent())
return result.get();
+ } else if (Configurable.class.isAssignableFrom(type)) {
+ result = Reflections.invokeConstructorFromArgs(type);
+ if (result.isPresent()) {
+ ConfigurationSupportInternal configSupport = (ConfigurationSupportInternal) ((Configurable)result.get()).config();
+ configSupport.putAll(cfg);
+ return result.get();
+ }
}
throw new IllegalStateException("No known mechanism for constructing type "+type+" in "+factory.contextForLogging);
[2/3] brooklyn-server git commit: Use PolicySpec instead of policy
constructor
Posted by dr...@apache.org.
Use PolicySpec instead of policy constructor
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/0fac0d6c
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/0fac0d6c
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/0fac0d6c
Branch: refs/heads/master
Commit: 0fac0d6c99c560bacb3c1a3dac6316be66b412f9
Parents: 78f41f8
Author: Aled Sage <al...@gmail.com>
Authored: Sun Jun 11 11:28:37 2017 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Sun Jun 11 16:06:46 2017 +0100
----------------------------------------------------------------------
.../group/AbstractMembershipTrackingPolicy.java | 4 -
.../core/entity/PolicyRegistrationTest.java | 39 ++++++----
.../core/policy/basic/BasicPolicyTest.java | 20 +++++
.../core/policy/basic/PolicyConfigTest.java | 68 +++++++++--------
.../policy/basic/PolicySubscriptionTest.java | 9 ++-
.../core/policy/basic/PolicyTypeTest.java | 16 ++--
.../brooklyn/core/test/policy/TestPolicy.java | 5 --
.../group/MembershipTrackingPolicyTest.java | 14 +---
.../policy/autoscaling/AutoScalerPolicy.java | 11 ++-
.../brooklyn/policy/ha/ServiceReplacer.java | 20 +----
.../brooklyn/policy/ha/ServiceRestarter.java | 23 +-----
.../autoscaling/AutoScalerPolicyMetricTest.java | 79 +++++++++++++-------
.../AutoScalerPolicyReconfigurationTest.java | 61 ++++++++-------
.../autoscaling/AutoScalerPolicyTest.java | 52 +++++--------
.../brooklyn/policy/ha/ServiceReplacerTest.java | 14 ++--
.../policy/ha/ServiceRestarterTest.java | 15 ++--
.../testing/mocks/RestMockSimplePolicy.java | 7 --
.../util/BrooklynRestResourceUtilsTest.java | 6 +-
18 files changed, 230 insertions(+), 233 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
index 021c336..d60ec84 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
@@ -68,10 +68,6 @@ public abstract class AbstractMembershipTrackingPolicy extends AbstractPolicy {
private ConcurrentMap<String,Map<Sensor<Object>, Object>> entitySensorCache = new ConcurrentHashMap<String, Map<Sensor<Object>, Object>>();
- public AbstractMembershipTrackingPolicy(Map<?,?> flags) {
- super(flags);
- }
-
public AbstractMembershipTrackingPolicy() {
super();
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
index a46335b..59d126f 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/PolicyRegistrationTest.java
@@ -32,6 +32,7 @@ import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.sensor.EnricherSpec;
import org.apache.brooklyn.api.sensor.SensorEvent;
import org.apache.brooklyn.api.sensor.SensorEventListener;
+import org.apache.brooklyn.core.enricher.AbstractEnricher;
import org.apache.brooklyn.core.entity.lifecycle.PolicyDescriptor;
import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
@@ -51,8 +52,6 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
private static final int TIMEOUT_MS = 10*1000;
private TestEntity entity;
- private Policy policy1;
- private Policy policy2;
private List<PolicyDescriptor> added;
private List<PolicyDescriptor> removed;
@@ -61,9 +60,7 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
@Override
public void setUp() throws Exception {
super.setUp();
- entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
- policy1 = new AbstractPolicy() {};
- policy2 = new AbstractPolicy() {};
+ entity = app.createAndManageChild(EntitySpec.create(TestEntity.class).impl(TestEntityNoEnrichersImpl.class));
added = Lists.newCopyOnWriteArrayList();
removed = Lists.newCopyOnWriteArrayList();
@@ -84,14 +81,21 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
}
@Test(expectedExceptions = { UnsupportedOperationException.class })
+ @SuppressWarnings("deprecation")
public void testGetPoliciesReturnsImmutableCollection() {
- entity.getPolicies().add(policy1);
+ entity.getPolicies().add(new MyPolicy());
+ fail();
+ }
+
+ @Test(expectedExceptions = { UnsupportedOperationException.class })
+ public void testPoliciesAsListReturnsImmutableCollection() {
+ entity.policies().asList().add(new MyPolicy());
fail();
}
@Test(expectedExceptions = { UnsupportedOperationException.class })
public void testPoliciesIteratorReturnsImmutable() {
- entity.policies().add(policy1);
+ entity.policies().add(PolicySpec.create(MyPolicy.class));
Iterator<Policy> iterator = entity.policies().iterator();
iterator.next();
iterator.remove();
@@ -100,11 +104,11 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
@Test
public void testAddAndRemovePolicies() {
- entity.policies().add(policy1);
+ MyPolicy policy1 = entity.policies().add(PolicySpec.create(MyPolicy.class));
assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of(policy1));
assertEqualsEventually(added, ImmutableList.of(new PolicyDescriptor(policy1)));
- entity.policies().add(policy2);
+ MyPolicy policy2 = entity.policies().add(PolicySpec.create(MyPolicy.class));
assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of(policy1, policy2));
assertEqualsEventually(added, ImmutableList.of(new PolicyDescriptor(policy1), new PolicyDescriptor(policy2)));
@@ -119,7 +123,7 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
@Test
public void testAddPolicySpec() {
- EntitySpecTest.MyPolicy policy = entity.policies().add(PolicySpec.create(EntitySpecTest.MyPolicy.class));
+ MyPolicy policy = entity.policies().add(PolicySpec.create(MyPolicy.class));
assertNotNull(policy);
assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of(policy));
assertEqualsEventually(added, ImmutableList.of(new PolicyDescriptor(policy)));
@@ -127,16 +131,15 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
@Test
public void testAddEnricherSpec() {
- TestEntity entity2 = app.createAndManageChild(EntitySpec.create(TestEntity.class, TestEntityNoEnrichersImpl.class));
- EntitySpecTest.MyEnricher enricher = entity2.enrichers().add(EnricherSpec.create(EntitySpecTest.MyEnricher.class));
+ MyEnricher enricher = entity.enrichers().add(EnricherSpec.create(MyEnricher.class));
assertNotNull(enricher);
- assertEquals(ImmutableList.copyOf(entity2.enrichers()), ImmutableList.of(enricher));
+ assertEquals(ImmutableList.copyOf(entity.enrichers()), ImmutableList.of(enricher));
}
@Test
public void testRemoveAllPolicies() {
- entity.policies().add(policy1);
- entity.policies().add(policy2);
+ MyPolicy policy1 = entity.policies().add(PolicySpec.create(MyPolicy.class));
+ MyPolicy policy2 = entity.policies().add(PolicySpec.create(MyPolicy.class));
entity.policies().removeAllPolicies();
assertEquals(ImmutableList.copyOf(entity.policies()), ImmutableList.of());
@@ -158,4 +161,10 @@ public class PolicyRegistrationTest extends BrooklynAppUnitTestSupport {
assertEquals(actual.size(), expected.size(), "actual="+actual);
}});
}
+
+ public static class MyPolicy extends AbstractPolicy {
+ }
+
+ public static class MyEnricher extends AbstractEnricher {
+ }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java b/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
index db97c10..020b274 100644
--- a/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/policy/basic/BasicPolicyTest.java
@@ -19,18 +19,23 @@
package org.apache.brooklyn.core.policy.basic;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
import java.util.Map;
import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.BasicConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
import org.apache.brooklyn.util.collections.MutableSet;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.testng.annotations.Test;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
+
/**
* Test that policy can be created and accessed, by construction and by spec
*/
@@ -44,6 +49,9 @@ public class BasicPolicyTest extends BrooklynAppUnitTestSupport {
public static final ConfigKey<String> STR_KEY = new BasicConfigKey<String>(String.class, "akey", "a key");
public static final ConfigKey<Integer> INT_KEY_WITH_DEFAULT = new BasicConfigKey<Integer>(Integer.class, "ckey", "c key", 1);
public static final ConfigKey<String> STR_KEY_WITH_DEFAULT = new BasicConfigKey<String>(String.class, "strKey", "str key", "str key default");
+ public static final ConfigKey<String> RECONFIGURABLE_KEY = ConfigKeys.builder(String.class, "reconfigurableKey")
+ .reconfigurable(true)
+ .build();
MyPolicy(Map<?,?> flags) {
super(flags);
@@ -52,6 +60,16 @@ public class BasicPolicyTest extends BrooklynAppUnitTestSupport {
public MyPolicy() {
super();
}
+
+ @Override
+ protected <T> void doReconfigureConfig(ConfigKey<T> key, T val) {
+ if (key.equals(RECONFIGURABLE_KEY)) {
+ // allowed
+ } else {
+ super.doReconfigureConfig(key, val);
+ }
+ }
+
}
@Test
@@ -60,7 +78,9 @@ public class BasicPolicyTest extends BrooklynAppUnitTestSupport {
policy.setDisplayName("Bob");
policy.config().set(MyPolicy.STR_KEY, "aval");
policy.config().set(MyPolicy.INT_KEY, 2);
+
app.policies().add(policy);
+ assertTrue(Iterables.tryFind(app.policies(), Predicates.equalTo(policy)).isPresent());
assertEquals(policy.getDisplayName(), "Bob");
assertEquals(policy.getConfig(MyPolicy.STR_KEY), "aval");
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
index a3ee3e4..784c076 100644
--- a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyConfigTest.java
@@ -25,6 +25,7 @@ import static org.testng.Assert.fail;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
+import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.core.config.BasicConfigKey;
import org.apache.brooklyn.core.policy.basic.BasicPolicyTest.MyPolicy;
import org.apache.brooklyn.core.sensor.DependentConfiguration;
@@ -86,26 +87,28 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
@Test
public void testConfigSetToGroovyTruthFalseIsAvailable() throws Exception {
- MyPolicy policy = new MyPolicy(MutableMap.builder()
- .put(MyPolicy.INT_KEY_WITH_DEFAULT, 0)
- .build());
- app.policies().add(policy);
+ MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(MyPolicy.INT_KEY_WITH_DEFAULT, 0));
+ MyPolicy policy2 = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(MyPolicy.INT_KEY_WITH_DEFAULT.getName(), 0));
assertEquals(policy.getConfig(MyPolicy.INT_KEY_WITH_DEFAULT), (Integer)0);
+ assertEquals(policy2.getConfig(MyPolicy.INT_KEY_WITH_DEFAULT), (Integer)0);
}
@Test
public void testConfigSetToNullIsAvailable() throws Exception {
- MyPolicy policy = new MyPolicy(MutableMap.builder()
- .put(MyPolicy.STR_KEY_WITH_DEFAULT, null)
- .build());
- app.policies().add(policy);
+ MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(MyPolicy.STR_KEY_WITH_DEFAULT, (String)null));
+ MyPolicy policy2 = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(MyPolicy.STR_KEY_WITH_DEFAULT.getName(), null));
assertEquals(policy.getConfig(MyPolicy.STR_KEY_WITH_DEFAULT), null);
+ assertEquals(policy2.getConfig(MyPolicy.STR_KEY_WITH_DEFAULT), null);
}
@Test
- public void testConfigCanBeSetOnPolicy() throws Exception {
+ public void testConfigCanBeSetOnPolicyBeforeAddedToEntity() throws Exception {
MyPolicy policy = new MyPolicy();
policy.config().set(MyPolicy.STR_KEY, "aval");
policy.config().set(MyPolicy.INT_KEY, 2);
@@ -128,13 +131,11 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
@Test
public void testConfigCannotBeSetAfterApplicationIsStarted() throws Exception {
- MyPolicy policy = new MyPolicy(MutableMap.builder()
- .put(MyPolicy.STR_KEY, "origval")
- .build());
- app.policies().add(policy);
+ MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(MyPolicy.STR_KEY, "origval"));
try {
- policy.config().set(MyPolicy.STR_KEY,"newval");
+ policy.config().set(MyPolicy.STR_KEY, "newval");
fail();
} catch (UnsupportedOperationException e) {
// success
@@ -144,30 +145,34 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
}
@Test
+ public void testConfigSetterForReconfigurableKey() throws Exception {
+ MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(MyPolicy.RECONFIGURABLE_KEY, "origval"));
+ policy.config().set(MyPolicy.RECONFIGURABLE_KEY, "diffval");
+
+ assertEquals(policy.getConfig(MyPolicy.RECONFIGURABLE_KEY), "diffval");
+ }
+
+ @Test
public void testConfigReturnsDefaultValueIfNotSet() throws Exception {
- MyPolicy policy = new MyPolicy();
- app.policies().add(policy);
+ MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class));
assertEquals(policy.getConfig(MyPolicy.STR_KEY_WITH_DEFAULT), "str key default");
}
- // FIXME Should we support this now?
- @Test(enabled=false)
+ @Test
public void testGetFutureConfigWhenReady() throws Exception {
- MyPolicy policy = new MyPolicy(MutableMap.builder()
- .put(TestEntity.CONF_NAME, DependentConfiguration.whenDone(Callables.returning("aval")))
- .build());
- app.policies().add(policy);
+ MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(TestEntity.CONF_NAME, DependentConfiguration.whenDone(Callables.returning("aval"))));
- assertEquals(policy.getConfig(TestEntity.CONF_NAME), "aval");
+ assertEquals(policy.config().get(TestEntity.CONF_NAME), "aval");
}
- // FIXME Should we support this now?
- @Test(enabled=false)
+ @Test
public void testGetFutureConfigBlocksUntilReady() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
- MyPolicy policy = new MyPolicy(MutableMap.builder()
- .put(TestEntity.CONF_NAME, DependentConfiguration.whenDone(new Callable<String>() {
+ MyPolicy policy = app.policies().add(PolicySpec.create(MyPolicy.class)
+ .configure(TestEntity.CONF_NAME, DependentConfiguration.whenDone(new Callable<String>() {
@Override
public String call() {
try {
@@ -175,15 +180,14 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
} catch (InterruptedException e) {
throw Exceptions.propagate(e);
}
- }}))
- .build());
- app.policies().add(policy);
+ }})));
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
- Thread.sleep(10+EARLY_RETURN_GRACE); latch.countDown();
+ Thread.sleep(10+EARLY_RETURN_GRACE);
+ latch.countDown();
} catch (InterruptedException e) {
throw Exceptions.propagate(e);
}
@@ -191,7 +195,7 @@ public class PolicyConfigTest extends BrooklynAppUnitTestSupport {
try {
long starttime = System.currentTimeMillis();
t.start();
- assertEquals(policy.getConfig(TestEntity.CONF_NAME), "aval");
+ assertEquals(policy.config().get(TestEntity.CONF_NAME), "aval");
long endtime = System.currentTimeMillis();
assertTrue((endtime - starttime) >= 10, "starttime="+starttime+"; endtime="+endtime);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
index fbe6105..0f3310e 100644
--- a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicySubscriptionTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.SubscriptionHandle;
+import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.core.entity.RecordingSensorEventListener;
import org.apache.brooklyn.core.location.SimulatedLocation;
import org.apache.brooklyn.core.policy.AbstractPolicy;
@@ -44,7 +45,7 @@ public class PolicySubscriptionTest extends BrooklynAppUnitTestSupport {
private SimulatedLocation loc;
private TestEntity entity;
private TestEntity otherEntity;
- private AbstractPolicy policy;
+ private MyPolicy policy;
private RecordingSensorEventListener<Object> listener;
@BeforeMethod(alwaysRun=true)
@@ -55,8 +56,7 @@ public class PolicySubscriptionTest extends BrooklynAppUnitTestSupport {
entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
otherEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
listener = new RecordingSensorEventListener<>();
- policy = new AbstractPolicy() {};
- entity.policies().add(policy);
+ policy = entity.policies().add(PolicySpec.create(MyPolicy.class));
app.start(ImmutableList.of(loc));
}
@@ -150,4 +150,7 @@ public class PolicySubscriptionTest extends BrooklynAppUnitTestSupport {
assertEquals(listener.getEvents(), ImmutableList.of());
}});
}
+
+ public static class MyPolicy extends AbstractPolicy {
+ }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyTypeTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyTypeTest.java b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyTypeTest.java
index 4a5fccd..1785548 100644
--- a/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyTypeTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/policy/basic/PolicyTypeTest.java
@@ -20,28 +20,26 @@ package org.apache.brooklyn.core.policy.basic;
import static org.testng.Assert.assertEquals;
+import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.policy.PolicyType;
import org.apache.brooklyn.core.config.BasicConfigKey;
import org.apache.brooklyn.core.policy.AbstractPolicy;
-import org.testng.annotations.AfterMethod;
+import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
-public class PolicyTypeTest {
+public class PolicyTypeTest extends BrooklynAppUnitTestSupport {
private MyPolicy policy;
@BeforeMethod(alwaysRun=true)
- public void setUpTestEntity() throws Exception{
- policy = new MyPolicy();
+ @Override
+ public void setUp() throws Exception{
+ super.setUp();
+ policy = app.policies().add(PolicySpec.create(MyPolicy.class));
}
- @AfterMethod(alwaysRun=true)
- public void tearDown() throws Exception {
- // nothing to tear down; no management context not started
- }
-
@Test
public void testGetConfig() throws Exception {
PolicyType policyType = policy.getPolicyType();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/test/java/org/apache/brooklyn/core/test/policy/TestPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/test/policy/TestPolicy.java b/core/src/test/java/org/apache/brooklyn/core/test/policy/TestPolicy.java
index baa3d47..520baa1 100644
--- a/core/src/test/java/org/apache/brooklyn/core/test/policy/TestPolicy.java
+++ b/core/src/test/java/org/apache/brooklyn/core/test/policy/TestPolicy.java
@@ -43,13 +43,8 @@ public class TestPolicy extends AbstractPolicy {
.build();
public TestPolicy() {
- this(Collections.emptyMap());
}
- public TestPolicy(Map<?, ?> properties) {
- super(properties);
- }
-
public Map<?, ?> getLeftoverProperties() {
return Collections.unmodifiableMap(leftoverProperties);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java b/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
index 497a7f9..58e4c71 100644
--- a/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
+++ b/core/src/test/java/org/apache/brooklyn/entity/group/MembershipTrackingPolicyTest.java
@@ -149,9 +149,9 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
@Test
public void testDeprecatedSetGroupWorks() throws Exception {
- RecordingMembershipTrackingPolicy policy2 = new RecordingMembershipTrackingPolicy(MutableMap.of("sensorsToTrack", ImmutableSet.of(TestEntity.NAME)));
- group.policies().add(policy2);
- policy2.setGroup(group);
+ RecordingMembershipTrackingPolicy policy2 = group.policies().add(PolicySpec.create(RecordingMembershipTrackingPolicy.class)
+ .configure(RecordingMembershipTrackingPolicy.GROUP, group)
+ .configure("sensorsToTrack", ImmutableSet.of(TestEntity.NAME)));
TestEntity e1 = createAndManageChildOf(group);
e1.sensors().set(TestEntity.NAME, "myname");
@@ -255,14 +255,8 @@ public class MembershipTrackingPolicyTest extends BrooklynAppUnitTestSupport {
public static class RecordingMembershipTrackingPolicy extends AbstractMembershipTrackingPolicy {
final List<Record> records = new CopyOnWriteArrayList<Record>();
- public RecordingMembershipTrackingPolicy() {
- super();
- }
+ public RecordingMembershipTrackingPolicy() {}
- public RecordingMembershipTrackingPolicy(MutableMap<String, ?> flags) {
- super(flags);
- }
-
@Override protected void onEntityChange(Entity member) {
records.add(Record.newChanged(member));
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
index 9b48e76..a3760da 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicy.java
@@ -187,6 +187,10 @@ public class AutoScalerPolicy extends AbstractPolicy {
public Builder maxReachedNotificationDelay(Duration val) {
this.maxReachedNotificationDelay = val; return this;
}
+ /**
+ * @deprecated since 0.12.0; use {@link #buildSpec()}, or use {@link PolicySpec} directly
+ */
+ @Deprecated
public AutoScalerPolicy build() {
return new AutoScalerPolicy(toFlags());
}
@@ -455,13 +459,16 @@ public class AutoScalerPolicy extends AbstractPolicy {
};
public AutoScalerPolicy() {
- this(MutableMap.<String,Object>of());
}
+ /**
+ * @deprecated since 0.12.0; use {@link PolicySpec}
+ */
+ @Deprecated
public AutoScalerPolicy(Map<String,?> props) {
super(props);
}
-
+
@Override
public void init() {
doInit();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
index 9d71b78..9173895 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceReplacer.java
@@ -23,11 +23,8 @@ import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.TimeUnit;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.Catalog;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntityLocal;
@@ -47,9 +44,10 @@ import org.apache.brooklyn.core.sensor.BasicNotificationSensor;
import org.apache.brooklyn.entity.group.StopFailedRuntimeException;
import org.apache.brooklyn.policy.ha.HASensors.FailureDescriptor;
import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Ticker;
import com.google.common.collect.Lists;
@@ -97,22 +95,8 @@ public class ServiceReplacer extends AbstractPolicy {
protected final List<Long> consecutiveReplacementFailureTimes = Lists.newCopyOnWriteArrayList();
public ServiceReplacer() {
- this(new ConfigBag());
- }
-
- public ServiceReplacer(Map<String,?> flags) {
- this(new ConfigBag().putAll(flags));
- }
-
- public ServiceReplacer(ConfigBag configBag) {
- // TODO hierarchy should use ConfigBag, and not change flags
- super(configBag.getAllConfigMutable());
}
- public ServiceReplacer(Sensor<?> failureSensorToMonitor) {
- this(new ConfigBag().configure(FAILURE_SENSOR_TO_MONITOR, failureSensorToMonitor));
- }
-
@Override
public void setEntity(final EntityLocal entity) {
checkArgument(entity instanceof MemberReplaceable, "ServiceReplacer must take a MemberReplaceable, not %s", entity);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
----------------------------------------------------------------------
diff --git a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
index 4df27e7..03cae2e 100644
--- a/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
+++ b/policy/src/main/java/org/apache/brooklyn/policy/ha/ServiceRestarter.java
@@ -18,11 +18,8 @@
*/
package org.apache.brooklyn.policy.ha;
-import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.Catalog;
import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.api.sensor.Sensor;
@@ -39,11 +36,12 @@ import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.core.sensor.BasicNotificationSensor;
import org.apache.brooklyn.policy.ha.HASensors.FailureDescriptor;
import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.javalang.JavaClassNames;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
@@ -80,23 +78,10 @@ public class ServiceRestarter extends AbstractPolicy {
protected final AtomicReference<Long> lastFailureTime = new AtomicReference<Long>();
public ServiceRestarter() {
- this(new ConfigBag());
- }
-
- public ServiceRestarter(Map<String,?> flags) {
- this(new ConfigBag().putAll(flags));
- }
-
- public ServiceRestarter(ConfigBag configBag) {
- // TODO hierarchy should use ConfigBag, and not change flags
- super(configBag.getAllConfigMutable());
- uniqueTag = JavaClassNames.simpleClassName(getClass())+":"+getConfig(FAILURE_SENSOR_TO_MONITOR).getName();
+ super();
+ if (uniqueTag == null) uniqueTag = JavaClassNames.simpleClassName(getClass())+":"+getConfig(FAILURE_SENSOR_TO_MONITOR).getName();
}
- public ServiceRestarter(Sensor<?> failureSensorToMonitor) {
- this(new ConfigBag().configure(FAILURE_SENSOR_TO_MONITOR, failureSensorToMonitor));
- }
-
@Override
public void setEntity(final EntityLocal entity) {
Preconditions.checkArgument(entity instanceof Startable, "Restarter must take a Startable, not "+entity);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
index a5f1601..867b4ed 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyMetricTest.java
@@ -69,8 +69,11 @@ public class AutoScalerPolicyMetricTest {
public void testIncrementsSizeIffUpperBoundExceeded() {
tc.resize(1);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
tc.sensors().set(MY_ATTRIBUTE, 100);
Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 1));
@@ -83,8 +86,11 @@ public class AutoScalerPolicyMetricTest {
public void testDecrementsSizeIffLowerBoundExceeded() {
tc.resize(2);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
tc.sensors().set(MY_ATTRIBUTE, 50);
Asserts.succeedsContinually(ImmutableMap.of("timeout", SHORT_WAIT_MS), currentSizeAsserter(tc, 2));
@@ -97,8 +103,11 @@ public class AutoScalerPolicyMetricTest {
public void testIncrementsSizeInProportionToMetric() {
tc.resize(5);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
// workload 200 so requires doubling size to 10 to handle: (200*5)/100 = 10
tc.sensors().set(MY_ATTRIBUTE, 200);
@@ -113,8 +122,11 @@ public class AutoScalerPolicyMetricTest {
public void testDecrementsSizeInProportionToMetric() {
tc.resize(5);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
// workload can be handled by 4 servers, within its valid range: (49*5)/50 = 4.9
tc.sensors().set(MY_ATTRIBUTE, 49);
@@ -132,11 +144,12 @@ public class AutoScalerPolicyMetricTest {
public void testObeysMinAndMaxSize() {
tc.resize(4);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
- .metricLowerBound(50).metricUpperBound(100)
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
.minPoolSize(2).maxPoolSize(6)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
// Decreases to min-size only
tc.sensors().set(MY_ATTRIBUTE, 0);
@@ -159,12 +172,13 @@ public class AutoScalerPolicyMetricTest {
maxReachedEvents.add(event.getValue());
}});
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
- .metricLowerBound(50).metricUpperBound(100)
+ tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
.maxPoolSize(6)
.maxSizeReachedSensor(maxSizeReachedSensor)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
// workload can be handled by 6 servers, so no need to notify: 6 <= (100*6)/50
tc.sensors().set(MY_ATTRIBUTE, 600);
@@ -196,8 +210,11 @@ public class AutoScalerPolicyMetricTest {
public void testDestructionState() {
tc.resize(1);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
policy.destroy();
assertTrue(policy.isDestroyed());
@@ -212,8 +229,11 @@ public class AutoScalerPolicyMetricTest {
@Test
public void testSuspendState() {
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
policy.suspend();
assertFalse(policy.isRunning());
@@ -228,8 +248,11 @@ public class AutoScalerPolicyMetricTest {
public void testPostSuspendActions() {
tc.resize(1);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
policy.suspend();
@@ -241,8 +264,11 @@ public class AutoScalerPolicyMetricTest {
public void testPostResumeActions() {
tc.resize(1);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE).metricLowerBound(50).metricUpperBound(100).build();
- tc.policies().add(policy);
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
policy.suspend();
policy.resume();
@@ -256,13 +282,12 @@ public class AutoScalerPolicyMetricTest {
tc.resize(1);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder()
+ tc.policies().add(AutoScalerPolicy.builder()
.metric(TestEntity.SEQUENCE)
.entityWithMetric(entityWithMetric)
.metricLowerBound(50)
.metricUpperBound(100)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
// First confirm that tc is not being listened to for this entity
tc.sensors().set(TestEntity.SEQUENCE, 101);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
index 1e4fb97..571cabd 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyReconfigurationTest.java
@@ -58,11 +58,12 @@ public class AutoScalerPolicyReconfigurationTest {
public void testIncreaseMinPoolSizeCausesImmediateGrowth() {
tc.resize(2);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
- .metricLowerBound(50).metricUpperBound(100)
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
.minPoolSize(2)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
policy.config().set(AutoScalerPolicy.MIN_POOL_SIZE, 3);
@@ -73,11 +74,10 @@ public class AutoScalerPolicyReconfigurationTest {
public void testDecreaseMinPoolSizeAllowsSubsequentShrink() {
tc.resize(4);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder().metric(MY_ATTRIBUTE)
.metricLowerBound(50).metricUpperBound(100)
.minPoolSize(2)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
// 25*4 = 100 -> 2 nodes at 50 each
tc.sensors().set(MY_ATTRIBUTE, 25);
@@ -93,11 +93,10 @@ public class AutoScalerPolicyReconfigurationTest {
public void testDecreaseMaxPoolSizeCausesImmediateShrink() {
tc.resize(6);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder().metric(MY_ATTRIBUTE)
.metricLowerBound(50).metricUpperBound(100)
.maxPoolSize(6)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
policy.config().set(AutoScalerPolicy.MAX_POOL_SIZE, 4);
@@ -108,11 +107,11 @@ public class AutoScalerPolicyReconfigurationTest {
public void testIncreaseMaxPoolSizeAllowsSubsequentGrowth() {
tc.resize(3);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
.metricLowerBound(50).metricUpperBound(100)
.maxPoolSize(6)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
// 200*3 = 600 -> 6 nodes at 100 each
tc.sensors().set(MY_ATTRIBUTE, 200);
@@ -129,10 +128,11 @@ public class AutoScalerPolicyReconfigurationTest {
public void testReconfigureMetricLowerBound() {
tc.resize(2);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
- .metricLowerBound(50).metricUpperBound(100)
- .build();
- tc.policies().add(policy);
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
policy.config().set(AutoScalerPolicy.METRIC_LOWER_BOUND, 51);
@@ -144,10 +144,11 @@ public class AutoScalerPolicyReconfigurationTest {
public void testReconfigureMetricUpperBound() {
tc.resize(1);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
- .metricLowerBound(50).metricUpperBound(100)
- .build();
- tc.policies().add(policy);
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
+ .buildSpec());
policy.config().set(AutoScalerPolicy.METRIC_UPPER_BOUND, 99);
@@ -159,11 +160,12 @@ public class AutoScalerPolicyReconfigurationTest {
public void testReconfigureResizeUpStabilizationDelay() {
tc.resize(1);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
- .metricLowerBound(50).metricUpperBound(100)
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
.resizeUpStabilizationDelay(Duration.TWO_MINUTES)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
policy.config().set(AutoScalerPolicy.RESIZE_UP_STABILIZATION_DELAY, Duration.ZERO);
@@ -175,11 +177,12 @@ public class AutoScalerPolicyReconfigurationTest {
public void testReconfigureResizeDownStabilizationDelay() {
tc.resize(2);
- AutoScalerPolicy policy = new AutoScalerPolicy.Builder().metric(MY_ATTRIBUTE)
- .metricLowerBound(50).metricUpperBound(100)
+ AutoScalerPolicy policy = tc.policies().add(AutoScalerPolicy.builder()
+ .metric(MY_ATTRIBUTE)
+ .metricLowerBound(50)
+ .metricUpperBound(100)
.resizeDownStabilizationDelay(Duration.TWO_MINUTES)
- .build();
- tc.policies().add(policy);
+ .buildSpec());
policy.config().set(AutoScalerPolicy.RESIZE_DOWN_STABILIZATION_DELAY, Duration.ZERO);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
index 3342959..e487318 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyTest.java
@@ -35,11 +35,9 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.policy.PolicySpec;
-import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.trait.Resizable;
import org.apache.brooklyn.core.sensor.BasicNotificationSensor;
import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
-import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.core.test.entity.TestCluster;
import org.apache.brooklyn.test.Asserts;
import org.apache.brooklyn.util.collections.MutableList;
@@ -191,20 +189,18 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
@Test
public void testHasId() throws Exception {
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.minPoolSize(2)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
Assert.assertTrue(policy.getId()!=null);
}
@Test
public void testNeverShrinkBelowMinimum() throws Exception {
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.minPoolSize(2)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.resize(4);
resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_COLD_SENSOR, message(4, 0L, 4*10L, 4*20L));
@@ -216,10 +212,9 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
@Test
public void testNeverGrowAboveMaximmum() throws Exception {
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.maxPoolSize(5)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.resize(4);
resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(4, 1000000L, 4*10L, 4*20L));
@@ -321,14 +316,13 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
resizable.policies().remove(policy);
final AtomicInteger counter = new AtomicInteger();
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.resizeOperator(new ResizeOperator() {
@Override public Integer resize(Entity entity, Integer desiredSize) {
counter.incrementAndGet();
return desiredSize;
}})
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.sensors().emit(AutoScalerPolicy.DEFAULT_POOL_HOT_SENSOR, message(1, 21L, 1*10L, 1*20L)); // grow to 2
@@ -349,12 +343,11 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
BasicNotificationSensor<Map> customPoolColdSensor = new BasicNotificationSensor<Map>(Map.class, "custom.cold", "");
@SuppressWarnings("rawtypes")
BasicNotificationSensor<Map> customPoolOkSensor = new BasicNotificationSensor<Map>(Map.class, "custom.ok", "");
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.poolHotSensor(customPoolHotSensor)
.poolColdSensor(customPoolColdSensor)
.poolOkSensor(customPoolOkSensor)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.sensors().emit(customPoolHotSensor, message(1, 21L, 1*10L, 1*20L)); // grow to 2
Asserts.succeedsEventually(ImmutableMap.of("timeout", TIMEOUT_MS), currentSizeAsserter(resizable, 2));
@@ -369,11 +362,10 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
Duration minPeriodBetweenExecs = Duration.ZERO;
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.resizeUpStabilizationDelay(Duration.of(resizeUpStabilizationDelay, TimeUnit.MILLISECONDS))
.minPeriodBetweenExecs(minPeriodBetweenExecs)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.resize(1);
// Ignores temporary blip
@@ -413,11 +405,10 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
Duration minPeriodBetweenExecs = Duration.ZERO;
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.resizeUpStabilizationDelay(Duration.of(resizeUpStabilizationDelay, TimeUnit.MILLISECONDS))
.minPeriodBetweenExecs(minPeriodBetweenExecs)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.resize(1);
// Will grow to only the max sustained in this time window
@@ -497,11 +488,10 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
Duration minPeriodBetweenExecs = Duration.ZERO;
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.resizeDownStabilizationDelay(Duration.of(resizeStabilizationDelay, TimeUnit.MILLISECONDS))
.minPeriodBetweenExecs(minPeriodBetweenExecs)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.resize(2);
// Ignores temporary blip
@@ -535,11 +525,10 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
policy.suspend();
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.resizeDownStabilizationDelay(Duration.of(resizeDownStabilizationDelay, TimeUnit.MILLISECONDS))
.minPeriodBetweenExecs(minPeriodBetweenExecs)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.resize(3);
// Will shrink to only the min sustained in this time window
@@ -586,11 +575,10 @@ public class AutoScalerPolicyTest extends BrooklynAppUnitTestSupport {
Duration minPeriodBetweenExecs = Duration.ZERO;
resizable.policies().remove(policy);
- policy = AutoScalerPolicy.builder()
+ policy = resizable.policies().add(AutoScalerPolicy.builder()
.resizeDownStabilizationDelay(Duration.of(resizeDownStabilizationDelay, TimeUnit.MILLISECONDS))
.minPeriodBetweenExecs(minPeriodBetweenExecs)
- .build();
- resizable.policies().add(policy);
+ .buildSpec());
resizable.resize(2);
// After suitable delay, grows to desired
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
index 9c17614..5faf289 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceReplacerTest.java
@@ -103,8 +103,8 @@ public class ServiceReplacerTest {
.configure(DynamicCluster.INITIAL_SIZE, 3));
app.start(ImmutableList.<Location>of(loc));
- ServiceReplacer policy = new ServiceReplacer(new ConfigBag().configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
- cluster.policies().add(policy);
+ cluster.policies().add(PolicySpec.create(ServiceReplacer.class)
+ .configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
final TestEntity e1 = (TestEntity) Iterables.get(initialMembers, 1);
@@ -150,8 +150,8 @@ public class ServiceReplacerTest {
log.info("started "+app+" for "+JavaClassNames.niceClassAndMethod());
- ServiceReplacer policy = new ServiceReplacer(new ConfigBag().configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
- cluster.policies().add(policy);
+ cluster.policies().add(PolicySpec.create(ServiceReplacer.class)
+ .configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
final TestEntity e1 = (TestEntity) Iterables.get(initialMembers, 0);
@@ -200,10 +200,9 @@ public class ServiceReplacerTest {
.configure(DynamicCluster.QUARANTINE_FAILED_ENTITIES, true));
app.start(ImmutableList.<Location>of(loc));
- ServiceReplacer policy = new ServiceReplacer(new ConfigBag()
+ cluster.policies().add(PolicySpec.create(ServiceReplacer.class)
.configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED)
.configure(ServiceReplacer.SET_ON_FIRE_ON_FAILURE, false));
- cluster.policies().add(policy);
final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
final TestEntity e1 = (TestEntity) Iterables.get(initialMembers, 0);
@@ -289,10 +288,9 @@ public class ServiceReplacerTest {
.configure(DynamicCluster.QUARANTINE_FAILED_ENTITIES, true));
app.start(ImmutableList.<Location>of(loc));
- ServiceReplacer policy = new ServiceReplacer(new ConfigBag()
+ cluster.policies().add(PolicySpec.create(ServiceReplacer.class)
.configure(ServiceReplacer.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED)
.configure(ServiceReplacer.FAIL_ON_NUM_RECURRING_FAILURES, 3));
- cluster.policies().add(policy);
final Set<Entity> initialMembers = ImmutableSet.copyOf(cluster.getMembers());
for (int i = 0; i < 5; i++) {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
----------------------------------------------------------------------
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
index ce060e3..6f412bc 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/ha/ServiceRestarterTest.java
@@ -71,8 +71,8 @@ public class ServiceRestarterTest extends BrooklynAppUnitTestSupport {
@Test
public void testRestartsOnFailure() throws Exception {
- policy = new ServiceRestarter(new ConfigBag().configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
- e1.policies().add(policy);
+ policy = e1.policies().add(PolicySpec.create(ServiceRestarter.class)
+ .configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
e1.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e1, "simulate failure"));
@@ -84,8 +84,8 @@ public class ServiceRestarterTest extends BrooklynAppUnitTestSupport {
@Test(groups="Integration") // Has a 1 second wait
public void testDoesNotRestartsWhenHealthy() throws Exception {
- policy = new ServiceRestarter(new ConfigBag().configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
- e1.policies().add(policy);
+ policy = e1.policies().add(PolicySpec.create(ServiceRestarter.class)
+ .configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
e1.sensors().emit(HASensors.ENTITY_RECOVERED, new FailureDescriptor(e1, "not a failure"));
@@ -101,8 +101,8 @@ public class ServiceRestarterTest extends BrooklynAppUnitTestSupport {
.configure(FailingEntity.FAIL_ON_RESTART, true));
app.subscriptions().subscribe(e2, ServiceRestarter.ENTITY_RESTART_FAILED, eventListener);
- policy = new ServiceRestarter(new ConfigBag().configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
- e2.policies().add(policy);
+ policy = e2.policies().add(PolicySpec.create(ServiceRestarter.class)
+ .configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED));
e2.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e2, "simulate failure"));
@@ -123,10 +123,9 @@ public class ServiceRestarterTest extends BrooklynAppUnitTestSupport {
.configure(FailingEntity.FAIL_ON_RESTART, true));
app.subscriptions().subscribe(e2, ServiceRestarter.ENTITY_RESTART_FAILED, eventListener);
- policy = new ServiceRestarter(new ConfigBag()
+ policy = e2.policies().add(PolicySpec.create(ServiceRestarter.class)
.configure(ServiceRestarter.FAILURE_SENSOR_TO_MONITOR, HASensors.ENTITY_FAILED)
.configure(ServiceRestarter.SET_ON_FIRE_ON_FAILURE, false));
- e2.policies().add(policy);
e2.sensors().emit(HASensors.ENTITY_FAILED, new FailureDescriptor(e2, "simulate failure"));
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimplePolicy.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimplePolicy.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimplePolicy.java
index e15cdd1..cdab1ab 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimplePolicy.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/testing/mocks/RestMockSimplePolicy.java
@@ -18,8 +18,6 @@
*/
package org.apache.brooklyn.rest.testing.mocks;
-import java.util.Map;
-
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.BasicConfigKey;
import org.apache.brooklyn.core.policy.AbstractPolicy;
@@ -36,11 +34,6 @@ public class RestMockSimplePolicy extends AbstractPolicy {
super();
}
- @SuppressWarnings("rawtypes")
- public RestMockSimplePolicy(Map flags) {
- super(flags);
- }
-
@SetFromFlag("sampleConfig")
public static final ConfigKey<String> SAMPLE_CONFIG = BasicConfigKey.builder(String.class)
.name("brooklyn.rest.mock.sample.config")
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0fac0d6c/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
index 48908e3..9b17671 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtilsTest.java
@@ -204,10 +204,6 @@ public class BrooklynRestResourceUtilsTest {
}
public static class MyPolicy extends AbstractPolicy {
- public MyPolicy() {
- }
- public MyPolicy(Map<String, ?> flags) {
- super(flags);
- }
+ public MyPolicy() {}
}
}
[3/3] brooklyn-server git commit: This closes #729
Posted by dr...@apache.org.
This closes #729
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/ed25e5e3
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/ed25e5e3
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/ed25e5e3
Branch: refs/heads/master
Commit: ed25e5e390c155b2b804c35e9e28d83f5b693efe
Parents: 68babc6 260c80f
Author: Duncan Godwin <dr...@googlemail.com>
Authored: Mon Jun 12 15:13:30 2017 +0100
Committer: Duncan Godwin <dr...@googlemail.com>
Committed: Mon Jun 12 15:13:30 2017 +0100
----------------------------------------------------------------------
.../creation/BrooklynYamlTypeInstantiator.java | 9 +++
.../group/AbstractMembershipTrackingPolicy.java | 4 -
.../core/entity/PolicyRegistrationTest.java | 39 ++++++----
.../core/policy/basic/BasicPolicyTest.java | 20 +++++
.../core/policy/basic/PolicyConfigTest.java | 68 +++++++++--------
.../policy/basic/PolicySubscriptionTest.java | 9 ++-
.../core/policy/basic/PolicyTypeTest.java | 16 ++--
.../brooklyn/core/test/policy/TestPolicy.java | 5 --
.../group/MembershipTrackingPolicyTest.java | 14 +---
.../policy/autoscaling/AutoScalerPolicy.java | 11 ++-
.../brooklyn/policy/ha/ServiceReplacer.java | 20 +----
.../brooklyn/policy/ha/ServiceRestarter.java | 23 +-----
.../autoscaling/AutoScalerPolicyMetricTest.java | 79 +++++++++++++-------
.../AutoScalerPolicyReconfigurationTest.java | 61 ++++++++-------
.../autoscaling/AutoScalerPolicyTest.java | 52 +++++--------
.../brooklyn/policy/ha/ServiceReplacerTest.java | 14 ++--
.../policy/ha/ServiceRestarterTest.java | 15 ++--
.../testing/mocks/RestMockSimplePolicy.java | 7 --
.../util/BrooklynRestResourceUtilsTest.java | 6 +-
19 files changed, 239 insertions(+), 233 deletions(-)
----------------------------------------------------------------------