Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a746a38

Browse files
feat: rename VolumeManager to ThinCloneManager
1 parent 4031df9 commit a746a38

File tree

8 files changed

+121
-119
lines changed

8 files changed

+121
-119
lines changed

configs/config.sample.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ provision:
1818

1919
# "Local" mode related parameters.
2020
local:
21-
# Which volume manager to use. Available options: "zfs", "lvm".
22-
volumeManager: "zfs"
21+
# Which thin-clone managing module to use.
22+
# Available options: "zfs", "lvm".
23+
thinCloneManager: "zfs"
2324

24-
# Name of your pool or volume group with logic volume name (e.g. "dblab_vg/pg1_lv").
25+
# Name of your pool (in the case of ZFS) or volume group
26+
# with logic volume name (e.g. "dblab_vg/pg_lv", in the case of LVM).
2527
pool: "dblab_pool"
2628

2729
# Pool of ports for Postgres clones.

pkg/services/provision/mode_local.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/docker"
2323
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/resources"
2424
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/runners"
25-
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/volumemanagers"
25+
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/thinclones"
2626
"gitlab.com/postgres-ai/database-lab/pkg/util/pglog"
2727
)
2828

@@ -64,17 +64,17 @@ type ModeLocalConfig struct {
6464
DockerImage string `yaml:"dockerImage"`
6565
UseSudo bool `yaml:"useSudo"`
6666

67-
// Logical volume manager.
68-
VolumeManager string `yaml:"volumeManager"`
67+
// Thin-clone manager.
68+
ThinCloneManager string `yaml:"thinCloneManager"`
6969
}
7070

7171
type provisionModeLocal struct {
7272
provision
73-
dockerClient *client.Client
74-
runner runners.Runner
75-
ports []bool
76-
sessionCounter uint
77-
volumeManager volumemanagers.VolumeManager
73+
dockerClient *client.Client
74+
runner runners.Runner
75+
ports []bool
76+
sessionCounter uint
77+
thinCloneManager thinclones.Manager
7878
}
7979

8080
// NewProvisionModeLocal creates a new Provision instance of ModeLocal.
@@ -89,8 +89,8 @@ func NewProvisionModeLocal(ctx context.Context, config Config, dockerClient *cli
8989
},
9090
}
9191

