Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions cluster/cluster_members.mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

"github.com/canonical/lxd/shared/api"

"github.com/canonical/microcluster/v3/internal/db/query"
"github.com/canonical/microcluster/v3/cluster/db"
)

var _ = api.ServerEnvironment{}
Expand Down Expand Up @@ -71,7 +71,7 @@ func getCoreClusterMembers(ctx context.Context, stmt *sql.Stmt, args ...any) ([]
return nil
}

err := query.SelectObjects(ctx, stmt, dest, args...)
err := db.SelectObjects(ctx, stmt, dest, args...)
if err != nil {
return nil, fmt.Errorf("Failed to fetch from \"core_cluster_members\" table: %w", err)
}
Expand All @@ -95,7 +95,7 @@ func getCoreClusterMembersRaw(ctx context.Context, tx *sql.Tx, sql string, args
return nil
}

err := query.Scan(ctx, tx, sql, dest, args...)
err := db.Scan(ctx, tx, sql, dest, args...)
if err != nil {
return nil, fmt.Errorf("Failed to fetch from \"core_cluster_members\" table: %w", err)
}
Expand Down
4 changes: 2 additions & 2 deletions internal/db/query/objects.go → cluster/db/objects.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Package query object functions that match LXD's object handling patterns.
package query
// Package db object functions that match LXD's object handling patterns.
package db

