package debug import ( "os" "sync" "sync/atomic" ) var ( compressBlocks bool getCompressBlocks sync.Once ) // atomic: bit 0 is the value, bit 1 is the initialized flag var getNodeData uint32 const ( gndValueFlag = 1 << iota gndInitializedFlag ) // 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 GET_NODE_DATA environment variable. func RestoreGetNodeData() { _, envVarSet := os.LookupEnv("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) } } func IsBlockCompressionEnabled() bool { getCompressBlocks.Do(func() { _, compressBlocks = os.LookupEnv("COMPRESS_BLOCKS") }) return compressBlocks } var ( trackWitnessSize bool getTrackWitnessSizeLen sync.Once ) func IsTrackWitnessSizeEnabled() bool { getTrackWitnessSizeLen.Do(func() { _, trackWitnessSize = os.LookupEnv("TRACK_WITNESS_SIZE") }) return trackWitnessSize }