diff --git a/clientv3/concurrency/election.go b/clientv3/concurrency/election.go index d91d9a269..1259e0f4d 100644 --- a/clientv3/concurrency/election.go +++ b/clientv3/concurrency/election.go @@ -89,19 +89,19 @@ func (e *Election) Proclaim(ctx context.Context, val string) error { } // Resign lets a leader start a new election. -func (e *Election) Resign() (err error) { +func (e *Election) Resign(ctx context.Context) (err error) { if e.leaderSession == nil { return nil } - _, err = e.client.Delete(e.client.Ctx(), e.leaderKey) + _, err = e.client.Delete(ctx, e.leaderKey) e.leaderKey = "" e.leaderSession = nil return err } // Leader returns the leader value for the current election. -func (e *Election) Leader() (string, error) { - resp, err := e.client.Get(e.client.Ctx(), e.keyPrefix, v3.WithFirstCreate()...) +func (e *Election) Leader(ctx context.Context) (string, error) { + resp, err := e.client.Get(ctx, e.keyPrefix, v3.WithFirstCreate()...) if err != nil { return "", err } else if len(resp.Kvs) == 0 { diff --git a/clientv3/concurrency/mutex.go b/clientv3/concurrency/mutex.go index 5e120fab1..803a8470a 100644 --- a/clientv3/concurrency/mutex.go +++ b/clientv3/concurrency/mutex.go @@ -63,14 +63,14 @@ func (m *Mutex) Lock(ctx context.Context) error { // release lock key if cancelled select { case <-ctx.Done(): - m.Unlock() + m.Unlock(m.client.Ctx()) default: } return err } -func (m *Mutex) Unlock() error { - if _, err := m.client.Delete(m.client.Ctx(), m.myKey); err != nil { +func (m *Mutex) Unlock(ctx context.Context) error { + if _, err := m.client.Delete(ctx, m.myKey); err != nil { return err } m.myKey = "\x00" @@ -92,7 +92,7 @@ func (lm *lockerMutex) Lock() { } } func (lm *lockerMutex) Unlock() { - if err := lm.Mutex.Unlock(); err != nil { + if err := lm.Mutex.Unlock(lm.client.Ctx()); err != nil { panic(err) } } diff --git a/etcdctl/ctlv3/command/elect_command.go b/etcdctl/ctlv3/command/elect_command.go index 64a5ff9e2..4af6b6b31 100644 --- a/etcdctl/ctlv3/command/elect_command.go +++ b/etcdctl/ctlv3/command/elect_command.go @@ -128,5 +128,5 @@ func campaign(c *clientv3.Client, election string, prop string) error { return errors.New("elect: session expired") } - return e.Resign() + return e.Resign(context.TODO()) } diff --git a/etcdctl/ctlv3/command/lock_command.go b/etcdctl/ctlv3/command/lock_command.go index 6cac497e7..7ead1c0ac 100644 --- a/etcdctl/ctlv3/command/lock_command.go +++ b/etcdctl/ctlv3/command/lock_command.go @@ -80,7 +80,7 @@ func lockUntilSignal(c *clientv3.Client, lockname string) error { select { case <-donec: - return m.Unlock() + return m.Unlock(context.TODO()) case <-s.Done(): } diff --git a/integration/v3_election_test.go b/integration/v3_election_test.go index 1c47e15ab..d3559869e 100644 --- a/integration/v3_election_test.go +++ b/integration/v3_election_test.go @@ -72,7 +72,7 @@ func TestElectionWait(t *testing.T) { } } // let next leader take over - if err := e.Resign(); err != nil { + if err := e.Resign(context.TODO()); err != nil { t.Fatalf("failed resign (%v)", err) } // tell followers to start listening for next leader diff --git a/integration/v3_lock_test.go b/integration/v3_lock_test.go index 243c29c49..29d694200 100644 --- a/integration/v3_lock_test.go +++ b/integration/v3_lock_test.go @@ -69,7 +69,7 @@ func testMutex(t *testing.T, waiters int, chooseClient func() *clientv3.Client) t.Fatalf("lock %d followers did not wait", i) default: } - if err := m.Unlock(); err != nil { + if err := m.Unlock(context.TODO()); err != nil { t.Fatalf("could not release lock (%v)", err) } } diff --git a/tools/functional-tester/etcd-runner/main.go b/tools/functional-tester/etcd-runner/main.go index 0320f2c36..7fab6d9c1 100644 --- a/tools/functional-tester/etcd-runner/main.go +++ b/tools/functional-tester/etcd-runner/main.go @@ -95,7 +95,7 @@ func runElection(eps []string, rounds int) { } } rcs[i].validate = func() error { - if l, err := e.Leader(); err == nil && l != observedLeader { + if l, err := e.Leader(context.TODO()); err == nil && l != observedLeader { return fmt.Errorf("expected leader %q, got %q", observedLeader, l) } validatec <- struct{}{} @@ -110,7 +110,7 @@ func runElection(eps []string, rounds int) { return fmt.Errorf("waiting on followers") } } - if err := e.Resign(); err != nil { + if err := e.Resign(context.TODO()); err != nil { return err } if observedLeader == v { @@ -182,7 +182,7 @@ func runRacer(eps []string, round int) { return nil } rcs[i].release = func() error { - if err := m.Unlock(); err != nil { + if err := m.Unlock(ctx); err != nil { return err } cnt = 0