14fd6a9ef0
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
122 lines
2.6 KiB
Go
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
|
|
}
|