Skip to content

Instantly share code, notes, and snippets.

@crajah
Created November 8, 2020 21:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crajah/7861653fa20e0776ad7a2327bfd11192 to your computer and use it in GitHub Desktop.
Save crajah/7861653fa20e0776ad7a2327bfd11192 to your computer and use it in GitHub Desktop.
Added Replication Factor for Graph.apply and Collection
diff --git a/driver/src/main/scala/com/outr/arango/CachedCollection.scala b/driver/src/main/scala/com/outr/arango/CachedCollection.scala
index 1777e03..e26def3 100644
--- a/driver/src/main/scala/com/outr/arango/CachedCollection.scala
+++ b/driver/src/main/scala/com/outr/arango/CachedCollection.scala
@@ -4,7 +4,7 @@ import reactify._
import scala.concurrent.{ExecutionContext, Future}
-class CachedCollection[D <: Document[D]](override val collection: Collection[D]) extends WrappedCollection[D] with WritableCollection[D] { self =>
+class CachedCollection[D <: Document[D]](override val collection: Collection[D], val replicationFactor: Long) extends WrappedCollection[D] with WritableCollection[D] { self =>
private object _cache extends Var[Map[Id[D], D]](Map.empty) {
def +=(tuple: (Id[D], D)): Unit = set(get + tuple)
}
diff --git a/driver/src/main/scala/com/outr/arango/Collection.scala b/driver/src/main/scala/com/outr/arango/Collection.scala
index f09c7ed..6afd90f 100644
--- a/driver/src/main/scala/com/outr/arango/Collection.scala
+++ b/driver/src/main/scala/com/outr/arango/Collection.scala
@@ -18,10 +18,11 @@ trait Collection[D <: Document[D]] {
def indexes: List[Index]
def transaction: Option[Transaction]
def transactionId: Option[String] = transaction.map(_.id)
+ def replicationFactor: Long
def name: String = model.collectionName
- def withTransaction(transaction: Transaction): Collection[D] = new TransactionCollection[D](this, transaction)
+ def withTransaction(transaction: Transaction): Collection[D] = new TransactionCollection[D](this, transaction, replicationFactor)
def get(id: Id[D])(implicit ec: ExecutionContext): Future[Option[D]] = {
arangoCollection.document.get(id, transactionId)(ec, model.serialization)
@@ -51,7 +52,7 @@ trait Collection[D <: Document[D]] {
protected[arango] def create(collectionId: Option[String])(implicit ec: ExecutionContext): Future[Unit] = for {
// Create the collection if it doesn't already exist
_ <- if (collectionId.isEmpty) {
- arangoCollection.create(`type` = `type`).map { info =>
+ arangoCollection.create(`type` = `type`, replicationFactor = replicationFactor).map { info =>
info.id.foreach(id => _id = id)
}
} else {
diff --git a/driver/src/main/scala/com/outr/arango/DocumentCollection.scala b/driver/src/main/scala/com/outr/arango/DocumentCollection.scala
index b5e55a4..e20755c 100644
--- a/driver/src/main/scala/com/outr/arango/DocumentCollection.scala
+++ b/driver/src/main/scala/com/outr/arango/DocumentCollection.scala
@@ -6,4 +6,6 @@ class DocumentCollection[D <: Document[D]](override val graph: Graph,
override val model: DocumentModel[D],
override val `type`: CollectionType,
override val indexes: List[Index],
- override val transaction: Option[Transaction]) extends QueryWritableCollection[D]
\ No newline at end of file
+ override val transaction: Option[Transaction],
+ override val replicationFactor: Long
+ ) extends QueryWritableCollection[D]
\ No newline at end of file
diff --git a/driver/src/main/scala/com/outr/arango/Graph.scala b/driver/src/main/scala/com/outr/arango/Graph.scala
index bb4a980..f13cd86 100644
--- a/driver/src/main/scala/com/outr/arango/Graph.scala
+++ b/driver/src/main/scala/com/outr/arango/Graph.scala
@@ -22,7 +22,8 @@ import scala.language.experimental.macros
class Graph(val databaseName: String = ArangoDB.config.db,
baseURL: URL = ArangoDB.config.url,
credentials: Option[Credentials] = ArangoDB.credentials,
- httpClient: HttpClient = HttpClient) {
+ httpClient: HttpClient = HttpClient,
+ replicationFactor: Long) {
private var _collections: List[Collection[_]] = Nil
private var _views: List[View[_]] = Nil
private var _initializations: List[() => Future[Unit]] = Nil
@@ -31,7 +32,7 @@ class Graph(val databaseName: String = ArangoDB.config.db,
lazy val arangoDB: ArangoDB = new ArangoDB(databaseName, baseURL, credentials, httpClient)
lazy val arangoDatabase: ArangoDatabase = arangoDB.api.db(databaseName)
- lazy val backingStore: DocumentCollection[BackingStore] = new DocumentCollection[BackingStore](this, BackingStore, CollectionType.Document, Nil, None)
+ lazy val backingStore: DocumentCollection[BackingStore] = new DocumentCollection[BackingStore](this, BackingStore, CollectionType.Document, Nil, None, replicationFactor)
def wal: ArangoWriteAheadLog = arangoDatabase.wal
@@ -70,7 +71,7 @@ class Graph(val databaseName: String = ArangoDB.config.db,
def vertex[D <: Document[D]]: DocumentCollection[D] = macro GraphMacros.vertex[D]
def edge[D <: Document[D]]: DocumentCollection[D] = macro GraphMacros.edge[D]
- def cached[D <: Document[D]](collection: Collection[D]): CachedCollection[D] = new CachedCollection[D](collection)
+ def cached[D <: Document[D]](collection: Collection[D]): CachedCollection[D] = new CachedCollection[D](collection, replicationFactor)
def view[D <: Document[D]](name: String,
collection: Collection[D],
includeAllFields: Boolean,
diff --git a/driver/src/main/scala/com/outr/arango/QueryWritableCollection.scala b/driver/src/main/scala/com/outr/arango/QueryWritableCollection.scala
index 48657ee..c3a74ea 100644
--- a/driver/src/main/scala/com/outr/arango/QueryWritableCollection.scala
+++ b/driver/src/main/scala/com/outr/arango/QueryWritableCollection.scala
@@ -9,7 +9,7 @@ import scala.concurrent.{ExecutionContext, Future}
trait QueryWritableCollection[D <: Document[D]] extends WritableCollection[D] {
lazy val all: QueryBuilder[D] = graph.query(Query(s"FOR c IN $name RETURN c", Map.empty), transaction).as[D](model.serialization)
- override def withTransaction(transaction: Transaction): QueryWritableCollection[D] = new TransactionCollection[D](this, transaction) with QueryWritableCollection[D]
+ override def withTransaction(transaction: Transaction): QueryWritableCollection[D] = new TransactionCollection[D](this, transaction, replicationFactor) with QueryWritableCollection[D]
def query(query: Query): QueryBuilder[D] = graph.query(query, transaction).as[D](model.serialization)
diff --git a/driver/src/main/scala/com/outr/arango/TransactionCollection.scala b/driver/src/main/scala/com/outr/arango/TransactionCollection.scala
index fadecd2..2fda686 100644
--- a/driver/src/main/scala/com/outr/arango/TransactionCollection.scala
+++ b/driver/src/main/scala/com/outr/arango/TransactionCollection.scala
@@ -2,7 +2,7 @@ package com.outr.arango
import com.outr.arango.transaction.Transaction
-class TransactionCollection[D <: Document[D]](override val collection: Collection[D], val currentTransaction: Transaction) extends WrappedCollection[D] {
+class TransactionCollection[D <: Document[D]](override val collection: Collection[D], val currentTransaction: Transaction, val replicationFactor: Long) extends WrappedCollection[D] {
override def transaction: Option[Transaction] = Some(currentTransaction)
override protected def addCollection(): Unit = {
diff --git a/driver/src/main/scala/com/outr/arango/WritableCollection.scala b/driver/src/main/scala/com/outr/arango/WritableCollection.scala
index 796433a..0fb0810 100644
--- a/driver/src/main/scala/com/outr/arango/WritableCollection.scala
+++ b/driver/src/main/scala/com/outr/arango/WritableCollection.scala
@@ -5,7 +5,7 @@ import com.outr.arango.transaction.Transaction
import scala.concurrent.{ExecutionContext, Future}
trait WritableCollection[D <: Document[D]] extends Collection[D] {
- override def withTransaction(transaction: Transaction): WritableCollection[D] = new TransactionCollection[D](this, transaction) with WritableCollection[D]
+ override def withTransaction(transaction: Transaction): WritableCollection[D] = new TransactionCollection[D](this, transaction, replicationFactor) with WritableCollection[D]
def insertOne(document: D,
waitForSync: Boolean = false,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment