{"record":{"id":"1f08a5f4c1496943","repo":"aeron-io/aeron","slug":"unsupported-multicast-flow-control-strategy-fc-fcstr","errorCode":null,"errorMessage":"unsupported multicast flow control strategy: fc=${fcStr}","messagePattern":"unsupported multicast flow control strategy: fc=(.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"aeron-driver/src/main/java/io/aeron/driver/DefaultMulticastFlowControlSupplier.java","lineNumber":61,"sourceCode":"        final String fcStr = udpChannel.channelUri().get(CommonContext.FLOW_CONTROL_PARAM_NAME);\n        if (null != fcStr)\n        {\n            final int delimiter = fcStr.indexOf(',');\n            final String strategyStr = -1 == delimiter ? fcStr : fcStr.substring(0, delimiter);\n\n            switch (strategyStr)\n            {\n                case MaxMulticastFlowControl.FC_PARAM_VALUE:\n                    return new MaxMulticastFlowControl();\n\n                case MinMulticastFlowControl.FC_PARAM_VALUE:\n                    return new MinMulticastFlowControl();\n\n                case TaggedMulticastFlowControl.FC_PARAM_VALUE:\n                    return new TaggedMulticastFlowControl();\n\n                default:\n                    throw new IllegalArgumentException(\"unsupported multicast flow control strategy: fc=\" + fcStr);\n            }\n        }\n\n        if (MaxMulticastFlowControl.class.getName().equals(MULTICAST_FLOW_CONTROL_STRATEGY))\n        {\n            return new MaxMulticastFlowControl();\n        }\n        else if (MinMulticastFlowControl.class.getName().equals(MULTICAST_FLOW_CONTROL_STRATEGY))\n        {\n            return new MinMulticastFlowControl();\n        }\n        else if (TaggedMulticastFlowControl.class.getName().equals(MULTICAST_FLOW_CONTROL_STRATEGY))\n        {\n            return new TaggedMulticastFlowControl();\n        }\n\n        FlowControl flowControl = null;\n        try","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-driver/src/main/java/io/aeron/driver/DefaultMulticastFlowControlSupplier.java#L43-L79","documentation":"DefaultMulticastFlowControlSupplier.newInstance throws IllegalArgumentException when a multicast flow control strategy requested via the fc= URI parameter (or config) is not one of the supported strategies, and no custom strategy matched.","triggerScenarios":"Channel URI with fc= set to an unrecognized value while the configured MULTICAST_FLOW_CONTROL_STRATEGY class is DefaultMulticastFlowControlSupplier; the switch over FC_PARAM_VALUE falls to default.","commonSituations":"Typo like fc=min instead of a valid tag, using a unicast-only strategy name on a multicast channel, or a strategy added in a newer Aeron version than the one on the classpath.","solutions":["Use a supported fc= value (e.g. the ones mapped to Default, Min, Max, TaggedMulticastFlowControl)","Register a custom FlowControlSupplier that supports your strategy string","Remove the fc= parameter to accept the default strategy"],"exampleFix":"// before\n\"aeron:udp?endpoint=239.255.0.1:40456|fc=bogus\" // -> IllegalArgumentException\n// after\n\"aeron:udp?endpoint=239.255.0.1:40456|fc=tagged\" // a supported strategy value","handlingStrategy":"validation","validationCode":"if (fcStr != null && !Set.of(\"min\",\"max\",\"tagged\" /* valid values */).contains(fcStr)) throw new IllegalArgumentException(\"unsupported fc=\" + fcStr);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate channel URIs before adding publications/subscriptions","Check AeronVersion for supported fc strategies","Remove fc= params on unicast URIs"],"tags":["configuration","flow-control","multicast","aeron-driver"],"backgroundTag":"invalid-enum-value","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}