92-
volumeManager, err := volumemanagers.NewVolumeManager(p.config.ModeLocal.VolumeManager,
93-
p.runner, volumemanagers.VolumeManagerConfig{
92+
thinCloneManager, err := thinclones.NewManager(p.config.ModeLocal.ThinCloneManager,
93+
p.runner, thinclones.ManagerConfig{
9494
Pool: p.config.ModeLocal.ClonePool,
9595
SnapshotFilterSuffix: p.config.ModeLocal.SnapshotFilterSuffix,
9696
MountDir: p.config.ModeLocal.MountDir,
@@ -99,10 +99,10 @@ func NewProvisionModeLocal(ctx context.Context, config Config, dockerClient *cli
9999
})
100100

101101
if err != nil {
102-
return nil, errors.Wrap(err, "failed to initialize volume manager")
102+
return nil, errors.Wrap(err, "failed to initialize thin-clone manager")
103103
}
104104

105-
p.volumeManager = volumeManager
105+
p.thinCloneManager = thinCloneManager
106106

107107
if len(p.config.ModeLocal.MountDir) == 0 {
108108
p.config.ModeLocal.MountDir = "/var/lib/dblab/clones/"
@@ -212,7 +212,7 @@ func (j *provisionModeLocal) StartSession(username, password, snapshotID string)
212212
}
213213
}()
214214

215-
err = j.volumeManager.CreateClone(name, snapshotID)
215+
err = j.thinCloneManager.CreateClone(name, snapshotID)
216216
if err != nil {
217217
return nil, errors.Wrap(err, "failed to create a clone")
218218
}
@@ -258,7 +258,7 @@ func (j *provisionModeLocal) StopSession(session *resources.Session) error {
258258
return errors.Wrap(err, "failed to stop a container")
259259
}
260260

261-
err = j.volumeManager.DestroyClone(name)
261+
err = j.thinCloneManager.DestroyClone(name)
262262
if err != nil {
263263
return errors.Wrap(err, "failed to destroy a clone")
264264
}
@@ -290,12 +290,12 @@ func (j *provisionModeLocal) ResetSession(session *resources.Session, snapshotID
290290
return errors.Wrap(err, "failed to stop a container")
291291
}
292292

293-
err = j.volumeManager.DestroyClone(name)
293+
err = j.thinCloneManager.DestroyClone(name)
294294
if err != nil {
295295
return errors.Wrap(err, "failed to destroy clone")
296296
}
297297

298-
err = j.volumeManager.CreateClone(name, snapshotID)
298+
err = j.thinCloneManager.CreateClone(name, snapshotID)
299299
if err != nil {
300300
return errors.Wrap(err, "failed to create a clone")
301301
}
@@ -320,15 +320,15 @@ func (j *provisionModeLocal) CreateSnapshot(name string) error {
320320
}
321321

322322
func (j *provisionModeLocal) GetSnapshots() ([]resources.Snapshot, error) {
323-
return j.volumeManager.GetSnapshots()
323+
return j.thinCloneManager.GetSnapshots()
324324
}
325325

326326
func (j *provisionModeLocal) GetDiskState() (*resources.Disk, error) {
327-
return j.volumeManager.GetDiskState()
327+
return j.thinCloneManager.GetDiskState()
328328
}
329329

330330
func (j *provisionModeLocal) GetSessionState(s *resources.Session) (*resources.SessionState, error) {
331-
return j.volumeManager.GetSessionState(j.getName(s.Port))
331+
return j.thinCloneManager.GetSessionState(j.getName(s.Port))
332332
}
333333

334334
// Other methods.
@@ -339,7 +339,7 @@ func (j *provisionModeLocal) revertSession(name string) {
339339
log.Err(`Revert:`, runnerErr)
340340
}
341341

342-
if runnerErr := j.volumeManager.DestroyClone(name); runnerErr != nil {
342+
if runnerErr := j.thinCloneManager.DestroyClone(name); runnerErr != nil {
343343
log.Err(`Revert:`, runnerErr)
344344
}
345345
}
@@ -414,15 +414,15 @@ func (j *provisionModeLocal) stopAllSessions() error {
414414
}
415415
}
416416

417-
clones, err := j.volumeManager.ListClonesNames()
417+
clones, err := j.thinCloneManager.ListClonesNames()
418418
if err != nil {
419419
return err
420420
}
421421

422422
log.Dbg("VM clones:", clones)
423423

424424
for _, clone := range clones {
425-
err = j.volumeManager.DestroyClone(clone)
425+
err = j.thinCloneManager.DestroyClone(clone)
426426
if err != nil {
427427
return err
428428
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
2020 © Postgres.ai
3+
*/
4+
5+
// Package thinclones provides an interface to work different thin-clone managers.
6+
package thinclones
7+
8+
import (
9+
"fmt"
10+
11+
"github.com/pkg/errors"
12+
13+
"gitlab.com/postgres-ai/database-lab/pkg/log"
14+
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/resources"
15+
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/runners"
16+
)
17+
18+
const (
19+
// ManagerZFS defines "Manager" option value for ZFS.
20+
ManagerZFS = "zfs"
21+
22+
// ManagerLVM defines "Manager" option value for LVM.
23+
ManagerLVM = "lvm"
24+
)
25+
26+
// Manager defines an interface to work different thin-clone managers.
27+
type Manager interface {
28+
CreateClone(name, snapshotID string) error
29+
DestroyClone(name string) error
30+
ListClonesNames() ([]string, error)
31+
32+
GetSessionState(name string) (*resources.SessionState, error)
33+
GetDiskState() (*resources.Disk, error)
34+
GetSnapshots() ([]resources.Snapshot, error)
35+
}
36+
37+
// ManagerConfig defines thin-clone manager config.
38+
type ManagerConfig struct {
39+
Pool string
40+
SnapshotFilterSuffix string
41+
MountDir string
42+
OSUsername string
43+
ClonePrefix string
44+
}
45+
46+
// NewManager defines constructor for thin-clone managers.
47+
func NewManager(mode string, runner runners.Runner, config ManagerConfig) (Manager, error) {
48+
var (
49+
manager Manager
50+
err error
51+
)
52+
53+
switch mode {
54+
case ManagerZFS:
55+
manager = newManagerZFS(runner, config)
56+
case ManagerLVM:
57+
if manager, err = newManagerLVM(runner, config); err != nil {
58+
return nil, errors.Wrap(err, "failed to initialize LVM thin-clone manager")
59+
}
60+
default:
61+
return nil, errors.New(fmt.Sprintf(`unsupported thin-clone manager specified: "%s"`, mode))
62+
}
63+
64+
log.Dbg(fmt.Sprintf(`Using "%s" thin-clone manager.`, mode))
65+
66+
return manager, nil
67+
}

pkg/services/provision/volumemanagers/volume_manager_lvm.go renamed to pkg/services/provision/thinclones/manager_lvm.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
2019 © Postgres.ai
33
*/
44

5-
package volumemanagers
5+
package thinclones
66

77
import (
88
"strings"
@@ -11,23 +11,23 @@ import (
1111

1212
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/resources"
1313
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/runners"
14-
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/volumemanagers/lvm"
14+
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/thinclones/lvm"
1515
)
1616

1717
const (
1818
poolPartsLen = 2
1919
)
2020

21-
type volumeManagerLVM struct {
21+
type managerLVM struct {
2222
runner runners.Runner
23-
config VolumeManagerConfig
23+
config ManagerConfig
2424
volumeGroup string
2525
logicVolume string
2626
}
2727

28-
// newVolumeManagerLVM creates a new VolumeManager instance for LVM.
29-
func newVolumeManagerLVM(runner runners.Runner, config VolumeManagerConfig) (*volumeManagerLVM, error) {
30-
m := volumeManagerLVM{}
28+
// newManagerLVM creates a new Manager instance for LVM.
29+
func newManagerLVM(runner runners.Runner, config ManagerConfig) (*managerLVM, error) {
30+
m := managerLVM{}
3131

3232
m.runner = runner
3333
m.config = config
@@ -39,15 +39,15 @@ func newVolumeManagerLVM(runner runners.Runner, config VolumeManagerConfig) (*vo
3939
return &m, nil
4040
}
4141

42-
func (m *volumeManagerLVM) CreateClone(name, snapshotID string) error {
42+
func (m *managerLVM) CreateClone(name, snapshotID string) error {
4343
return lvm.CreateVolume(m.runner, m.volumeGroup, m.logicVolume, name, m.config.MountDir)
4444
}
4545

46-
func (m *volumeManagerLVM) DestroyClone(name string) error {
46+
func (m *managerLVM) DestroyClone(name string) error {
4747
return lvm.RemoveVolume(m.runner, m.volumeGroup, m.logicVolume, name, m.config.MountDir)
4848
}
4949

50-
func (m *volumeManagerLVM) ListClonesNames() ([]string, error) {
50+
func (m *managerLVM) ListClonesNames() ([]string, error) {
5151
volumes, err := lvm.ListVolumes(m.runner, m.volumeGroup)
5252
if err != nil {
5353
return nil, errors.Wrap(err, "failed to list LVM volumes")
@@ -62,24 +62,24 @@ func (m *volumeManagerLVM) ListClonesNames() ([]string, error) {
6262
return volumesNames, nil
6363
}
6464

65-
func (m *volumeManagerLVM) GetSessionState(name string) (*resources.SessionState, error) {
65+
func (m *managerLVM) GetSessionState(name string) (*resources.SessionState, error) {
6666
// TODO(anatoly): Implement.
6767
return &resources.SessionState{}, nil
6868
}
6969

70-
func (m *volumeManagerLVM) GetDiskState() (*resources.Disk, error) {
70+
func (m *managerLVM) GetDiskState() (*resources.Disk, error) {
7171
// TODO(anatoly): Implement.
7272
return &resources.Disk{}, nil
7373
}
7474

75-
func (m *volumeManagerLVM) GetSnapshots() ([]resources.Snapshot, error) {
75+
func (m *managerLVM) GetSnapshots() ([]resources.Snapshot, error) {
7676
// TODO(anatoly): Not supported in LVM mode warning.
7777
return []resources.Snapshot{resources.Snapshot{
7878
ID: "default",
7979
}}, nil
8080
}
8181

82-
func (m *volumeManagerLVM) parsePool() error {
82+
func (m *managerLVM) parsePool() error {
8383
parts := strings.SplitN(m.config.Pool, "/", poolPartsLen)
8484
if len(parts) < poolPartsLen {
8585
return errors.Errorf(`failed to parse "pool" value from config`)

pkg/services/provision/volumemanagers/volume_manager_zfs.go renamed to pkg/services/provision/thinclones/manager_zfs.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
2019 © Postgres.ai
33
*/
44

5-
package volumemanagers
5+
package thinclones
66

77
import (
88
"strings"
@@ -11,41 +11,41 @@ import (
1111

1212
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/resources"
1313
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/runners"
14-
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/volumemanagers/zfs"
14+
"gitlab.com/postgres-ai/database-lab/pkg/services/provision/thinclones/zfs"
1515
)
1616

1717
const (
1818
defaultSessionCloneSize = 10
1919
)
2020

21-
type volumeManagerZFS struct {
21+
type managerZFS struct {
2222
runner runners.Runner
23-
config VolumeManagerConfig
23+
config ManagerConfig
2424
}
2525

26-
// newVolumeManagerZFS creates a new VolumeManager instance for ZFS.
27-
func newVolumeManagerZFS(runner runners.Runner, config VolumeManagerConfig) *volumeManagerZFS {
28-
m := volumeManagerZFS{}
26+
// newManagerZFS creates a new Manager instance for ZFS.
27+
func newManagerZFS(runner runners.Runner, config ManagerConfig) *managerZFS {
28+
m := managerZFS{}
2929

3030
m.runner = runner
3131
m.config = config
3232

3333
return &m
3434
}
3535

36-
func (m *volumeManagerZFS) CreateClone(name, snapshotID string) error {
36+
func (m *managerZFS) CreateClone(name, snapshotID string) error {
3737
return zfs.CreateClone(m.runner, m.config.Pool, name, snapshotID, m.config.MountDir, m.config.OSUsername)
3838
}
3939

40-
func (m *volumeManagerZFS) DestroyClone(name string) error {
40+
func (m *managerZFS) DestroyClone(name string) error {
4141
return zfs.DestroyClone(m.runner, m.config.Pool, name)
4242
}
4343

44-
func (m *volumeManagerZFS) ListClonesNames() ([]string, error) {
44+
func (m *managerZFS) ListClonesNames() ([]string, error) {
4545
return zfs.ListClones(m.runner, m.config.ClonePrefix)
4646
}
4747

48-
func (m *volumeManagerZFS) GetSessionState(name string) (*resources.SessionState, error) {
48+
func (m *managerZFS) GetSessionState(name string) (*resources.SessionState, error) {
4949
state := &resources.SessionState{
5050
CloneSize: defaultSessionCloneSize,
5151
}
@@ -75,7 +75,7 @@ func (m *volumeManagerZFS) GetSessionState(name string) (*resources.SessionState
7575
return state, nil
7676
}
7777

78-
func (m *volumeManagerZFS) GetDiskState() (*resources.Disk, error) {
78+
func (m *managerZFS) GetDiskState() (*resources.Disk, error) {
7979
parts := strings.SplitN(m.config.Pool, "/", 2)
8080
parentPool := parts[0]
8181

@@ -113,7 +113,7 @@ func (m *volumeManagerZFS) GetDiskState() (*resources.Disk, error) {
113113
return disk, nil
114114
}
115115

116-
func (m *volumeManagerZFS) GetSnapshots() ([]resources.Snapshot, error) {
116+
func (m *managerZFS) GetSnapshots() ([]resources.Snapshot, error) {
117117
entries, err := zfs.ListSnapshots(m.runner, m.config.Pool)
118118
if err != nil {
119119
return nil, errors.Wrap(err, "failed to list snapshots")

0 commit comments

Comments
 (0)