From c8324693875d44ee128266179ee1d7abc6fc0e77 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 15 Nov 2017 15:17:04 +0000 Subject: [PATCH] User Postgres database rather than Memory for Naffka --- .../cmd/dendrite-monolith-server/main.go | 17 ++++++++++++++++- .../matrix-org/dendrite/common/config/config.go | 6 +++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/github.com/matrix-org/dendrite/cmd/dendrite-monolith-server/main.go b/src/github.com/matrix-org/dendrite/cmd/dendrite-monolith-server/main.go index 3b5975763..9bd4c574e 100644 --- a/src/github.com/matrix-org/dendrite/cmd/dendrite-monolith-server/main.go +++ b/src/github.com/matrix-org/dendrite/cmd/dendrite-monolith-server/main.go @@ -16,6 +16,7 @@ package main import ( "context" + "database/sql" "flag" "net/http" "os" @@ -199,7 +200,21 @@ func (m *monolith) setupFederation() { func (m *monolith) setupKafka() { if m.cfg.Kafka.UseNaffka { - naff, err := naffka.New(&naffka.MemoryDatabase{}) + db, err := sql.Open("postgres", string(m.cfg.Database.Naffka)) + if err != nil { + log.WithFields(log.Fields{ + log.ErrorKey: err, + }).Panic("Failed to open naffka database") + } + + naffkaDB, err := naffka.NewPostgresqlDatabase(db) + if err != nil { + log.WithFields(log.Fields{ + log.ErrorKey: err, + }).Panic("Failed to setup naffka database") + } + + naff, err := naffka.New(naffkaDB) if err != nil { log.WithFields(log.Fields{ log.ErrorKey: err, diff --git a/src/github.com/matrix-org/dendrite/common/config/config.go b/src/github.com/matrix-org/dendrite/common/config/config.go index 82bdc3dca..797889028 100644 --- a/src/github.com/matrix-org/dendrite/common/config/config.go +++ b/src/github.com/matrix-org/dendrite/common/config/config.go @@ -25,8 +25,8 @@ import ( "strings" "time" - "github.com/sirupsen/logrus" "github.com/matrix-org/gomatrixserverlib" + "github.com/sirupsen/logrus" "golang.org/x/crypto/ed25519" "gopkg.in/yaml.v2" @@ -148,6 +148,8 @@ type Dendrite struct { // The PublicRoomsAPI database stores information used to compute the public // room directory. It is only accessed by the PublicRoomsAPI server. PublicRoomsAPI DataSource `yaml:"public_rooms_api"` + // The Naffka database is used internally by the naffka library, if used. + Naffka DataSource `yaml:"naffka,omitempty"` } `yaml:"database"` // TURN Server Config @@ -386,6 +388,8 @@ func (config *Dendrite) check(monolithic bool) error { if !monolithic { problems = append(problems, fmt.Sprintf("naffka can only be used in a monolithic server")) } + + checkNotEmpty("database.naffka", string(config.Database.Naffka)) } else { // If we aren't using naffka then we need to have at least one kafka // server to talk to.