storj/storagenode/storagenodedb/testdata/multidbsnapshot.go
Isaac Hess 14fd6a9ef0 storagenode/pieces: Track total piece size
This change updates the storagenode piecestore apis to expose access to
the full piece size stored on disk. Previously we only had access to
(and only kept a cache of) the content size used for all pieces. This
was inaccurate when reporting the amount of disk space used by nodes.

We now have access to the total content size, as well as the total disk
usage, of all pieces. The pieces cache also keeps a cache of the total
piece size along with the content size.

Change-Id: I4fffe7e1257e04c46021a2e37c5adc6fe69bee55
2020-01-23 11:00:24 -07:00

122 lines
2.6 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package testdata
import (
"context"
"fmt"
"storj.io/storj/private/dbutil/dbschema"
"storj.io/storj/private/dbutil/sqliteutil"
)
// States is the global variable that stores all the states for testing
var States = MultiDBStates{
List: []*MultiDBState{
&v0,
&v1,
&v2,
&v3,
&v4,
&v5,
&v6,
&v7,
&v8,
&v9,
&v10,
&v11,
&v12,
&v13,
&v14,
&v15,
&v16,
&v17,
&v18,
&v19,
&v20,
&v21,
&v22,
&v23,
&v24,
&v25,
&v26,
&v27,
&v28,
&v29,
},
}
// MultiDBStates provides a convenient list of MultiDBState
type MultiDBStates struct {
List []*MultiDBState
}
// FindVersion finds a MultiDBState with the specified version.
func (mdbs *MultiDBStates) FindVersion(version int) (*MultiDBState, bool) {
for _, state := range mdbs.List {
if state.Version == version {
return state, true
}
}
return nil, false
}
// MultiDBState represents an expected state across multiple DBs, defined in SQL
// commands.
type MultiDBState struct {
Version int
DBStates DBStates
}
// DBStates is a convenience type
type DBStates map[string]*DBState
// DBState allows you to define the desired state of the DB using SQl commands.
// Both the SQl and NewData fields contains SQL that will be executed to create
// the expected DB. The NewData SQL additionally will be executed on the testDB
// to ensure data is consistent.
type DBState struct {
SQL string
NewData string
}
// MultiDBSnapshot represents an expected state among multiple databases
type MultiDBSnapshot struct {
Version int
DBSnapshots DBSnapshots
}
// NewMultiDBSnapshot returns a new MultiDBSnapshot
func NewMultiDBSnapshot() *MultiDBSnapshot {
return &MultiDBSnapshot{
DBSnapshots: DBSnapshots{},
}
}
// DBSnapshots is a convenience type
type DBSnapshots map[string]*DBSnapshot
// DBSnapshot is a snapshot of a single DB.
type DBSnapshot struct {
Schema *dbschema.Schema
Data *dbschema.Data
}
// LoadMultiDBSnapshot converts a MultiDBState into a MultiDBSnapshot. It
// executes the SQL and stores the shema and data.
func LoadMultiDBSnapshot(ctx context.Context, multiDBState *MultiDBState) (*MultiDBSnapshot, error) {
multiDBSnapshot := NewMultiDBSnapshot()
for dbName, dbState := range multiDBState.DBStates {
snapshot, err := sqliteutil.LoadSnapshotFromSQL(ctx, fmt.Sprintf("%s\n%s", dbState.SQL, dbState.NewData))
if err != nil {
return nil, err
}
multiDBSnapshot.DBSnapshots[dbName] = &DBSnapshot{
Schema: snapshot.Schema,
Data: snapshot.Data,
}
}
return multiDBSnapshot, nil
}