Use a separate var for active node replication state (#3819)

This commit is contained in:
Jeff Mitchell 2018-01-19 19:24:04 -05:00 committed by GitHub
parent 395befc062
commit 7d6fed2e86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 6 deletions

View File

@ -115,7 +115,13 @@ func getSysHealth(core *vault.Core, r *http.Request) (int, *HealthResponse, erro
// Check system status // Check system status
sealed, _ := core.Sealed() sealed, _ := core.Sealed()
standby, _ := core.Standby() standby, _ := core.Standby()
replicationState := core.ReplicationState() var replicationState consts.ReplicationState
if standby {
replicationState = core.ActiveNodeReplicationState()
} else {
replicationState = core.ReplicationState()
}
init, err := core.Initialized(ctx) init, err := core.Initialized(ctx)
if err != nil { if err != nil {
return http.StatusInternalServerError, nil, err return http.StatusInternalServerError, nil, err

View File

@ -355,8 +355,9 @@ type Core struct {
atomicPrimaryFailoverAddrs *atomic.Value atomicPrimaryFailoverAddrs *atomic.Value
// replicationState keeps the current replication state cached for quick // replicationState keeps the current replication state cached for quick
// lookup // lookup; activeNodeReplicationState stores the active value on standbys
replicationState *uint32 replicationState *uint32
activeNodeReplicationState *uint32
// uiEnabled indicates whether Vault Web UI is enabled or not // uiEnabled indicates whether Vault Web UI is enabled or not
uiEnabled bool uiEnabled bool
@ -489,6 +490,7 @@ func NewCore(conf *CoreConfig) (*Core, error) {
replicationState: new(uint32), replicationState: new(uint32),
atomicPrimaryClusterAddrs: new(atomic.Value), atomicPrimaryClusterAddrs: new(atomic.Value),
atomicPrimaryFailoverAddrs: new(atomic.Value), atomicPrimaryFailoverAddrs: new(atomic.Value),
activeNodeReplicationState: new(uint32),
} }
if conf.ClusterCipherSuites != "" { if conf.ClusterCipherSuites != "" {
@ -2125,6 +2127,10 @@ func (c *Core) ReplicationState() consts.ReplicationState {
return consts.ReplicationState(atomic.LoadUint32(c.replicationState)) return consts.ReplicationState(atomic.LoadUint32(c.replicationState))
} }
func (c *Core) ActiveNodeReplicationState() consts.ReplicationState {
return consts.ReplicationState(atomic.LoadUint32(c.activeNodeReplicationState))
}
func (c *Core) SealAccess() *SealAccess { func (c *Core) SealAccess() *SealAccess {
return NewSealAccess(c.seal) return NewSealAccess(c.seal)
} }

View File

@ -13,6 +13,7 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/hashicorp/vault/helper/consts"
"github.com/hashicorp/vault/helper/forwarding" "github.com/hashicorp/vault/helper/forwarding"
"golang.org/x/net/http2" "golang.org/x/net/http2"
"google.golang.org/grpc" "google.golang.org/grpc"
@ -26,7 +27,7 @@ const (
var ( var (
// Making this a package var allows tests to modify // Making this a package var allows tests to modify
HeartbeatInterval = 30 * time.Second HeartbeatInterval = 5 * time.Second
) )
// Starts the listeners and servers necessary to handle forwarded requests // Starts the listeners and servers necessary to handle forwarded requests
@ -468,8 +469,8 @@ func (c *forwardingClient) startHeartbeat() {
} }
// Store the active node's replication state to display in // Store the active node's replication state to display in
// sys/health calls // sys/health calls
atomic.StoreUint32(c.core.replicationState, resp.ReplicationState) atomic.StoreUint32(c.core.activeNodeReplicationState, resp.ReplicationState)
c.core.logger.Trace("forwarding: successful heartbeat") //c.core.logger.Trace("forwarding: successful heartbeat")
} }
tick() tick()
@ -479,6 +480,7 @@ func (c *forwardingClient) startHeartbeat() {
case <-c.echoContext.Done(): case <-c.echoContext.Done():
c.echoTicker.Stop() c.echoTicker.Stop()
c.core.logger.Trace("forwarding: stopping heartbeating") c.core.logger.Trace("forwarding: stopping heartbeating")
atomic.StoreUint32(c.core.activeNodeReplicationState, uint32(consts.ReplicationDisabled))
return return
case <-c.echoTicker.C: case <-c.echoTicker.C:
tick() tick()