Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a746a38

Browse filesBrowse files
feat: rename VolumeManager to ThinCloneManager
1 parent 4031df9 commit a746a38
Copy full SHA for a746a38

File tree

Expand file treeCollapse file tree

8 files changed

+121
-119
lines changed
Filter options
Expand file treeCollapse file tree

8 files changed

+121
-119
lines changed

‎configs/config.sample.yml

Copy file name to clipboardExpand all lines: configs/config.sample.yml
+5-3Lines 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

Copy file name to clipboardExpand all lines: pkg/services/provision/mode_local.go
+22-22Lines 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
}
+67Lines 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

Copy file name to clipboardExpand all lines: pkg/services/provision/thinclones/manager_lvm.go
+14-14Lines 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

Copy file name to clipboardExpand all lines: pkg/services/provision/thinclones/manager_zfs.go
+13-13Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.