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 ed73de6 Configure a default throughput value for CosmosDB (#4037)
ed73de6 is described below
commit ed73de694c999acf5f08f9a2109b4de2d810ed4e
Author: Chetan Mehrotra <[email protected]>
AuthorDate: Mon Sep 24 19:54:16 2018 +0530
Configure a default throughput value for CosmosDB (#4037)
---
common/scala/src/main/resources/application.conf | 7 ++++---
.../core/database/cosmosdb/CosmosDBArtifactStore.scala | 3 +++
.../cosmosdb/CosmosDBArtifactStoreProvider.scala | 2 +-
.../whisk/core/database/cosmosdb/CosmosDBSupport.scala | 8 +++++++-
.../database/cosmosdb/CosmosDBArtifactStoreTests.scala | 17 +++++++++++++++++
5 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/common/scala/src/main/resources/application.conf
b/common/scala/src/main/resources/application.conf
index 0b92573..b2bcbc6 100644
--- a/common/scala/src/main/resources/application.conf
+++ b/common/scala/src/main/resources/application.conf
@@ -150,9 +150,10 @@ whisk {
# CosmosDB related configuration
# For example:
# cosmosdb {
- # endpoint = # Endpoint URL like
https://<account>.documents.azure.com:443/
- # key = # Access key
- # db = # Database name
+ # endpoint = # Endpoint URL like
https://<account>.documents.azure.com:443/
+ # key = # Access key
+ # db = # Database name
+ # throughput = 1000 # Throughput configure for each
collection within this db
#}
# transaction ID related configuration
diff --git
a/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStore.scala
b/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStore.scala
index 9292d17..ca3acba 100644
---
a/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStore.scala
+++
b/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStore.scala
@@ -74,6 +74,9 @@ class CosmosDBArtifactStore[DocumentAbstraction <:
DocumentSerializer](protected
private val countToken = createToken("count")
private val putAttachmentToken = createToken("putAttachment", read = false)
+ //Clone the returned instance as these are mutable
+ def documentCollection(): DocumentCollection = new
DocumentCollection(collection.toJson)
+
override protected[core] implicit val executionContext: ExecutionContext =
system.dispatcher
override protected[database] def put(d: DocumentAbstraction)(implicit
transid: TransactionId): Future[DocInfo] = {
diff --git
a/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreProvider.scala
b/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreProvider.scala
index d3943bf..869baf0 100644
---
a/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreProvider.scala
+++
b/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreProvider.scala
@@ -33,7 +33,7 @@ import whisk.core.entity.{DocumentReader, WhiskActivation,
WhiskAuth, WhiskEntit
import scala.reflect.ClassTag
-case class CosmosDBConfig(endpoint: String, key: String, db: String)
+case class CosmosDBConfig(endpoint: String, key: String, db: String,
throughput: Int = 1000)
case class ClientHolder(client: AsyncDocumentClient) extends Closeable {
override def close(): Unit = client.close()
diff --git
a/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBSupport.scala
b/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBSupport.scala
index d963094..f32fc87 100644
---
a/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBSupport.scala
+++
b/common/scala/src/main/scala/whisk/core/database/cosmosdb/CosmosDBSupport.scala
@@ -57,7 +57,7 @@ private[cosmosdb] trait CosmosDBSupport extends
RxObservableImplicits with Cosmo
}
}
.getOrElse {
- client.createCollection(database.getSelfLink, newDatabaseCollection,
null).blockingResult()
+ client.createCollection(database.getSelfLink, newDatabaseCollection,
dbOptions).blockingResult()
}
}
@@ -72,6 +72,12 @@ private[cosmosdb] trait CosmosDBSupport extends
RxObservableImplicits with Cosmo
defn
}
+ private def dbOptions = {
+ val opts = new RequestOptions
+ opts.setOfferThroughput(config.throughput)
+ opts
+ }
+
private def newDatabase = {
val databaseDefinition = new Database
databaseDefinition.setId(config.db)
diff --git
a/tests/src/test/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreTests.scala
b/tests/src/test/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreTests.scala
index bb45c72..5558b6d 100644
---
a/tests/src/test/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreTests.scala
+++
b/tests/src/test/scala/whisk/core/database/cosmosdb/CosmosDBArtifactStoreTests.scala
@@ -26,4 +26,21 @@ import
whisk.core.database.test.behavior.ArtifactStoreBehavior
@RunWith(classOf[JUnitRunner])
class CosmosDBArtifactStoreTests extends FlatSpec with
CosmosDBStoreBehaviorBase with ArtifactStoreBehavior {
override protected def maxAttachmentSizeWithoutAttachmentStore = 1.MB
+
+ behavior of "CosmosDB Setup"
+
+ it should "be configured with default throughput" in {
+ //Trigger loading of the db
+ val stores = Seq(entityStore, authStore, activationStore)
+ stores.foreach { s =>
+ val doc = s.asInstanceOf[CosmosDBArtifactStore[_]].documentCollection()
+ val offer = client
+ .queryOffers(s"SELECT * from c where c.offerResourceId =
'${doc.getResourceId}'", null)
+ .blockingOnlyResult()
+ .get
+ withClue(s"Collection ${doc.getId} : ") {
+ offer.getThroughput shouldBe storeConfig.throughput
+ }
+ }
+ }
}