{"record":{"id":"1979ea8a0023338d","repo":"hyperledger/fabric","slug":"peer-gossip-pvtdata-implicitcollectiondisseminatio","errorCode":null,"errorMessage":"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.requiredPeerCount (%d) cannot be less than zero","messagePattern":"peer\\.gossip\\.pvtData\\.implicitCollectionDisseminationPolicy\\.requiredPeerCount \\((.+?)\\) cannot be less than zero","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"gossip/privdata/config.go","lineNumber":77,"sourceCode":"\n\tc.ReconcileBatchSize = viper.GetInt(\"peer.gossip.pvtData.reconcileBatchSize\")\n\tif c.ReconcileBatchSize == 0 {\n\t\tlogger.Warning(\"Configuration key peer.gossip.pvtData.reconcileBatchSize isn't set, defaulting to\", reconcileBatchSizeDefault)\n\t\tc.ReconcileBatchSize = reconcileBatchSizeDefault\n\t}\n\n\tc.ReconciliationEnabled = viper.GetBool(\"peer.gossip.pvtData.reconciliationEnabled\")\n\n\trequiredPeerCount := viper.GetInt(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.requiredPeerCount\")\n\n\tmaxPeerCount := implicitCollectionMaxPeerCountDefault\n\tif viper.Get(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.maxPeerCount\") != nil {\n\t\t// allow override maxPeerCount to 0 that will effectively disable dissemination on the peer\n\t\tmaxPeerCount = viper.GetInt(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.maxPeerCount\")\n\t}\n\n\tif requiredPeerCount < 0 {\n\t\tpanic(fmt.Sprintf(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.requiredPeerCount (%d) cannot be less than zero\",\n\t\t\trequiredPeerCount))\n\t}\n\tif maxPeerCount < requiredPeerCount {\n\t\tpanic(fmt.Sprintf(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.maxPeerCount (%d) cannot be less than requiredPeerCount (%d)\",\n\t\t\tmaxPeerCount, requiredPeerCount))\n\t}\n\n\tc.ImplicitCollDisseminationPolicy.RequiredPeerCount = requiredPeerCount\n\tc.ImplicitCollDisseminationPolicy.MaxPeerCount = maxPeerCount\n}\n","sourceCodeStart":59,"sourceCodeEnd":88,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/gossip/privdata/config.go#L59-L88","documentation":"loadPrivDataConfig panics when the configured implicit collection dissemination requiredPeerCount is negative. requiredPeerCount is the number of peers that must each acknowledge private data dissemination, so a negative value is nonsensical and the gossip privdata layer fails fast at config load time via panic rather than returning an error.","triggerScenarios":"Setting peer.gossip.pvtData.implicitCollectionDisseminationPolicy.requiredPeerCount to a negative number in core.yaml (or via env override) and calling GlobalConfig / loadPrivDataConfig at peer startup.","commonSituations":"Typo in core.yaml (e.g. -1 placeholder), env var CORE_PEER_GOSSIP_PVTDATA_IMPLICITCOLLDISSEMINATIONPOLICY_REQUIREDPEERCOUNT=-1, templated config that interpolates to a negative number.","solutions":["Edit core.yaml so requiredPeerCount is >= 0","Check overriding environment variables for a negative value","Restore a sane default (typically 1) if the config file was corrupted"],"exampleFix":"// before (core.yaml)\npeer:\n  gossip:\n    pvtData:\n      implicitCollectionDisseminationPolicy:\n        requiredPeerCount: -1\n// after\n        requiredPeerCount: 1","handlingStrategy":"validation","validationCode":"const required = viper.GetInt(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.requiredPeerCount\")\nif required < 0 {\n    return fmt.Errorf(\"requiredPeerCount %d invalid; must be >= 0\", required)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate core.yaml against the schema before peer startup","Keep requiredPeerCount non-negative (use 0 to disable)","Audit env var overrides for negative values","Keep config files under version control to spot accidental edits"],"tags":["gossip","privdata","config","panic"],"backgroundTag":"invalid-config-value","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}