Make the syncgroup an Id
Rather than it being a full vanadium path to the syncgroup
service, change the client API and the RPC protocol to take
an Id as the syncgroup identifier.
Create RPC:
syncgroupId
spec
memberInfo
Create API:
s.Database(dbName)
.Syncgroup(Id{Name,Blessing})
.Create(spec, memberInfo)
Join RPC:
remoteSyncbaseName
remoteSyncbaseExpectedBlessings
syncgroupId
memberInfo
Join API:
s.Database(dbName)
.Syncgroup(sgName, userBlessing)
.Join(remoteSyncbaseName, expectedRemoteSyncbaseBlessings, memberInfo)
MultiPart: 4/4
Change-Id: I1672535bc25fcd6b904c94ca09c4d9f42bcd2e06
diff --git a/go/src/v.io/x/sensorlog/internal/client/device.go b/go/src/v.io/x/sensorlog/internal/client/device.go
index d67333c..65215e2 100644
--- a/go/src/v.io/x/sensorlog/internal/client/device.go
+++ b/go/src/v.io/x/sensorlog/internal/client/device.go
@@ -35,7 +35,7 @@
Desc: desc,
SgPublishSb: sgPublishSb,
}
- devSgName := config.SyncgroupName(sgPublishSb, devKey.Key())
+ devSgName := config.SyncgroupName(devKey.Key())
devRow := db.CollectionForId(sbmodel.CollectionId(devKey)).Row(devKey.Key())
if exists, err := devRow.Exists(ctx); err != nil {
@@ -47,7 +47,8 @@
// TODO(ivanpi): Lack of atomicity here can result in a duplicate join, not
// really relevant until syncgroup Leave is implemented.
sgMemberInfo := wire.SyncgroupMemberInfo{SyncPriority: config.SyncPriority}
- if _, err := db.Syncgroup(devSgName).Join(ctx, sgMemberInfo); err != nil {
+ sgId := wire.Id{Name: devSgName, Blessing: "blessing"}
+ if _, err := db.Syncgroup(sgId).Join(ctx, sgPublishSb, "", sgMemberInfo); err != nil {
return nil, err
}
diff --git a/go/src/v.io/x/sensorlog/internal/config/defaults.go b/go/src/v.io/x/sensorlog/internal/config/defaults.go
index a1472ce..a5279b2 100644
--- a/go/src/v.io/x/sensorlog/internal/config/defaults.go
+++ b/go/src/v.io/x/sensorlog/internal/config/defaults.go
@@ -6,9 +6,8 @@
package config
import (
+ "fmt"
"time"
-
- "v.io/v23/naming"
)
const (
@@ -30,6 +29,6 @@
MinSamplingInterval = 10 * time.Millisecond
)
-func SyncgroupName(publishService, devId string) string {
- return naming.Join(publishService, "%%sync", "sl", "dev", devId)
+func SyncgroupName(devId string) string {
+ return fmt.Sprintf("sldev%s", devId)
}
diff --git a/go/src/v.io/x/sensorlog/internal/measure/syncgroup.go b/go/src/v.io/x/sensorlog/internal/measure/syncgroup.go
index 97eabb3..759e53f 100644
--- a/go/src/v.io/x/sensorlog/internal/measure/syncgroup.go
+++ b/go/src/v.io/x/sensorlog/internal/measure/syncgroup.go
@@ -32,13 +32,13 @@
return fmt.Errorf("invalid devId: %v", err)
}
- sgName := config.SyncgroupName(sgPublishSb, devId)
+ sgId := wire.Id{Name: config.SyncgroupName(devId), Blessing: "blessing"}
// Check for syncgroup. If it already exists, we have nothing to do.
- if sgs, err := db.GetSyncgroupNames(ctx); err != nil {
+ if sgs, err := db.ListSyncgroups(ctx); err != nil {
return err
} else {
for _, sg := range sgs {
- if sg == sgName {
+ if sg == sgId {
return nil
}
}
@@ -89,5 +89,5 @@
}
sgMemberInfo := wire.SyncgroupMemberInfo{SyncPriority: config.SyncPriority}
- return db.Syncgroup(sgName).Create(ctx, sgSpec, sgMemberInfo)
+ return db.Syncgroup(sgId).Create(ctx, sgSpec, sgMemberInfo)
}
diff --git a/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go b/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go
index acc5f88..19b633c 100644
--- a/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go
+++ b/go/src/v.io/x/sensorlog/internal/measure/syncgroup_test.go
@@ -8,6 +8,7 @@
"reflect"
"testing"
+ wire "v.io/v23/services/syncbase"
_ "v.io/x/ref/runtime/factories/roaming"
sbtu "v.io/x/ref/services/syncbase/testutil"
"v.io/x/sensorlog/internal/config"
@@ -35,10 +36,10 @@
t.Fatalf("InitSyncgroup failed: %v", err)
}
- sgName := config.SyncgroupName(sbName, devId)
- if sgs, err := db.GetSyncgroupNames(ctxMeasured); err != nil {
+ sgName := config.SyncgroupName(devId)
+ if sgs, err := db.ListSyncgroups(ctxMeasured); err != nil {
t.Fatalf("GetSyncgroupNames failed: %v", err)
- } else if got, want := sgs, []string{sgName}; !reflect.DeepEqual(got, want) {
+ } else if got, want := sgs, []wire.Id{wire.Id{Name: sgName, Blessing: "blessing"}}; !reflect.DeepEqual(got, want) {
t.Errorf("GetSyncgroupNames got: %v, want: %v", got, want)
}
diff --git a/go/src/v.io/x/sensorlog/measured/measured.go b/go/src/v.io/x/sensorlog/measured/measured.go
index ecde218..b374ec5 100644
--- a/go/src/v.io/x/sensorlog/measured/measured.go
+++ b/go/src/v.io/x/sensorlog/measured/measured.go
@@ -30,7 +30,7 @@
flagDevId = flag.String("devid", "", "DevId to be claimed by this measured. Must be specified.")
// Flags below are only applied the first time measured is run against a Syncbase service with the same devid.
flagAdmin = flag.String("admin", "", "Blessing of admin user allowed to join the syncgroup. Must be specified.")
- flagPublishSb = flag.String("publish-sb", "", "Syncbase service to publish the syncgroup at. Must be absolute. Must be specified. The syncgroup is published as '"+config.SyncgroupName("<publish-sb>", "<devid>")+"'.")
+ flagPublishSb = flag.String("publish-sb", "", "Syncbase service to publish the syncgroup at. Must be absolute. Must be specified. The syncgroup is published as '"+config.SyncgroupName("<devid>")+"' at <publish-sb>.")
flagPublishMt = flag.String("publish-mt", "", "Additional mount table to use for sync rendezvous in addition to namespace roots. Optional.")
)