erigon-pulse/common/debug/experiments.go
Andrew Ashikhmin b541bff1eb
Enable GetNodeData by default (#368)
* Add a missing IsGetNodeData check

* Enable GetNodeData by default
2020-02-16 16:50:24 +00:00

67 lines
1.6 KiB
Go

package debug
import (
"os"
"sync"
"sync/atomic"
)
var gerEnv sync.Once
var ThinHistory bool
var itcEnv sync.Once
var intermediateTrieHash bool
// atomic: bit 0 is the value, bit 1 is the initialized flag
var getNodeData uint32
const (
gndValueFlag = 1 << iota
gndInitializedFlag
)
func IsThinHistory() bool {
gerEnv.Do(func() {
_, ThinHistory = os.LookupEnv("THIN_HISTORY")
})
return ThinHistory
}
func IsIntermediateTrieHash() bool {
itcEnv.Do(func() {
_, intermediateTrieHash = os.LookupEnv("INTERMEDIATE_TRIE_CACHE")
if !intermediateTrieHash {
_, intermediateTrieHash = os.LookupEnv("INTERMEDIATE_TRIE_HASH")
}
})
return intermediateTrieHash
}
// IsGetNodeData indicates whether the GetNodeData functionality should be enabled.
// By default that's driven by the presence or absence of DISABLE_GET_NODE_DATA environment variable.
func IsGetNodeData() bool {
x := atomic.LoadUint32(&getNodeData)
if x&gndInitializedFlag != 0 { // already initialized
return x&gndValueFlag != 0
}
RestoreGetNodeData()
return IsGetNodeData()
}
// RestoreGetNodeData enables or disables the GetNodeData functionality
// according to the presence or absence of DISABLE_GET_NODE_DATA environment variable.
func RestoreGetNodeData() {
_, envVarSet := os.LookupEnv("DISABLE_GET_NODE_DATA")
OverrideGetNodeData(!envVarSet)
}
// OverrideGetNodeData allows to explicitly enable or disable the GetNodeData functionality.
func OverrideGetNodeData(val bool) {
if val {
atomic.StoreUint32(&getNodeData, gndInitializedFlag|gndValueFlag)
} else {
atomic.StoreUint32(&getNodeData, gndInitializedFlag)
}
}