func (db *serviceClient) NewBBSLockRunner(logger lager.Logger, bbsPresence *models.BBSPresence, retryInterval, lockTTL time.Duration) (ifrit.Runner, error) { bbsPresenceJSON, err := models.ToJSON(bbsPresence) if err != nil { return nil, err } return locket.NewLock(logger, db.consulClient, locket.LockSchemaPath("bbs_lock"), bbsPresenceJSON, db.clock, retryInterval, lockTTL), nil }
"github.com/tedsuo/ifrit" "github.com/tedsuo/ifrit/ginkgomon" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Ping API", func() { Describe("Protobuf Ping", func() { It("returns true when the bbs is running", func() { By("having the bbs down", func() { Expect(client.Ping(logger)).To(BeFalse()) }) By("starting the bbs without a lock", func() { competingBBSLock := locket.NewLock(logger, consulClient, locket.LockSchemaPath("bbs_lock"), []byte{}, clock.NewClock(), locket.RetryInterval, locket.DefaultSessionTTL) competingBBSLockProcess := ifrit.Invoke(competingBBSLock) defer ginkgomon.Kill(competingBBSLockProcess) bbsRunner = testrunner.New(bbsBinPath, bbsArgs) bbsRunner.StartCheck = "bbs.lock.acquiring-lock" bbsProcess = ginkgomon.Invoke(bbsRunner) Expect(client.Ping(logger)).To(BeFalse()) }) By("finally acquiring the lock", func() { Eventually(func() bool { return client.Ping(logger) }).Should(BeTrue()) })
kvPair, _, err := consulClient.KV().Get(lockKey, nil) if err != nil { return nil, err } if kvPair == nil || kvPair.Session == "" { return nil, consuladapter.NewKeyNotFoundError(lockKey) } return kvPair.Value, nil } BeforeEach(func() { consulClient = consulRunner.NewClient() lockKey = locket.LockSchemaPath("some-key") lockKeyMetric := strings.Replace(lockKey, "/", "-", -1) lockHeldMetricName = "LockHeld." + lockKeyMetric lockUptimeMetricName = "LockHeldDuration." + lockKeyMetric lockValue = []byte("some-value") retryInterval = 500 * time.Millisecond lockTTL = 5 * time.Second logger = lagertest.NewTestLogger("locket") sender = fake.NewFakeMetricSender() metrics.Initialize(sender, nil) }) JustBeforeEach(func() { clock = fakeclock.NewFakeClock(time.Now())
func BBSLockSchemaPath() string { return locket.LockSchemaPath(BBSLockSchemaKey) }
func CellSchemaPath(cellID string) string { return locket.LockSchemaPath(CellSchemaKey, cellID) }
func CellSchemaRoot() string { return locket.LockSchemaPath(CellSchemaKey) }