Make the Syncgroup factory methods like the ones for Collection
There is currently a Database.Syncgroup(wire.Id) factory method,
change it to be consistent with Collection.SyncgroupForId/Syncgroup,
where Syncgroup() takes a name and context and the user blessing
is pulled from the context.
MultiPart: 1/3
Change-Id: Ic3e641888193bcf0682959d5f05353e1957de470
diff --git a/syncbase/.api b/syncbase/.api
index c095dec..91c3597 100644
--- a/syncbase/.api
+++ b/syncbase/.api
@@ -186,7 +186,8 @@
pkg syncbase, type Database interface, ListSyncgroups(*context.T) ([]wire.Id, error)
pkg syncbase, type Database interface, PauseSync(*context.T) error
pkg syncbase, type Database interface, ResumeSync(*context.T) error
-pkg syncbase, type Database interface, Syncgroup(wire.Id) Syncgroup
+pkg syncbase, type Database interface, Syncgroup(*context.T, string) Syncgroup
+pkg syncbase, type Database interface, SyncgroupForId(wire.Id) Syncgroup
pkg syncbase, type Database interface, Watch(*context.T, wire.Id, string, watch.ResumeMarker) (WatchStream, error)
pkg syncbase, type Database interface, unexported methods
pkg syncbase, type DatabaseHandle interface { Collection, CollectionForId, Exec, FullName, GetResumeMarker, Id, ListCollections }
diff --git a/syncbase/database.go b/syncbase/database.go
index f9390fe..ed66afa 100644
--- a/syncbase/database.go
+++ b/syncbase/database.go
@@ -120,11 +120,21 @@
return newWatchStream(cancel, call), nil
}
-// Syncgroup implements Database.Syncgroup.
-func (d *database) Syncgroup(id wire.Id) Syncgroup {
+// SyncgroupForId implements Database.SyncgroupForId.
+func (d *database) SyncgroupForId(id wire.Id) Syncgroup {
return newSyncgroup(d.fullName, id)
}
+// Syncgroup implements Database.Syncgroup.
+func (d *database) Syncgroup(ctx *context.T, name string) Syncgroup {
+ blessing, err := util.UserBlessingFromContext(ctx)
+ if err != nil {
+ // TODO(sadovsky): Return invalid Syncgroup handle.
+ panic(err)
+ }
+ return newSyncgroup(d.fullName, wire.Id{Name: name, Blessing: blessing})
+}
+
// ListSyncgroups implements Database.ListSyncgroups.
func (d *database) ListSyncgroups(ctx *context.T) ([]wire.Id, error) {
return d.c.ListSyncgroups(ctx)
diff --git a/syncbase/featuretests/test_util_test.go b/syncbase/featuretests/test_util_test.go
index 4dfb212..c5576db 100644
--- a/syncbase/featuretests/test_util_test.go
+++ b/syncbase/featuretests/test_util_test.go
@@ -245,7 +245,7 @@
MountTables: []string{mtName},
}
- sg := d.Syncgroup(sgId)
+ sg := d.SyncgroupForId(sgId)
info := wire.SyncgroupMemberInfo{SyncPriority: 8}
if err := sg.Create(ctx, spec, info); err != nil {
return fmt.Errorf("{%q, %v} sg.Create() failed: %v", syncbaseName, sgId, err)
@@ -255,7 +255,7 @@
func joinSyncgroup(ctx *context.T, sbNameLocal, sbNameRemote string, sgId wire.Id) error {
d := syncbase.NewService(sbNameLocal).DatabaseForId(testDb, nil)
- sg := d.Syncgroup(sgId)
+ sg := d.SyncgroupForId(sgId)
info := wire.SyncgroupMemberInfo{SyncPriority: 10}
if _, err := sg.Join(ctx, sbNameRemote, "", info); err != nil {
return fmt.Errorf("{%q, %q} sg.Join() failed: %v", sbNameRemote, sgId, err)
@@ -265,7 +265,7 @@
func verifySyncgroupMembers(ctx *context.T, syncbaseName string, sgId wire.Id, wantMembers int) error {
d := syncbase.NewService(syncbaseName).DatabaseForId(testDb, nil)
- sg := d.Syncgroup(sgId)
+ sg := d.SyncgroupForId(sgId)
var gotMembers int
for i := 0; i < 8; i++ {
diff --git a/syncbase/model.go b/syncbase/model.go
index a0a60ee..b8c0724 100644
--- a/syncbase/model.go
+++ b/syncbase/model.go
@@ -155,11 +155,12 @@
// returns just a ScanStream.
Watch(ctx *context.T, collection wire.Id, prefix string, resumeMarker watch.ResumeMarker) (WatchStream, error)
- // Syncgroup returns a handle to the syncgroup with the given Id.
- // TODO(fredq): change this to SyncgroupForId and add a Syncgroup method that just
- // takes a name, similar to Database.Collection/CollectionForId and
- // Service.Database/DatabaseForId, extracting the user blessing from the context.
- Syncgroup(id wire.Id) Syncgroup
+ // SyncgroupForId returns a handle to the syncgroup with the given Id.
+ SyncgroupForId(id wire.Id) Syncgroup
+
+ // Syncgroup returns a handle to the syncgroup with the given name and with the user
+ // blessing.
+ Syncgroup(ctx *context.T, name string) Syncgroup
// ListSyncgroups returns all Syncgroups attached to this database.
ListSyncgroups(ctx *context.T) ([]wire.Id, error)
diff --git a/syncbase/syncgroup_test.go b/syncbase/syncgroup_test.go
index efa3212..b591b4f 100644
--- a/syncbase/syncgroup_test.go
+++ b/syncbase/syncgroup_test.go
@@ -176,7 +176,7 @@
spec.Description = "test syncgroup sg1 update"
spec.Perms = perms("root:client", "root:client1")
- sg := d.Syncgroup(sgId)
+ sg := d.SyncgroupForId(sgId)
if err := sg.SetSpec(ctx, spec, ""); err != nil {
t.Fatalf("sg.SetSpec failed: %v", err)
}
@@ -187,7 +187,7 @@
// Helpers.
func createSyncgroup(t *testing.T, ctx *context.T, d syncbase.Database, sgId wire.Id, spec wire.SyncgroupSpec, errID verror.ID) syncbase.Syncgroup {
- sg := d.Syncgroup(sgId)
+ sg := d.SyncgroupForId(sgId)
info := wire.SyncgroupMemberInfo{SyncPriority: 8}
if err := sg.Create(ctx, spec, info); verror.ErrorID(err) != errID {
tu.Fatalf(t, "Create SG %+v failed: %v", sgId, err)
@@ -196,7 +196,7 @@
}
func joinSyncgroup(t *testing.T, ctx *context.T, d syncbase.Database, sbName string, sgId wire.Id, wantErr verror.ID) syncbase.Syncgroup {
- sg := d.Syncgroup(sgId)
+ sg := d.SyncgroupForId(sgId)
info := wire.SyncgroupMemberInfo{SyncPriority: 10}
if _, err := sg.Join(ctx, sbName, "", info); verror.ErrorID(err) != wantErr {
tu.Fatalf(t, "Join SG %v failed: %v", sgId, err)
@@ -215,7 +215,7 @@
}
func verifySyncgroupInfo(t *testing.T, ctx *context.T, d syncbase.Database, sgId wire.Id, wantSpec wire.SyncgroupSpec, wantMembers int) {
- sg := d.Syncgroup(sgId)
+ sg := d.SyncgroupForId(sgId)
gotSpec, _, err := sg.GetSpec(ctx)
if err != nil || !reflect.DeepEqual(gotSpec, wantSpec) {
t.Fatalf("sg.GetSpec() failed, got %v, want %v, err %v", gotSpec, wantSpec, err)
diff --git a/syncbase/syncgroup_v23_test.go b/syncbase/syncgroup_v23_test.go
index 8324b13..7554077 100644
--- a/syncbase/syncgroup_v23_test.go
+++ b/syncbase/syncgroup_v23_test.go
@@ -596,7 +596,7 @@
MountTables: mtNames,
}
- sg := d.Syncgroup(wire.Id{Name: sgName, Blessing: "blessing"})
+ sg := d.SyncgroupForId(wire.Id{Name: sgName, Blessing: "blessing"})
info := wire.SyncgroupMemberInfo{SyncPriority: 8}
if err := sg.Create(ctx, spec, info); err != nil {
return fmt.Errorf("Create SG %v failed: %v\n", sgName, err)
@@ -606,7 +606,7 @@
func runJoinSyncgroup(ctx *context.T, sbNameLocal, sbNameRemote, sgName string) error {
d := dbHandle(sbNameLocal)
- sg := d.Syncgroup(wire.Id{Name: sgName, Blessing: "blessing"})
+ sg := d.SyncgroupForId(wire.Id{Name: sgName, Blessing: "blessing"})
info := wire.SyncgroupMemberInfo{SyncPriority: 10}
if _, err := sg.Join(ctx, sbNameRemote, "", info); err != nil {
return fmt.Errorf("Join SG %q, %q failed: %v\n", sbNameRemote, sgName, err)
@@ -616,7 +616,7 @@
func runSetSyncgroupSpec(ctx *context.T, serviceName, sbName, sgName, sgDesc, sgPrefixes string, sgBlessings ...string) error {
d := dbHandle(serviceName)
- sg := d.Syncgroup(wire.Id{Name: sgName, Blessing: "blessing"})
+ sg := d.SyncgroupForId(wire.Id{Name: sgName, Blessing: "blessing"})
mtNames := v23.GetNamespace(ctx).Roots()
spec := wire.SyncgroupSpec{
@@ -634,7 +634,7 @@
func runGetSyncgroupSpec(ctx *context.T, serviceName, sbName, sgName, wantDesc, wantPrefixes string, wantBlessings ...string) error {
d := dbHandle(serviceName)
- sg := d.Syncgroup(wire.Id{Name: sgName, Blessing: "blessing"})
+ sg := d.SyncgroupForId(wire.Id{Name: sgName, Blessing: "blessing"})
wantPfxs := toSgPrefixes(wantPrefixes)
wantPerms := perms(wantBlessings...)
@@ -659,7 +659,7 @@
func runGetSyncgroupMembers(ctx *context.T, serviceName, sbName, sgName string, wantMembers uint64) error {
d := dbHandle(serviceName)
- sg := d.Syncgroup(wire.Id{Name: sgName, Blessing: "blessing"})
+ sg := d.SyncgroupForId(wire.Id{Name: sgName, Blessing: "blessing"})
var gotMembers uint64
var members map[string]wire.SyncgroupMemberInfo
@@ -1134,7 +1134,7 @@
MountTables: mtNames,
}
- sg := d.Syncgroup(wire.Id{Name: sgName, Blessing: "blessing"})
+ sg := d.SyncgroupForId(wire.Id{Name: sgName, Blessing: "blessing"})
info := wire.SyncgroupMemberInfo{SyncPriority: 8}
if err := sg.Create(ctx, spec, info); err != nil {
return fmt.Errorf("Create SG %q failed: %v\n", sgName, err)
@@ -1156,7 +1156,7 @@
d := svc.DatabaseForId(wire.Id{appName, dbName}, nil)
sgName := fmt.Sprintf("%s_%s", appName, dbName)
- sg := d.Syncgroup(wire.Id{Name: sgName, Blessing: "blessing"})
+ sg := d.SyncgroupForId(wire.Id{Name: sgName, Blessing: "blessing"})
info := wire.SyncgroupMemberInfo{SyncPriority: 10}
if _, err := sg.Join(ctx, sbNameRemote, "", info); err != nil {
return fmt.Errorf("Join SG Multi %q failed: %v\n", sgName, err)