import (
"context"
Expand Down
10 changes: 5 additions & 5 deletions internal/db/query/objects_test.go → cluster/db/objects_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package query_test
package db_test

import (
"context"
Expand All @@ -8,13 +8,13 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/canonical/microcluster/v3/internal/db/query"
"github.com/canonical/microcluster/v3/cluster/db"
)

// Exercise possible failure modes.
func TestSelectObjects_Error(t *testing.T) {
cases := []struct {
dest query.Dest
dest db.Dest
query string
error string
}{
Expand All @@ -35,7 +35,7 @@ func TestSelectObjects_Error(t *testing.T) {
stmt, err := tx.Prepare(c.query)
require.NoError(t, err)

err = query.SelectObjects(context.TODO(), stmt, c.dest)
err = db.SelectObjects(context.TODO(), stmt, c.dest)
assert.EqualError(t, err, c.error)
})
}
Expand All @@ -61,7 +61,7 @@ func TestSelectObjects(t *testing.T) {
stmt, err := tx.Prepare("SELECT id, name FROM test WHERE name=?")
require.NoError(t, err)

err = query.SelectObjects(context.TODO(), stmt, dest, "bar")
err = db.SelectObjects(context.TODO(), stmt, dest, "bar")
require.NoError(t, err)

assert.Equal(t, 1, object.ID)
Expand Down
10 changes: 10 additions & 0 deletions cluster/db/schema.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package db

import (
"context"
"database/sql"
)

// Update represents a database schema update function.
// It takes a context and transaction and applies the schema changes.
type Update func(ctx context.Context, tx *sql.Tx) error
4 changes: 2 additions & 2 deletions internal/db/query/slices.go → cluster/db/slices.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Package query slice functions that match LXD's slice handling patterns.
package query
// Package db slice functions that match LXD's slice handling patterns.
package db

import (
"context"
Expand Down
12 changes: 6 additions & 6 deletions internal/db/query/slices_test.go → cluster/db/slices_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package query_test
package db_test

import (
"context"
Expand All @@ -8,15 +8,15 @@ import (
_ "github.com/mattn/go-sqlite3"
"github.com/stretchr/testify/assert"

"github.com/canonical/microcluster/v3/internal/db/query"
"github.com/canonical/microcluster/v3/cluster/db"
)

// Exercise possible failure modes.
func TestStrings_Error(t *testing.T) {
for _, c := range testStringsErrorCases {
t.Run(c.query, func(t *testing.T) {
tx := newTxForSlices(t)
values, err := query.SelectStrings(context.Background(), tx, c.query)
values, err := db.SelectStrings(context.Background(), tx, c.query)
assert.EqualError(t, err, c.error)
assert.Nil(t, values)
})
Expand All @@ -34,7 +34,7 @@ var testStringsErrorCases = []struct {
// All values yield by the query are returned.
func TestStrings(t *testing.T) {
tx := newTxForSlices(t)
values, err := query.SelectStrings(context.Background(), tx, "SELECT name FROM test ORDER BY name")
values, err := db.SelectStrings(context.Background(), tx, "SELECT name FROM test ORDER BY name")
assert.NoError(t, err)
assert.Equal(t, []string{"bar", "foo"}, values)
}
Expand All @@ -44,7 +44,7 @@ func TestIntegers_Error(t *testing.T) {
for _, c := range testIntegersErrorCases {
t.Run(c.query, func(t *testing.T) {
tx := newTxForSlices(t)
values, err := query.SelectIntegers(context.Background(), tx, c.query)
values, err := db.SelectIntegers(context.Background(), tx, c.query)
assert.EqualError(t, err, c.error)
assert.Nil(t, values)
})
Expand All @@ -62,7 +62,7 @@ var testIntegersErrorCases = []struct {
// All values yield by the query are returned.
func TestIntegers(t *testing.T) {
tx := newTxForSlices(t)
values, err := query.SelectIntegers(context.Background(), tx, "SELECT id FROM test ORDER BY id")
values, err := db.SelectIntegers(context.Background(), tx, "SELECT id FROM test ORDER BY id")
assert.NoError(t, err)
assert.Equal(t, []int{0, 1}, values)
}
Expand Down
6 changes: 3 additions & 3 deletions cluster/token_records.mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

"github.com/canonical/lxd/shared/api"

"github.com/canonical/microcluster/v3/internal/db/query"
"github.com/canonical/microcluster/v3/cluster/db"
)

var _ = api.ServerEnvironment{}
Expand Down Expand Up @@ -116,7 +116,7 @@ func getCoreTokenRecords(ctx context.Context, stmt *sql.Stmt, args ...any) ([]Co
return nil
}

err := query.SelectObjects(ctx, stmt, dest, args...)
err := db.SelectObjects(ctx, stmt, dest, args...)
if err != nil {
return nil, fmt.Errorf("Failed to fetch from \"core_token_records\" table: %w", err)
}
Expand All @@ -140,7 +140,7 @@ func getCoreTokenRecordsRaw(ctx context.Context, tx *sql.Tx, sql string, args ..
return nil
}

err := query.Scan(ctx, tx, sql, dest, args...)
err := db.Scan(ctx, tx, sql, dest, args...)
if err != nil {
return nil, fmt.Errorf("Failed to fetch from \"core_token_records\" table: %w", err)
}
Expand Down
6 changes: 3 additions & 3 deletions example/database/extended.mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/canonical/lxd/shared/api"

"github.com/canonical/microcluster/v3/cluster"
"github.com/canonical/microcluster/v3/internal/db/query"
"github.com/canonical/microcluster/v3/cluster/db"
)

var _ = api.ServerEnvironment{}
Expand Down Expand Up @@ -116,10 +116,10 @@ func GetExtendedTables(ctx context.Context, tx *sql.Tx, filters ...ExtendedTable

// Select.
if sqlStmt != nil {
err = query.SelectObjects(ctx, sqlStmt, dest, args...)
err = db.SelectObjects(ctx, sqlStmt, dest, args...)
} else {
queryStr := strings.Join(queryParts[:], "ORDER BY")
err = query.Scan(ctx, tx, queryStr, dest, args...)
err = db.Scan(ctx, tx, queryStr, dest, args...)
}

if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions example/database/extended_schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import (
"context"
"database/sql"

"github.com/canonical/microcluster/v3/internal/db/schema"
"github.com/canonical/microcluster/v3/cluster/db"
)

// SchemaExtensions is a list of schema extensions that can be passed to the MicroCluster daemon.
// Each entry will increase the database schema version by one, and will be applied after internal schema updates.
var SchemaExtensions = []schema.Update{
var SchemaExtensions = []db.Update{
schemaAppend1,
schemaAppend2,
}
Expand Down
6 changes: 3 additions & 3 deletions internal/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ import (

"github.com/canonical/microcluster/v3/client"
"github.com/canonical/microcluster/v3/cluster"
clusterDB "github.com/canonical/microcluster/v3/cluster/db"
internalConfig "github.com/canonical/microcluster/v3/internal/config"
"github.com/canonical/microcluster/v3/internal/db"
"github.com/canonical/microcluster/v3/internal/db/schema"
"github.com/canonical/microcluster/v3/internal/endpoints"
"github.com/canonical/microcluster/v3/internal/extensions"
internalLog "github.com/canonical/microcluster/v3/internal/log"
Expand Down Expand Up @@ -60,7 +60,7 @@ type Args struct {
HeartbeatInterval time.Duration

// List of schema updates in the order that they should be applied.
ExtensionsSchema []schema.Update
ExtensionsSchema []clusterDB.Update

// List of extensions supported by the endpoints of the core/default cluster API.
APIExtensions []string
Expand Down Expand Up @@ -247,7 +247,7 @@ func (d *Daemon) Run(ctx context.Context, stateDir string, args Args) error {
}
}

func (d *Daemon) init(listenAddress string, socketGroup string, heartbeatInterval time.Duration, schemaExtensions []schema.Update, apiExtensions []string, hooks *state.Hooks) error {
func (d *Daemon) init(listenAddress string, socketGroup string, heartbeatInterval time.Duration, schemaExtensions []clusterDB.Update, apiExtensions []string, hooks *state.Hooks) error {
d.applyHooks(hooks)

// Register smart error mappings.
Expand Down
37 changes: 18 additions & 19 deletions internal/db/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ import (
"github.com/stretchr/testify/suite"

"github.com/canonical/microcluster/v3/cluster"
"github.com/canonical/microcluster/v3/internal/db/query"
"github.com/canonical/microcluster/v3/internal/db/schema"
clusterDB "github.com/canonical/microcluster/v3/cluster/db"
"github.com/canonical/microcluster/v3/internal/db/update"
"github.com/canonical/microcluster/v3/internal/extensions"
"github.com/canonical/microcluster/v3/internal/log"
Expand Down Expand Up @@ -160,7 +159,7 @@ func (s *dbSuite) Test_waitUpgradeSchema() {
for i, t := range tests {
s.T().Logf("%s (case %d)", t.name, i)

db, err := NewTestDB([]schema.Update{})
db, err := NewTestDB([]clusterDB.Update{})
s.NoError(err)

tx, err := db.db.BeginTx(db.ctx, nil)
Expand Down Expand Up @@ -209,7 +208,7 @@ func (s *dbSuite) Test_waitUpgradeSchema() {

// Apply the local updates to the schema table.
manager := &update.SchemaUpdateManager{}
updates := []schema.Update{}
updates := []clusterDB.Update{}
for j := 0; j < int(t.upgradedLocalInfo.schemaInt)+1; j++ {
_, err = db.db.Exec(stmt, j, 0)
s.NoError(err)
Expand All @@ -219,7 +218,7 @@ func (s *dbSuite) Test_waitUpgradeSchema() {

manager.SetInternalUpdates(updates)

updates = []schema.Update{}
updates = []clusterDB.Update{}
for j := 0; j < int(t.upgradedLocalInfo.schemaExt)+1; j++ {
_, err = db.db.Exec(stmt, j, 1)
s.NoError(err)
Expand Down Expand Up @@ -249,10 +248,10 @@ func (s *dbSuite) Test_waitUpgradeSchema() {
tx, err = db.db.BeginTx(db.ctx, nil)
s.NoError(err)

schemaInternal, err := query.SelectIntegers(db.ctx, tx, "SELECT schema_internal FROM core_cluster_members ORDER BY id")
schemaInternal, err := clusterDB.SelectIntegers(db.ctx, tx, "SELECT schema_internal FROM core_cluster_members ORDER BY id")
s.NoError(err)

schemaExternal, err := query.SelectIntegers(db.ctx, tx, "SELECT schema_external FROM core_cluster_members ORDER BY id")
schemaExternal, err := clusterDB.SelectIntegers(db.ctx, tx, "SELECT schema_external FROM core_cluster_members ORDER BY id")
s.NoError(err)

s.NoError(tx.Commit())
Expand Down Expand Up @@ -338,7 +337,7 @@ func (s *dbSuite) Test_waitUpgradeAPI() {
for i, t := range tests {
s.T().Logf("%s (case %d)", t.name, i)

db, err := NewTestDB([]schema.Update{})
db, err := NewTestDB([]clusterDB.Update{})
s.NoError(err)

ctx := context.Background()
Expand Down Expand Up @@ -388,12 +387,12 @@ func (s *dbSuite) Test_waitUpgradeAPI() {

_, err = db.db.Exec(stmt, 0, 0)
s.NoError(err)
updates := []schema.Update{func(ctx context.Context, tx *sql.Tx) error { return nil }}
updates := []clusterDB.Update{func(ctx context.Context, tx *sql.Tx) error { return nil }}
manager.SetInternalUpdates(updates)

_, err = db.db.Exec(stmt, 0, 1)
s.NoError(err)
updates = []schema.Update{func(ctx context.Context, tx *sql.Tx) error { return nil }}
updates = []clusterDB.Update{func(ctx context.Context, tx *sql.Tx) error { return nil }}
manager.SetExternalUpdates(updates)

if t.expectWait {
Expand All @@ -416,7 +415,7 @@ func (s *dbSuite) Test_waitUpgradeAPI() {
tx, err = db.db.BeginTx(ctx, nil)
s.NoError(err)

res, err := query.SelectStrings(ctx, tx, "SELECT api_extensions FROM core_cluster_members ORDER BY id")
res, err := clusterDB.SelectStrings(ctx, tx, "SELECT api_extensions FROM core_cluster_members ORDER BY id")
s.NoError(err)
allExtensions := make([]extensions.Extensions, 0)
for _, r := range res {
Expand Down Expand Up @@ -505,7 +504,7 @@ func (s *dbSuite) Test_waitUpgradeSchemaAndAPI() {
for i, t := range tests {
s.T().Logf("%s (case %d)", t.name, i)

db, err := NewTestDB([]schema.Update{})
db, err := NewTestDB([]clusterDB.Update{})
s.NoError(err)

ctx := context.Background()
Expand Down Expand Up @@ -552,7 +551,7 @@ func (s *dbSuite) Test_waitUpgradeSchemaAndAPI() {

// Apply the local updates to the schema table.
manager := &update.SchemaUpdateManager{}
updates := []schema.Update{}
updates := []clusterDB.Update{}
for j := 0; j < int(t.upgradedLocalInfo.schemaInt)+1; j++ {
_, err = db.db.Exec(stmt, j, 0)
s.NoError(err)
Expand All @@ -562,7 +561,7 @@ func (s *dbSuite) Test_waitUpgradeSchemaAndAPI() {

manager.SetInternalUpdates(updates)

updates = []schema.Update{}
updates = []clusterDB.Update{}
for j := 0; j < int(t.upgradedLocalInfo.schemaExt)+1; j++ {
_, err = db.db.Exec(stmt, j, 1)
s.NoError(err)
Expand Down Expand Up @@ -592,13 +591,13 @@ func (s *dbSuite) Test_waitUpgradeSchemaAndAPI() {
tx, err = db.db.BeginTx(ctx, nil)
s.NoError(err)

schemaInternal, err := query.SelectIntegers(ctx, tx, "SELECT schema_internal FROM core_cluster_members ORDER BY id")
schemaInternal, err := clusterDB.SelectIntegers(ctx, tx, "SELECT schema_internal FROM core_cluster_members ORDER BY id")
s.NoError(err)

schemaExternal, err := query.SelectIntegers(ctx, tx, "SELECT schema_external FROM core_cluster_members ORDER BY id")
schemaExternal, err := clusterDB.SelectIntegers(ctx, tx, "SELECT schema_external FROM core_cluster_members ORDER BY id")
s.NoError(err)

res, err := query.SelectStrings(ctx, tx, "SELECT api_extensions FROM core_cluster_members ORDER BY id")
res, err := clusterDB.SelectStrings(ctx, tx, "SELECT api_extensions FROM core_cluster_members ORDER BY id")
s.NoError(err)
allExtensions := make([]extensions.Extensions, 0)
for _, r := range res {
Expand Down Expand Up @@ -649,8 +648,8 @@ func (s *dbSuite) Test_waitUpgradeSchemaAndAPI() {
}
}

// NewTedb returns a sqlite DB set up with the default microcluster schema.
func NewTestDB(extensionsExternal []schema.Update) (*DqliteDB, error) {
// NewTestDB returns a sqlite DB set up with the default microcluster schema.
func NewTestDB(extensionsExternal []clusterDB.Update) (*DqliteDB, error) {
var err error

ctx := context.WithValue(context.Background(), log.CtxLogger, slog.Default())
Expand Down
4 changes: 2 additions & 2 deletions internal/db/dqlite.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
"github.com/canonical/lxd/shared/tcp"

"github.com/canonical/microcluster/v3/cluster"
"github.com/canonical/microcluster/v3/internal/db/schema"
clusterDB "github.com/canonical/microcluster/v3/cluster/db"
"github.com/canonical/microcluster/v3/internal/db/update"
"github.com/canonical/microcluster/v3/internal/extensions"
"github.com/canonical/microcluster/v3/internal/log"
Expand Down Expand Up @@ -115,7 +115,7 @@ func (db *DqliteDB) log() *slog.Logger {
}

// SetSchema sets schema and API extensions on the DB.
func (db *DqliteDB) SetSchema(schemaExtensions []schema.Update, apiExtensions extensions.Extensions) {
func (db *DqliteDB) SetSchema(schemaExtensions []clusterDB.Update, apiExtensions extensions.Extensions) {
s := update.NewSchema()
s.AppendSchema(schemaExtensions, apiExtensions)
db.schema = s.Schema()
Expand Down
Loading