You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by ra...@apache.org on 2018/02/15 15:25:25 UTC
[incubator-openwhisk] branch master updated: Preserve rule status
when rule is updated (#3254)
This is an automated email from the ASF dual-hosted git repository.
rabbah pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk.git
The following commit(s) were added to refs/heads/master by this push:
new 5bf2154 Preserve rule status when rule is updated (#3254)
5bf2154 is described below
commit 5bf2154af74a72f651b10b6fe934d48fb634070c
Author: James Dubee <jw...@us.ibm.com>
AuthorDate: Thu Feb 15 10:25:18 2018 -0500
Preserve rule status when rule is updated (#3254)
---
.../main/scala/whisk/core/controller/Rules.scala | 33 ++++++++++++++++++----
.../src/test/scala/system/basic/WskRuleTests.scala | 29 +++++++++++++++++++
.../whisk/core/controller/test/RulesApiTests.scala | 10 +++----
3 files changed, 61 insertions(+), 11 deletions(-)
diff --git a/core/controller/src/main/scala/whisk/core/controller/Rules.scala b/core/controller/src/main/scala/whisk/core/controller/Rules.scala
index 3031222..0e88616 100644
--- a/core/controller/src/main/scala/whisk/core/controller/Rules.scala
+++ b/core/controller/src/main/scala/whisk/core/controller/Rules.scala
@@ -85,11 +85,31 @@ trait WhiskRulesApi extends WhiskCollectionAPI with ReferencedEntities {
val request = content.resolve(entityName.namespace)
onComplete(entitlementProvider.check(user, Privilege.READ, referencedEntities(request))) {
case Success(_) =>
- putEntity(WhiskRule, entityStore, entityName.toDocId, overwrite, update(request) _, () => {
- create(request, entityName)
- }, postProcess = Some { rule: WhiskRule =>
- completeAsRuleResponse(rule, Status.ACTIVE)
- })
+ putEntity(
+ WhiskRule,
+ entityStore,
+ entityName.toDocId,
+ overwrite,
+ update(request) _,
+ () => {
+ create(request, entityName)
+ },
+ postProcess = Some { rule: WhiskRule =>
+ if (overwrite == true) {
+ val getRuleWithStatus = getTrigger(rule.trigger) map { trigger =>
+ getStatus(trigger, FullyQualifiedEntityName(rule.namespace, rule.name))
+ } map { status =>
+ rule.withStatus(status)
+ }
+
+ onComplete(getRuleWithStatus) {
+ case Success(r) => completeAsRuleResponse(rule, r.status)
+ case Failure(t) => terminate(InternalServerError)
+ }
+ } else {
+ completeAsRuleResponse(rule, Status.ACTIVE)
+ }
+ })
case Failure(f) =>
handleEntitlementFailure(f)
}
@@ -286,6 +306,7 @@ trait WhiskRulesApi extends WhiskCollectionAPI with ReferencedEntities {
val oldTriggerName = rule.trigger
getTrigger(oldTriggerName) flatMap { oldTriggerOpt =>
+ val status = getStatus(oldTriggerOpt, ruleName)
val newTriggerEntity = content.trigger getOrElse rule.trigger
val newTriggerName = newTriggerEntity
@@ -313,7 +334,7 @@ trait WhiskRulesApi extends WhiskCollectionAPI with ReferencedEntities {
WhiskTrigger.put(entityStore, oldTrigger.removeRule(ruleName))
}
- val triggerLink = ReducedRule(actionName, Status.INACTIVE)
+ val triggerLink = ReducedRule(actionName, status)
val update = WhiskTrigger.put(entityStore, newTrigger.addRule(ruleName, triggerLink))
Future.sequence(Seq(deleteOldLink.getOrElse(Future.successful(true)), update)).map(_ => r)
}
diff --git a/tests/src/test/scala/system/basic/WskRuleTests.scala b/tests/src/test/scala/system/basic/WskRuleTests.scala
index bcb9dea..62890b7 100644
--- a/tests/src/test/scala/system/basic/WskRuleTests.scala
+++ b/tests/src/test/scala/system/basic/WskRuleTests.scala
@@ -88,6 +88,35 @@ abstract class WskRuleTests extends TestHelpers with WskTestHelpers {
behavior of "Whisk rules"
+ it should "preserve rule status when a rule is updated" in withAssetCleaner(wskprops) { (wp, assetHelper) =>
+ val ruleName = withTimestamp("r1to1")
+ val triggerName = withTimestamp("t1to1")
+ val actionName = withTimestamp("a1 to 1")
+ val triggerName2 = withTimestamp("t2to1")
+ val active = Some("active".toJson)
+ val inactive = Some("inactive".toJson)
+ val statusPermutations =
+ Seq((triggerName, active), (triggerName, inactive), (triggerName2, active), (triggerName2, inactive))
+
+ ruleSetup(Seq((ruleName, triggerName, (actionName, actionName, defaultAction))), assetHelper)
+ assetHelper.withCleaner(wsk.trigger, triggerName2) { (trigger, name) =>
+ trigger.create(name)
+ }
+
+ statusPermutations.foreach {
+ case (trigger, status) =>
+ if (status == active) wsk.rule.enable(ruleName) else wsk.rule.disable(ruleName)
+ wsk.rule
+ .create(ruleName, trigger, actionName, update = true)
+ .stdout
+ .parseJson
+ .asJsObject
+ .fields
+ .get("status") shouldBe (status)
+ wsk.rule.get(ruleName).stdout.parseJson.asJsObject.fields.get("status") shouldBe (status)
+ }
+ }
+
it should "invoke the action attached on trigger fire, creating an activation for each entity including the cause" in withAssetCleaner(
wskprops) { (wp, assetHelper) =>
val ruleName = withTimestamp("r1to1")
diff --git a/tests/src/test/scala/whisk/core/controller/test/RulesApiTests.scala b/tests/src/test/scala/whisk/core/controller/test/RulesApiTests.scala
index 6430a52..78cea3c 100644
--- a/tests/src/test/scala/whisk/core/controller/test/RulesApiTests.scala
+++ b/tests/src/test/scala/whisk/core/controller/test/RulesApiTests.scala
@@ -563,7 +563,7 @@ class RulesApiTests extends ControllerTestCommon with WhiskRulesApi {
WhiskRuleResponse(
namespace,
rule.name,
- Status.ACTIVE,
+ Status.INACTIVE,
trigger.fullyQualifiedName(false),
action.fullyQualifiedName(false),
version = SemVer().upPatch))
@@ -594,7 +594,7 @@ class RulesApiTests extends ControllerTestCommon with WhiskRulesApi {
WhiskRuleResponse(
namespace,
rule.name,
- Status.ACTIVE,
+ Status.INACTIVE,
trigger.fullyQualifiedName(false),
action.fullyQualifiedName(false),
version = SemVer().upPatch))
@@ -625,7 +625,7 @@ class RulesApiTests extends ControllerTestCommon with WhiskRulesApi {
WhiskRuleResponse(
namespace,
rule.name,
- Status.ACTIVE,
+ Status.INACTIVE,
trigger.fullyQualifiedName(false),
action.fullyQualifiedName(false),
version = SemVer().upPatch))
@@ -656,7 +656,7 @@ class RulesApiTests extends ControllerTestCommon with WhiskRulesApi {
WhiskRuleResponse(
namespace,
rule.name,
- Status.ACTIVE,
+ Status.INACTIVE,
trigger.fullyQualifiedName(false),
action.fullyQualifiedName(false),
version = SemVer().upPatch))
@@ -684,7 +684,7 @@ class RulesApiTests extends ControllerTestCommon with WhiskRulesApi {
WhiskRuleResponse(
namespace,
rule.name,
- Status.ACTIVE,
+ Status.INACTIVE,
trigger.fullyQualifiedName(false),
action.fullyQualifiedName(false),
version = SemVer().upPatch))
--
To stop receiving notification emails like this one, please contact
rabbah@apache.org.