Skip to content

DATA RACE between runCandidate() and appendEntries() #517

@kozlovic

Description

@kozlovic

Got this race with latest v1.3.9 release:

==================
WARNING: DATA RACE
Write at 0x00c0000b6f08 by goroutine 257:
  github.com/hashicorp/raft.(*Raft).runCandidate.func1()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/raft.go:293 +0x38
  runtime.deferreturn()
      /usr/local/go/src/runtime/panic.go:436 +0x34
  github.com/hashicorp/raft.(*Raft).run()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/raft.go:146 +0x84
  github.com/hashicorp/raft.(*Raft).run-fm()
      <autogenerated>:1 +0x38
  github.com/hashicorp/raft.(*raftState).goFunc.func1()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/state.go:146 +0x74

Previous read at 0x00c0000b6f08 by goroutine 381:
  github.com/hashicorp/raft.(*Raft).appendEntries()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/raft.go:1384 +0x270
  github.com/hashicorp/raft.(*Raft).processHeartbeat()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/raft.go:1353 +0x10c
  github.com/hashicorp/raft.(*Raft).processHeartbeat-fm()
      <autogenerated>:1 +0x7c
  github.com/hashicorp/raft.(*NetworkTransport).handleCommand()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/net_transport.go:640 +0x9cc
  github.com/hashicorp/raft.(*NetworkTransport).handleConn()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/net_transport.go:542 +0x438
  github.com/hashicorp/raft.(*NetworkTransport).listen.func1()
      /Users/ivan/dev/go/pkg/mod/github.com/hashicorp/raft@v1.3.9/net_transport.go:520 +0x68

Looks like the runCandidate() routine on exit set it:

raft/raft.go

Line 293 in c3134d7

defer func() { r.candidateFromLeadershipTransfer = false }()

and it is being read here:

raft/raft.go

Line 1384 in c3134d7

if a.Term > r.getCurrentTerm() || (r.getState() != Follower && !r.candidateFromLeadershipTransfer) {

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions