Skip to content

Commit ac78b88

Browse files
authored
Merge pull request #28 from ydb-platform/scheme
Publish scheme Client interface (move from internal)
2 parents 851bf03 + a5ef668 commit ac78b88

File tree

11 files changed

+262
-224
lines changed

11 files changed

+262
-224
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 3.1.0
2+
* published scheme Client interface
3+
14
## 3.0.1
25
* refactored integration tests
36
* fixed table retry trace calls

connection.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/ydb-platform/ydb-go-sdk/v3/internal/dial"
1313
"github.com/ydb-platform/ydb-go-sdk/v3/internal/discovery"
1414
"github.com/ydb-platform/ydb-go-sdk/v3/internal/ratelimiter"
15-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/scheme"
15+
"github.com/ydb-platform/ydb-go-sdk/v3/scheme"
1616
"github.com/ydb-platform/ydb-go-sdk/v3/table"
1717
)
1818

coordiantion.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66

77
"github.com/ydb-platform/ydb-go-sdk/v3/coordination"
88
internal "github.com/ydb-platform/ydb-go-sdk/v3/internal/coordination"
9-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/scheme"
9+
"github.com/ydb-platform/ydb-go-sdk/v3/scheme"
1010
)
1111

1212
type lazyCoordination struct {

internal/coordination/coordination.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
"github.com/ydb-platform/ydb-go-sdk/v3/cluster"
1212
"github.com/ydb-platform/ydb-go-sdk/v3/coordination"
13-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/scheme"
13+
"github.com/ydb-platform/ydb-go-sdk/v3/scheme"
1414
)
1515

1616
type Client interface {

internal/meta/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package meta
22

33
const (
4-
Version = "ydb-go-sdk/3.0.1"
4+
Version = "ydb-go-sdk/3.1.0"
55
)

internal/scheme/options.go

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,52 +7,10 @@ type permissionsDesc struct {
77
actions []*Ydb_Scheme.PermissionsAction
88
}
99

10-
func permissions(p Permissions) *Ydb_Scheme.Permissions {
11-
var y Ydb_Scheme.Permissions
12-
p.to(&y)
13-
return &y
10+
func (p *permissionsDesc) SetClear(clear bool) {
11+
p.clear = clear
1412
}
1513

16-
type PermissionsOption func(*permissionsDesc)
17-
18-
func WithClearPermissions() PermissionsOption {
19-
return func(p *permissionsDesc) {
20-
p.clear = true
21-
}
22-
}
23-
func WithGrantPermissions(p Permissions) PermissionsOption {
24-
return func(d *permissionsDesc) {
25-
d.actions = append(d.actions, &Ydb_Scheme.PermissionsAction{
26-
Action: &Ydb_Scheme.PermissionsAction_Grant{
27-
Grant: permissions(p),
28-
},
29-
})
30-
}
31-
}
32-
func WithRevokePermissions(p Permissions) PermissionsOption {
33-
return func(d *permissionsDesc) {
34-
d.actions = append(d.actions, &Ydb_Scheme.PermissionsAction{
35-
Action: &Ydb_Scheme.PermissionsAction_Revoke{
36-
Revoke: permissions(p),
37-
},
38-
})
39-
}
40-
}
41-
func WithSetPermissions(p Permissions) PermissionsOption {
42-
return func(d *permissionsDesc) {
43-
d.actions = append(d.actions, &Ydb_Scheme.PermissionsAction{
44-
Action: &Ydb_Scheme.PermissionsAction_Set{
45-
Set: permissions(p),
46-
},
47-
})
48-
}
49-
}
50-
func WithChangeOwner(owner string) PermissionsOption {
51-
return func(d *permissionsDesc) {
52-
d.actions = append(d.actions, &Ydb_Scheme.PermissionsAction{
53-
Action: &Ydb_Scheme.PermissionsAction_ChangeOwner{
54-
ChangeOwner: owner,
55-
},
56-
})
57-
}
14+
func (p *permissionsDesc) AppendAction(action *Ydb_Scheme.PermissionsAction) {
15+
p.actions = append(p.actions, action)
5816
}

internal/scheme/options_test.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,32 @@ import (
44
"testing"
55

66
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Scheme"
7+
8+
"github.com/ydb-platform/ydb-go-sdk/v3/scheme"
79
)
810

911
func TestSchemeOptions(t *testing.T) {
1012
{
11-
opts := []PermissionsOption{
12-
WithClearPermissions(),
13-
WithChangeOwner("ow"),
14-
WithGrantPermissions(Permissions{
13+
opts := []scheme.PermissionsOption{
14+
scheme.WithClearPermissions(),
15+
scheme.WithChangeOwner("ow"),
16+
scheme.WithGrantPermissions(scheme.Permissions{
1517
Subject: "grant",
1618
PermissionNames: []string{"a", "b", "c"},
1719
}),
18-
WithSetPermissions(Permissions{
20+
scheme.WithSetPermissions(scheme.Permissions{
1921
Subject: "set",
2022
PermissionNames: []string{"d"},
2123
}),
22-
WithRevokePermissions(Permissions{
24+
scheme.WithRevokePermissions(scheme.Permissions{
2325
Subject: "revoke",
2426
PermissionNames: []string{"e"},
2527
}),
2628
}
2729

2830
var desc permissionsDesc
29-
for _, opt := range opts {
30-
opt(&desc)
31+
for _, o := range opts {
32+
o(&desc)
3133
}
3234

3335
if !desc.clear {

internal/scheme/scheme.go

Lines changed: 13 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -9,98 +9,9 @@ import (
99
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Scheme"
1010

1111
"github.com/ydb-platform/ydb-go-sdk/v3/cluster"
12+
"github.com/ydb-platform/ydb-go-sdk/v3/scheme"
1213
)
1314

14-
type Client interface {
15-
Scheme
16-
17-
CleanupDatabase(ctx context.Context, prefix string, names ...string) error
18-
EnsurePathExists(ctx context.Context, path string) error
19-
}
20-
21-
type Scheme interface {
22-
DescribePath(ctx context.Context, path string) (e Entry, err error)
23-
MakeDirectory(ctx context.Context, path string) (err error)
24-
ListDirectory(ctx context.Context, path string) (d Directory, err error)
25-
RemoveDirectory(ctx context.Context, path string) (err error)
26-
27-
Close(ctx context.Context) error
28-
}
29-
30-
type EntryType uint
31-
32-
const (
33-
EntryTypeUnknown EntryType = iota
34-
EntryDirectory
35-
EntryTable
36-
EntryPersQueueGroup
37-
EntryDatabase
38-
EntryRtmrVolume
39-
EntryBlockStoreVolume
40-
EntryCoordinationNode
41-
)
42-
43-
func (t EntryType) String() string {
44-
switch t {
45-
default:
46-
return "Unknown"
47-
case EntryDirectory:
48-
return "Directory"
49-
case EntryTable:
50-
return "Table"
51-
case EntryPersQueueGroup:
52-
return "PersQueueGroup"
53-
case EntryDatabase:
54-
return "Name"
55-
case EntryRtmrVolume:
56-
return "RtmrVolume"
57-
case EntryBlockStoreVolume:
58-
return "BlockStoreVolume"
59-
case EntryCoordinationNode:
60-
return "CoordinationNode"
61-
}
62-
}
63-
64-
type Permissions struct {
65-
Subject string
66-
PermissionNames []string
67-
}
68-
69-
type Entry struct {
70-
Name string
71-
Owner string
72-
Type EntryType
73-
Permissions []Permissions
74-
EffectivePermissions []Permissions
75-
}
76-
77-
func (e *Entry) IsDirectory() bool {
78-
return e.Type == EntryDirectory
79-
}
80-
func (e *Entry) IsTable() bool {
81-
return e.Type == EntryTable
82-
}
83-
func (e *Entry) IsPersQueueGroup() bool {
84-
return e.Type == EntryPersQueueGroup
85-
}
86-
func (e *Entry) IsDatabase() bool {
87-
return e.Type == EntryDatabase
88-
}
89-
func (e *Entry) IsRtmrVolume() bool {
90-
return e.Type == EntryRtmrVolume
91-
}
92-
func (e *Entry) IsBlockStoreVolume() bool {
93-
return e.Type == EntryBlockStoreVolume
94-
}
95-
func (e *Entry) IsCoordinationNode() bool {
96-
return e.Type == EntryCoordinationNode
97-
}
98-
99-
type Directory struct {
100-
Entry
101-
Children []Entry
102-
}
103-
10415
type client struct {
10516
cluster cluster.Cluster
10617
service Ydb_Scheme_V1.SchemeServiceClient
@@ -110,7 +21,7 @@ func (c *client) Close(_ context.Context) error {
11021
return nil
11122
}
11223

113-
func New(c cluster.Cluster) Scheme {
24+
func New(c cluster.Cluster) scheme.Scheme {
11425
return &client{
11526
cluster: c,
11627
service: Ydb_Scheme_V1.NewSchemeServiceClient(c),
@@ -131,9 +42,9 @@ func (c *client) RemoveDirectory(ctx context.Context, path string) (err error) {
13142
return err
13243
}
13344

134-
func (c *client) ListDirectory(ctx context.Context, path string) (Directory, error) {
45+
func (c *client) ListDirectory(ctx context.Context, path string) (scheme.Directory, error) {
13546
var (
136-
d Directory
47+
d scheme.Directory
13748
err error
13849
response *Ydb_Scheme.ListDirectoryResponse
13950
result Ydb_Scheme.ListDirectoryResult
@@ -148,13 +59,13 @@ func (c *client) ListDirectory(ctx context.Context, path string) (Directory, err
14859
if err != nil {
14960
return d, err
15061
}
151-
d.from(result.Self)
152-
d.Children = make([]Entry, len(result.Children))
62+
d.From(result.Self)
63+
d.Children = make([]scheme.Entry, len(result.Children))
15364
putEntry(d.Children, result.Children)
15465
return d, nil
15566
}
15667

157-
func (c *client) DescribePath(ctx context.Context, path string) (e Entry, err error) {
68+
func (c *client) DescribePath(ctx context.Context, path string) (e scheme.Entry, err error) {
15869
var (
15970
response *Ydb_Scheme.DescribePathResponse
16071
result Ydb_Scheme.DescribePathResult
@@ -169,14 +80,14 @@ func (c *client) DescribePath(ctx context.Context, path string) (e Entry, err er
16980
if err != nil {
17081
return e, err
17182
}
172-
e.from(result.Self)
83+
e.From(result.Self)
17384
return e, nil
17485
}
17586

176-
func (c *client) ModifyPermissions(ctx context.Context, path string, opts ...PermissionsOption) (err error) {
87+
func (c *client) ModifyPermissions(ctx context.Context, path string, opts ...scheme.PermissionsOption) (err error) {
17788
var desc permissionsDesc
178-
for _, opt := range opts {
179-
opt(&desc)
89+
for _, o := range opts {
90+
o(&desc)
18091
}
18192
_, err = c.service.ModifyPermissions(ctx, &Ydb_Scheme.ModifyPermissionsRequest{
18293
Path: path,
@@ -186,70 +97,8 @@ func (c *client) ModifyPermissions(ctx context.Context, path string, opts ...Per
18697
return err
18798
}
18899

189-
func (e *Entry) from(y *Ydb_Scheme.Entry) {
190-
var (
191-
n = len(y.Permissions)
192-
m = len(y.EffectivePermissions)
193-
p = make([]Permissions, n+m)
194-
)
195-
putPermissions(p[:n], y.Permissions)
196-
putPermissions(p[n:], y.EffectivePermissions)
197-
*e = Entry{
198-
Name: y.Name,
199-
Owner: y.Owner,
200-
Type: entryType(y.Type),
201-
Permissions: p[0:n],
202-
EffectivePermissions: p[n:m],
203-
}
204-
}
205-
206-
func entryType(t Ydb_Scheme.Entry_Type) EntryType {
207-
switch t {
208-
case Ydb_Scheme.Entry_DIRECTORY:
209-
return EntryDirectory
210-
case Ydb_Scheme.Entry_TABLE:
211-
return EntryTable
212-
case Ydb_Scheme.Entry_PERS_QUEUE_GROUP:
213-
return EntryPersQueueGroup
214-
case Ydb_Scheme.Entry_DATABASE:
215-
return EntryDatabase
216-
case Ydb_Scheme.Entry_RTMR_VOLUME:
217-
return EntryRtmrVolume
218-
case Ydb_Scheme.Entry_BLOCK_STORE_VOLUME:
219-
return EntryBlockStoreVolume
220-
case Ydb_Scheme.Entry_COORDINATION_NODE:
221-
return EntryCoordinationNode
222-
default:
223-
return EntryTypeUnknown
224-
}
225-
}
226-
227-
func (p Permissions) to(y *Ydb_Scheme.Permissions) {
228-
y.Subject = p.Subject
229-
y.PermissionNames = p.PermissionNames
230-
}
231-
232-
func (p *Permissions) from(y *Ydb_Scheme.Permissions) {
233-
*p = Permissions{
234-
Subject: y.Subject,
235-
PermissionNames: y.PermissionNames,
236-
}
237-
}
238-
239-
func putEntry(dst []Entry, src []*Ydb_Scheme.Entry) {
100+
func putEntry(dst []scheme.Entry, src []*Ydb_Scheme.Entry) {
240101
for i, e := range src {
241-
(dst[i]).from(e)
102+
(dst[i]).From(e)
242103
}
243104
}
244-
245-
func putPermissions(dst []Permissions, src []*Ydb_Scheme.Permissions) {
246-
for i, p := range src {
247-
(dst[i]).from(p)
248-
}
249-
}
250-
251-
func InnerConvertEntry(y *Ydb_Scheme.Entry) *Entry {
252-
res := &Entry{}
253-
res.from(y)
254-
return res
255-
}

scheme.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import (
88
"sync"
99

1010
"github.com/ydb-platform/ydb-go-sdk/v3/internal/errors"
11-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/scheme"
11+
internal "github.com/ydb-platform/ydb-go-sdk/v3/internal/scheme"
12+
"github.com/ydb-platform/ydb-go-sdk/v3/scheme"
1213
"github.com/ydb-platform/ydb-go-sdk/v3/table"
1314
)
1415

@@ -24,6 +25,11 @@ type lazyScheme struct {
2425
m sync.Mutex
2526
}
2627

28+
func (s *lazyScheme) ModifyPermissions(ctx context.Context, path string, opts ...scheme.PermissionsOption) (err error) {
29+
s.init()
30+
return s.client.ModifyPermissions(ctx, path, opts...)
31+
}
32+
2733
func (s *lazyScheme) Close(ctx context.Context) error {
2834
s.m.Lock()
2935
defer s.m.Unlock()
@@ -39,7 +45,7 @@ func (s *lazyScheme) Close(ctx context.Context) error {
3945
func (s *lazyScheme) init() {
4046
s.m.Lock()
4147
if s.client == nil {
42-
s.client = scheme.New(s.db)
48+
s.client = internal.New(s.db)
4349
}
4450
s.m.Unlock()
4551
}

0 commit comments

Comments
 (0)