This is an automated email from the ASF dual-hosted git repository. dubeejw 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 50c0142 Fix heisenbug by using the correct view. (#3175) 50c0142 is described below commit 50c0142e9543b38ba2807b1c734c5af6c3116d72 Author: rodric rabbah <rod...@gmail.com> AuthorDate: Wed Jan 10 20:38:28 2018 -0500 Fix heisenbug by using the correct view. (#3175) --- .../scala/whisk/core/entity/WhiskActivation.scala | 2 +- .../core/controller/test/ActivationsApiTests.scala | 7 +++++- .../scala/whisk/core/database/test/DbUtils.scala | 26 +++++++++++++++++++--- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/common/scala/src/main/scala/whisk/core/entity/WhiskActivation.scala b/common/scala/src/main/scala/whisk/core/entity/WhiskActivation.scala index cde7507..0525f50 100644 --- a/common/scala/src/main/scala/whisk/core/entity/WhiskActivation.scala +++ b/common/scala/src/main/scala/whisk/core/entity/WhiskActivation.scala @@ -159,7 +159,7 @@ object WhiskActivation * A view for activations in a namespace additionally keyed by action name * (and package name if present) sorted by date. */ - private val filtersView = WhiskEntityQueries.view(filtersDdoc, collectionName) + val filtersView = WhiskEntityQueries.view(filtersDdoc, collectionName) override implicit val serdes = jsonFormat13(WhiskActivation.apply) diff --git a/tests/src/test/scala/whisk/core/controller/test/ActivationsApiTests.scala b/tests/src/test/scala/whisk/core/controller/test/ActivationsApiTests.scala index c36a7c1..edda225 100644 --- a/tests/src/test/scala/whisk/core/controller/test/ActivationsApiTests.scala +++ b/tests/src/test/scala/whisk/core/controller/test/ActivationsApiTests.scala @@ -338,7 +338,12 @@ class ActivationsApiTests extends ControllerTestCommon with WhiskActivationsApi }.toList activationsInPackage foreach { put(activationStore, _) } - waitOnView(activationStore, namespace.root, 4, WhiskActivation.view) + waitOnView(activationStore, namespace.addPath(EntityName("xyz")), activations.length, WhiskActivation.filtersView) + waitOnView( + activationStore, + namespace.addPath(EntityName("pkg")).addPath(EntityName("xyz")), + activationsInPackage.length, + WhiskActivation.filtersView) whisk.utils.retry { Get(s"$collectionPath?name=xyz") ~> Route.seal(routes(creds)) ~> check { diff --git a/tests/src/test/scala/whisk/core/database/test/DbUtils.scala b/tests/src/test/scala/whisk/core/database/test/DbUtils.scala index 6c87faf..62c705b 100644 --- a/tests/src/test/scala/whisk/core/database/test/DbUtils.scala +++ b/tests/src/test/scala/whisk/core/database/test/DbUtils.scala @@ -86,11 +86,31 @@ trait DbUtils extends TransactionCounter { def waitOnView[Au](db: ArtifactStore[Au], namespace: EntityName, count: Int, view: View)( implicit context: ExecutionContext, transid: TransactionId, - timeout: Duration) = { + timeout: Duration): Unit = waitOnViewImpl(db, namespace.asString, count, view) + + /** + * Wait on a view to update with documents added to namespace. This uses retry above, + * where the step performs a direct db query to retrieve the view and check the count + * matches the given value. + */ + def waitOnView[Au](db: ArtifactStore[Au], path: EntityPath, count: Int, view: View)( + implicit context: ExecutionContext, + transid: TransactionId, + timeout: Duration): Unit = waitOnViewImpl(db, path.asString, count, view) + + /** + * Wait on a view to update with documents added to namespace. This uses retry above, + * where the step performs a direct db query to retrieve the view and check the count + * matches the given value. + */ + private def waitOnViewImpl[Au](db: ArtifactStore[Au], key: String, count: Int, view: View)( + implicit context: ExecutionContext, + transid: TransactionId, + timeout: Duration): Unit = { val success = retry( () => { - val startKey = List(namespace.asString) - val endKey = List(namespace.asString, WhiskEntityQueries.TOP) + val startKey = List(key) + val endKey = List(key, WhiskEntityQueries.TOP) db.query(view.name, startKey, endKey, 0, 0, false, true, false, StaleParameter.No) map { l => if (l.length != count) { throw RetryOp() -- To stop receiving notification emails like this one, please contact ['"commits@openwhisk.apache.org" <commits@openwhisk.apache.org>'].