Skip to content

Commit

Permalink
#1450 Make initialisation timeout configurable (default 1 hour)
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed Oct 22, 2020
1 parent 0e049c6 commit 57e5379
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 15 deletions.
31 changes: 18 additions & 13 deletions thehive/app/org/thp/thehive/models/SchemaUpdaterActor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,23 @@ import org.thp.scalligraph.janus.JanusDatabase
import org.thp.scalligraph.models.Database
import org.thp.thehive.ClusterSetup
import org.thp.thehive.services.LocalUserSrv
import play.api.Logger
import play.api.{Configuration, Logger}

import scala.concurrent.duration.DurationInt
import scala.concurrent.duration.{DurationInt, FiniteDuration}
import scala.concurrent.{Await, ExecutionContext}
import scala.util.{Failure, Try}

@Singleton
class DatabaseProvider @Inject() (
configuration: Configuration,
database: Database,
theHiveSchema: TheHiveSchemaDefinition,
actorSystem: ActorSystem,
clusterSetup: ClusterSetup
clusterSetup: ClusterSetup // this dependency is here to ensure that cluster setup is finished
) extends Provider[Database] {
import SchemaUpdaterActor._

lazy val dbInitialisationTimeout: FiniteDuration = configuration.get[FiniteDuration]("db.initialisationTimeout")
lazy val schemaUpdaterActor: ActorRef = {
val singletonManager =
actorSystem.actorOf(
Expand All @@ -43,16 +46,17 @@ class DatabaseProvider @Inject() (
)
}

def databaseInstance: String = database match {
case jdb: JanusDatabase => jdb.instanceId
case _ => ""
}
def databaseInstance: String =
database match {
case jdb: JanusDatabase => jdb.instanceId
case _ => ""
}

override def get(): Database = {
implicit val timeout: Timeout = Timeout(5.minutes)
implicit val timeout: Timeout = Timeout(dbInitialisationTimeout)
Await.result(schemaUpdaterActor ? RequestDBStatus(databaseInstance), timeout.duration) match {
case DBStatus(status) =>
status.get
status.get // if the status is a failure, throw an exception.
database.asInstanceOf[Database]
}
}
Expand Down Expand Up @@ -90,10 +94,11 @@ class SchemaUpdaterActor @Inject() (theHiveSchema: TheHiveSchemaDefinition, data
}

def hasUnknownConnections(instanceIds: Set[String]): Boolean = (originalConnectionIds -- instanceIds).nonEmpty
def dropUnknownConnections(instanceIds: Set[String]): Unit = database match {
case jdb: JanusDatabase => jdb.dropConnections((originalConnectionIds -- instanceIds).toSeq)
case _ =>
}
def dropUnknownConnections(instanceIds: Set[String]): Unit =
database match {
case jdb: JanusDatabase => jdb.dropConnections((originalConnectionIds -- instanceIds).toSeq)
case _ =>
}

override def receive: Receive = {
case RequestDBStatus(instanceId) =>
Expand Down
7 changes: 5 additions & 2 deletions thehive/conf/reference.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
db.provider: janusgraph
db.janusgraph.index.search.directory: /tmp/thehive.idx
db {
provider: janusgraph
janusgraph.index.search.directory: /tmp/thehive.idx
initialisationTimeout: 1 hour
}

storage {
provider: localfs
Expand Down

0 comments on commit 57e5379

Please sign in to comment.