Merge pull request #323 from slingamn/initdb.1

fix #322
This commit is contained in:
Daniel Oaks
2019-01-03 09:18:19 +10:00
committed by GitHub
6 changed files with 41 additions and 29 deletions
+18 -12
View File
@@ -52,14 +52,26 @@ func (err *incompatibleSchemaError) Error() string {
return fmt.Sprintf("Database requires update. Expected schema v%s, got v%s", err.requiredVersion, err.currentVersion)
}
// InitDB creates the database.
// InitDB creates the database, implementing the `oragono initdb` command.
func InitDB(path string) {
// prepare kvstore db
//TODO(dan): fail if already exists instead? don't want to overwrite good data
os.Remove(path)
_, err := os.Stat(path)
if err == nil {
log.Fatal("Datastore already exists (delete it manually to continue): ", path)
} else if !os.IsNotExist(err) {
log.Fatal("Datastore path is inaccessible: ", err.Error())
}
err = initializeDB(path)
if err != nil {
log.Fatal("Could not save datastore: ", err.Error())
}
}
// internal database initialization code
func initializeDB(path string) error {
store, err := buntdb.Open(path)
if err != nil {
log.Fatal(fmt.Sprintf("Failed to open datastore: %s", err.Error()))
return err
}
defer store.Close()
@@ -69,9 +81,7 @@ func InitDB(path string) {
return nil
})
if err != nil {
log.Fatal("Could not save datastore:", err.Error())
}
return err
}
// OpenDatabase returns an existing database, performing a schema version check.
@@ -81,10 +91,6 @@ func OpenDatabase(config *Config) (*buntdb.DB, error) {
// open the database, giving it at most one chance to auto-upgrade the schema
func openDatabaseInternal(config *Config, allowAutoupgrade bool) (db *buntdb.DB, err error) {
_, err = os.Stat(config.Datastore.Path)
if os.IsNotExist(err) {
return
}
db, err = buntdb.Open(config.Datastore.Path)
if err != nil {
return
+12 -3
View File
@@ -883,6 +883,15 @@ func (server *Server) loadDatastore(config *Config) error {
// open the datastore and load server state for which it (rather than config)
// is the source of truth
_, err := os.Stat(config.Datastore.Path)
if os.IsNotExist(err) {
server.logger.Warning("rehash", "database does not exist, creating it", config.Datastore.Path)
err = initializeDB(config.Datastore.Path)
if err != nil {
return err
}
}
db, err := OpenDatabase(config)
if err == nil {
server.store = db
@@ -891,7 +900,7 @@ func (server *Server) loadDatastore(config *Config) error {
}
// load *lines (from the datastores)
server.logger.Debug("startup", "Loading D/Klines")
server.logger.Debug("rehash", "Loading D/Klines")
server.loadDLines()
server.loadKLines()
@@ -963,7 +972,7 @@ func (server *Server) setupListeners(config *Config) (err error) {
}
if len(tlsListeners) == 0 {
server.logger.Warning("startup", "You are not exposing an SSL/TLS listening port. You should expose at least one port (typically 6697) to accept TLS connections")
server.logger.Warning("rehash", "You are not exposing an SSL/TLS listening port. You should expose at least one port (typically 6697) to accept TLS connections")
}
var usesStandardTLSPort bool
@@ -974,7 +983,7 @@ func (server *Server) setupListeners(config *Config) (err error) {
}
}
if 0 < len(tlsListeners) && !usesStandardTLSPort {
server.logger.Warning("startup", "Port 6697 is the standard TLS port for IRC. You should (also) expose port 6697 as a TLS port to ensure clients can connect securely")
server.logger.Warning("rehash", "Port 6697 is the standard TLS port for IRC. You should (also) expose port 6697 as a TLS port to ensure clients can connect securely")
}
return