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.")
 )