func startLockServer(ctx *context.T, configDir string) (func(), error) { blessings, _ := v23.GetPrincipal(ctx).BlessingStore().Default() lockNhSuffix := fmt.Sprint(blessings) // Start a local mounttable where the lock server would be // mounted, and make this mounttable visible in the local // neighborhood. mtName, stopMT, err := locklib.StartMounttable(ctx, configDir, locklib.LockNhPrefix+lockNhSuffix) if err != nil { return nil, err } ctx, _, err = v23.WithNewNamespace(ctx, mtName) if err != nil { stopMT() return nil, err } ctx, cancel := context.WithCancel(ctx) _, server, err := v23.WithNewServer(ctx, lockObjectName(ctx), newLock(), security.DefaultAuthorizer()) if err != nil { stopMT() return nil, err } stopLock := func() { cancel() vlog.Infof("Stopping lock server...") <-server.Closed() vlog.Infof("Stopped lock server...") stopMT() } vlog.Infof("Started lock server\n") vlog.Infof("ENDPOINT: %v\n", server.Status().Endpoints[0].Name()) return stopLock, nil }
func startUnclaimedLockServer(ctx *context.T, configDir string) (<-chan struct{}, func(), error) { // Start a local mounttable where the unclaimed lock server would // be mounted, and make this mounttable visible in the local // neighborhood. mtName, stopMT, err := locklib.StartMounttable(ctx, configDir, locklib.LockNhPrefix+unclaimedLockNhSuffix) if err != nil { return nil, nil, err } ctx, _, err = v23.WithNewNamespace(ctx, mtName) if err != nil { stopMT() return nil, nil, err } claimed := make(chan struct{}) ctx, cancel := context.WithCancel(ctx) _, server, err := v23.WithNewServer(ctx, lockObjectName(ctx), newUnclaimedLock(claimed, configDir), security.AllowEveryone()) if err != nil { stopMT() return nil, nil, err } stopUnclaimedLock := func() { cancel() vlog.Infof("Stopping unclaimed lock server...") <-server.Closed() vlog.Infof("Stopped unclaimed lock server...") stopMT() } vlog.Infof("Started unclaimed lock server\n") vlog.Infof("ENDPOINT: %v\n", server.Status().Endpoints[0].Name()) return claimed, stopUnclaimedLock, nil }
// Starts a mounttable server and returns a new context derived from // the provided one by attaching a namespace instance rooted at the // started mounttable server. func withLocalNamespace(ctx *context.T, mtName, nhName string) (*context.T, func(), error) { configDir, err := ioutil.TempDir("", "mounttable-config") if err != nil { return nil, nil, err } mtName, stopMT, err := locklib.StartMounttable(ctx, configDir, nhName) if err != nil { os.RemoveAll(configDir) return nil, nil, err } stop := func() { stopMT() os.RemoveAll(configDir) } ctx, _, err = v23.WithNewNamespace(ctx, mtName) if err != nil { stop() return nil, nil, err } return ctx, stop, nil }