dendrite/internal/naffka/naffkacosmosdb/storage.go
alexfca e7b9129146
Implement Naffka storage in CosmosDB (#12)
* - Implement Naffka storage in CosmosDB
- Add Topic SEQ
- Add Topic tables in Cosmos
- Update the Yaml for Naffka to use a CosmosDB dsn

* - Fix TableName for Messages
2021-05-31 13:20:25 +10:00

50 lines
1.3 KiB
Go

package naffkacosmosdb
import (
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/internal/cosmosdbapi"
"github.com/matrix-org/dendrite/internal/cosmosdbutil"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/naffka/storage/shared"
)
// Database stores information needed by the federation sender
type Database struct {
shared.Database
writer cosmosdbutil.Writer
connection cosmosdbapi.CosmosConnection
databaseName string
cosmosConfig cosmosdbapi.CosmosConfig
serverName gomatrixserverlib.ServerName
}
// NewDatabase opens a new database
func NewDatabase(dsn string) (*Database, error) {
datasource := config.DatabaseOptions{}
datasource.ConnectionString = config.DataSource(dsn)
conn := cosmosdbutil.GetCosmosConnection(&datasource.ConnectionString)
configConsmos := cosmosdbutil.GetCosmosConfig(&datasource.ConnectionString)
var d Database
// var err error
// if d.db, err = sql.Open("sqlite3", dsn); err != nil {
// return nil, err
// }
d.connection = conn
d.cosmosConfig = configConsmos
d.writer = cosmosdbutil.NewExclusiveWriterFake()
topics, err := NewCosmosDBTopicsTable(&d)
if err != nil {
return nil, err
}
d.Database = shared.Database{
DB: nil,
Writer: d.writer,
TopicsTable: topics,
}
d.Database.CreateCache()
d.databaseName = "naffka"
return &d, nil
}