Try to debug why shutdown isn't working on windows (#4349)

* Try to debug why shutdown isn't working on windows

* Add 2022-05-18-shutdown-bug branch so it triggers release.yml

* Cleanup OracleServerMain shutdown

* Make cleaner shutdown messages

* Remove feature branch

Co-authored-by: Chris Stewart <stewart.chris1234@gmail.com>
This commit is contained in:
user411 2022-05-24 13:41:12 -06:00 committed by GitHub
parent f680ab8691
commit 8a01432db4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 11 deletions

View file

@ -6,9 +6,10 @@ import org.bitcoins.commons.util.{DatadirParser, ServerArgParser}
import org.bitcoins.dlc.oracle.DLCOracle
import org.bitcoins.dlc.oracle.config.DLCOracleAppConfig
import org.bitcoins.server.routes.{BitcoinSServerRunner, CommonRoutes, Server}
import org.bitcoins.server.util.BitcoinSAppScalaDaemon
import org.bitcoins.server.util.{BitcoinSAppScalaDaemon, ServerBindings}
import scala.concurrent.Future
import scala.concurrent.duration.DurationInt
import scala.concurrent.{Await, Future}
class OracleServerMain(override val serverArgParser: ServerArgParser)(implicit
override val system: ActorSystem,
@ -47,21 +48,24 @@ class OracleServerMain(override val serverArgParser: ServerArgParser)(implicit
Source.empty)
}
_ <- server.start()
bindings <- server.start()
} yield {
serverBindingsOpt = Some(bindings)
logger.info(s"Done starting oracle!")
()
}
}
private var serverBindingsOpt: Option[ServerBindings] = None
override def stop(): Future[Unit] = {
logger.error(s"Exiting process")
for {
_ <- conf.stop()
_ = logger.info(s"Stopped DLC Oracle")
_ <- system.terminate()
_ <- serverBindingsOpt match {
case Some(bindings) => bindings.stop()
case None => Future.unit
}
} yield {
logger.info(s"Actor system terminated")
logger.info(s"Stopped DLC Oracle")
()
}
}
@ -86,5 +90,12 @@ object OracleServerMain extends BitcoinSAppScalaDaemon {
DLCOracleAppConfig(datadirParser.datadir, Vector(datadirParser.baseConfig))(
system.dispatcher)
new OracleServerMain(serverCmdLineArgs).run()
val m = new OracleServerMain(serverCmdLineArgs)
m.run()
sys.addShutdownHook {
logger.info(
s"@@@@@@@@@@@@@@@@@@@@@ Shutting down ${getClass.getSimpleName} @@@@@@@@@@@@@@@@@@@@@")
Await.result(m.stop(), 10.seconds)
}
}

View file

@ -1,6 +1,7 @@
package org.bitcoins.server.util
import akka.actor.ActorSystem
import grizzled.slf4j.Logging
trait BitcoinSApp {
def actorSystemName: String
@ -14,6 +15,6 @@ trait BitcoinSApp {
}
/** Trait for using BitcoinS app with a daemon backend */
trait BitcoinSAppScalaDaemon extends App with BitcoinSApp {
trait BitcoinSAppScalaDaemon extends App with BitcoinSApp with Logging {
final override def commandLineArgs: Array[String] = args
}

View file

@ -45,7 +45,7 @@ import org.bitcoins.wallet.models.SpendingInfoDAO
import java.time.Instant
import scala.concurrent.duration.DurationInt
import scala.concurrent.{ExecutionContext, Future, Promise}
import scala.concurrent.{Await, ExecutionContext, Future, Promise}
class BitcoinSServerMain(override val serverArgParser: ServerArgParser)(implicit
override val system: ActorSystem,
@ -618,5 +618,13 @@ object BitcoinSServerMain extends BitcoinSAppScalaDaemon {
datadirParser.datadir,
Vector(datadirParser.baseConfig, serverCmdLineArgs.toConfig))(system)
new BitcoinSServerMain(serverCmdLineArgs).run()
val m = new BitcoinSServerMain(serverCmdLineArgs)
m.run()
sys.addShutdownHook {
logger.info(
s"@@@@@@@@@@@@@@@@@@@@@ Shutting down ${getClass.getSimpleName} @@@@@@@@@@@@@@@@@@@@@")
Await.result(m.stop(), 10.seconds)
}
}