{"record":{"id":"e81a05822d95d078","repo":"hyperledger/fabric","slug":"unexpected-delivey-service-policy-s","errorCode":null,"errorMessage":"unexpected delivey service policy: `%s`","messagePattern":"unexpected delivey service policy: `(.+?)`","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/deliverservice/deliveryclient.go","lineNumber":140,"sourceCode":"\t\treturn errors.WithMessagef(err, \"failed to create block deliverer for channel `%s`\", chainID)\n\t}\n\toc, ok := bundle.OrdererConfig()\n\tif !ok {\n\t\t// This should never happen because it is checked in peer.createChannel()\n\t\treturn errors.Errorf(\"failed to create block deliverer for channel `%s`, missing OrdererConfig\", chainID)\n\t}\n\n\tswitch ct := oc.ConsensusType(); ct {\n\tcase \"etcdraft\":\n\t\td.blockDeliverer, err = d.createBlockDelivererCFT(chainID, ledgerInfo)\n\tcase \"BFT\":\n\t\tswitch d.conf.DeliverServiceConfig.Policy {\n\t\tcase \"cluster\":\n\t\t\td.blockDeliverer, err = d.createBlockDelivererBFT(chainID, ledgerInfo)\n\t\tcase \"simple\":\n\t\t\td.blockDeliverer, err = d.createBlockDelivererCFT(chainID, ledgerInfo)\n\t\tdefault:\n\t\t\terr = errors.Errorf(\"unexpected delivey service policy: `%s`\", d.conf.DeliverServiceConfig.Policy)\n\t\t}\n\tdefault:\n\t\terr = errors.Errorf(\"unexpected consensus type: `%s`\", ct)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif !d.conf.DeliverServiceConfig.BlockGossipEnabled {\n\t\tlogger.Infow(\"This peer will retrieve blocks from ordering service (will not disseminate them to other peers in the organization)\", \"channel\", chainID)\n\t} else {\n\t\tlogger.Infow(\"This peer will retrieve blocks from ordering service and disseminate to other peers in the organization\", \"channel\", chainID)\n\t}\n\n\td.channelID = chainID\n\n\tgo func() {","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/deliverservice/deliveryclient.go#L122-L158","documentation":"Returned by StartDeliverForChannel when the consensus type is BFT and DeliverServiceConfig.Policy is neither 'cluster' nor 'simple'. The delivery service cannot choose a block-deliverer construction strategy, so channel delivery startup aborts.","triggerScenarios":"Thrown at core/deliverservice/deliveryclient.go:140 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set peer.deliveryclient.policy to 'cluster' or 'simple' in the peer configuration","Validate the policy value at config load time"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}