Add DatadirUtil to centralize logic for finding our actual datadir (#3171)

This commit is contained in:
Chris Stewart 2021-05-27 13:08:14 -05:00 committed by GitHub
parent f8d5202974
commit 4146876369
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 60 additions and 53 deletions

View file

@ -1,11 +1,11 @@
package org.bitcoins.bundle.gui
import com.typesafe.config.Config
import org.bitcoins.core.config._
import org.bitcoins.db.AppConfig
import org.bitcoins.db.AppConfig.DEFAULT_BITCOIN_S_DATADIR
import org.bitcoins.gui._
import org.bitcoins.gui.util.GUIUtil
import org.bitcoins.server.util.DatadirUtil
import scalafx.application.{JFXApp, Platform}
import scalafx.geometry.Pos
import scalafx.scene.Scene
@ -41,30 +41,7 @@ object BundleGUI extends WalletGUI with JFXApp {
val datadir: Path =
Paths.get(baseConfig.getString("bitcoin-s.datadir"))
val networkStr: String =
baseConfig.getString("bitcoin-s.network")
val network: BitcoinNetwork = networkStr.toLowerCase match {
case "mainnet" => MainNet
case "main" => MainNet
case "testnet3" => TestNet3
case "testnet" => TestNet3
case "test" => TestNet3
case "regtest" => RegTest
case "signet" => SigNet
case "sig" => SigNet
case _: String =>
throw new IllegalArgumentException(s"Invalid network $networkStr")
}
val lastDirname = network match {
case MainNet => "mainnet"
case TestNet3 => "testnet3"
case RegTest => "regtest"
case SigNet => "signet"
}
val usedDir = datadir.resolve(lastDirname)
val usedDir = DatadirUtil.getFinalDatadir(datadir, baseConfig, None)
System.setProperty("bitcoins.log.location", usedDir.toAbsolutePath.toString)
}

View file

@ -3,10 +3,10 @@ package org.bitcoins.server.routes
import akka.actor.ActorSystem
import com.typesafe.config.{Config, ConfigFactory}
import grizzled.slf4j.Logging
import org.bitcoins.core.config._
import org.bitcoins.core.util.{EnvUtil, StartStopAsync}
import org.bitcoins.db.AppConfig
import org.bitcoins.db.AppConfig.safePathToString
import org.bitcoins.server.util.DatadirUtil
import java.nio.file.{Path, Paths}
import scala.concurrent.{ExecutionContext, Future}
@ -92,33 +92,8 @@ trait BitcoinSRunner extends StartStopAsync[Unit] with Logging {
final def run(customFinalDirOpt: Option[String] = None): Unit = {
/** Directory specific for current network or custom dir */
val usedDir: Path = customFinalDirOpt match {
case Some(dir) => datadir.resolve(dir)
case None =>
val networkStr: String =
baseConfig.getString("bitcoin-s.network")
val network: BitcoinNetwork = networkStr.toLowerCase match {
case "mainnet" => MainNet
case "main" => MainNet
case "testnet3" => TestNet3
case "testnet" => TestNet3
case "test" => TestNet3
case "regtest" => RegTest
case "signet" => SigNet
case "sig" => SigNet
case _: String =>
throw new IllegalArgumentException(s"Invalid network $networkStr")
}
val lastDirname = network match {
case MainNet => "mainnet"
case TestNet3 => "testnet3"
case RegTest => "regtest"
case SigNet => "signet"
}
datadir.resolve(lastDirname)
}
val usedDir: Path =
DatadirUtil.getFinalDatadir(datadir, baseConfig, customFinalDirOpt)
//We need to set the system property before any logger instances
//are in instantiated. If we don't do this, we will not log to

View file

@ -0,0 +1,55 @@
package org.bitcoins.server.util
import com.typesafe.config.Config
import org.bitcoins.core.config.{
BitcoinNetwork,
MainNet,
RegTest,
SigNet,
TestNet3
}
import java.nio.file.Path
object DatadirUtil {
/** Sets the final datadir for our applicatoin.
* We allow useres to pass in a --datadir command line
* flag that needs to be used instead of the [[datadir]]
* specified in bitcoin-s.conf
*/
def getFinalDatadir(
datadir: Path,
baseConfig: Config,
customFinalDirOpt: Option[String] = None): Path = {
val usedDir: Path = customFinalDirOpt match {
case Some(dir) => datadir.resolve(dir)
case None =>
val networkStr: String =
baseConfig.getString("bitcoin-s.network")
val network: BitcoinNetwork = networkStr.toLowerCase match {
case "mainnet" => MainNet
case "main" => MainNet
case "testnet3" => TestNet3
case "testnet" => TestNet3
case "test" => TestNet3
case "regtest" => RegTest
case "signet" => SigNet
case "sig" => SigNet
case _: String =>
throw new IllegalArgumentException(s"Invalid network $networkStr")
}
val lastDirname = network match {
case MainNet => "mainnet"
case TestNet3 => "testnet3"
case RegTest => "regtest"
case SigNet => "signet"
}
datadir.resolve(lastDirname)
}
usedDir
}
}