{"record":{"id":"358c9678657b9734","repo":"hyperledger/fabric","slug":"peer-gossip-pvtdata-implicitcollectiondisseminatio-358c96","errorCode":null,"errorMessage":"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.maxPeerCount (%d) cannot be less than requiredPeerCount (%d)","messagePattern":"peer\\.gossip\\.pvtData\\.implicitCollectionDisseminationPolicy\\.maxPeerCount \\((.+?)\\) cannot be less than requiredPeerCount \\((.+?)\\)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"gossip/privdata/config.go","lineNumber":81,"sourceCode":"\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":63,"sourceCodeEnd":88,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/gossip/privdata/config.go#L63-L88","documentation":"loadPrivDataConfig panics when implicit collection dissemination maxPeerCount is smaller than requiredPeerCount. You cannot require acknowledgments from more peers than you disseminate to, so the gossip privdata config validation fails fast at startup.","triggerScenarios":"Setting peer.gossip.pvtData.implicitCollectionDisseminationPolicy.maxPeerCount lower than requiredPeerCount in core.yaml or via env overrides, then calling GlobalConfig / loadPrivDataConfig. Note maxPeerCount of 0 is allowed to disable dissemination only when requiredPeerCount is also 0.","commonSituations":"Dissemination intentionally disabled by setting maxPeerCount: 0 while forgetting to zero requiredPeerCount; partial override via environment variable; hand-edited core.yaml.","solutions":["Raise maxPeerCount so it is >= requiredPeerCount","If intentionally disabling dissemination, set both maxPeerCount and requiredPeerCount to 0","Audit env overrides (CORE_PEER_GOSSIP_PVTDATA_IMPLICITCOLLDISSEMINATIONPOLICY_*) for conflicting values"],"exampleFix":"// before (core.yaml)\nimplicitCollectionDisseminationPolicy:\n  requiredPeerCount: 1\n  maxPeerCount: 0\n// after\nimplicitCollectionDisseminationPolicy:\n  requiredPeerCount: 0\n  maxPeerCount: 0","handlingStrategy":"validation","validationCode":"required := viper.GetInt(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.requiredPeerCount\")\nmax := viper.GetInt(\"peer.gossip.pvtData.implicitCollectionDisseminationPolicy.maxPeerCount\")\nif max < required {\n    return fmt.Errorf(\"maxPeerCount (%d) must be >= requiredPeerCount (%d)\", max, required)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set both policy fields together; to disable dissemination set both to 0","Check env overrides that may set only one of the two values","Document the invariant maxPeerCount >= requiredPeerCount in your config templates","Lint core.yaml values in CI"],"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"}