{"record":{"id":"a5bc7e10f51a4d93","repo":"aeron-io/aeron","slug":"unsupported-unicast-flow-control-strategy-fc-fcstr","errorCode":null,"errorMessage":"unsupported unicast flow control strategy: fc=${fcStr}","messagePattern":"unsupported unicast flow control strategy: fc=(.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"aeron-driver/src/main/java/io/aeron/driver/DefaultUnicastFlowControlSupplier.java","lineNumber":48,"sourceCode":"    /**\n     * Default constructor.\n     */\n    public DefaultUnicastFlowControlSupplier()\n    {\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    @Override\n    public FlowControl newInstance(final UdpChannel udpChannel, final int streamId, final long registrationId)\n    {\n        final String fcStr = udpChannel.channelUri().get(CommonContext.FLOW_CONTROL_PARAM_NAME);\n        FlowControl flowControl = null;\n\n        if (null != fcStr)\n        {\n            throw new IllegalArgumentException(\"unsupported unicast flow control strategy: fc=\" + fcStr);\n        }\n\n        if (UnicastFlowControl.class.getName().equals(UNICAST_FLOW_CONTROL_STRATEGY))\n        {\n            return new UnicastFlowControl();\n        }\n\n        try\n        {\n            flowControl = (FlowControl)Class.forName(UNICAST_FLOW_CONTROL_STRATEGY)\n                .getConstructor()\n                .newInstance();\n        }\n        catch (final Exception ex)\n        {\n            LangUtil.rethrowUnchecked(ex);\n        }\n","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-driver/src/main/java/io/aeron/driver/DefaultUnicastFlowControlSupplier.java#L30-L66","documentation":"DefaultUnicastFlowControlSupplier.newInstance throws IllegalArgumentException if a fc= flow control parameter is present on a unicast channel URI, because the default unicast supplier supports no strategy selection at all.","triggerScenarios":"Adding |fc=... to a unicast (non-multicast) UDP channel URI while the default unicast flow control supplier is configured.","commonSituations":"Copy-pasting a multicast channel URI (which uses fc= for Min/Max/Tagged strategies) onto a unicast endpoint, or a shared channel template that includes fc= unconditionally.","solutions":["Remove the fc= parameter from the unicast channel URI","Use a custom FlowControlSupplier if you need selectable strategies on unicast","Use a multicast endpoint if you actually need the multicast flow control options"],"exampleFix":"// before\n\"aeron:udp?endpoint=localhost:40456|fc=min\" // throws on unicast\n// after\n\"aeron:udp?endpoint=localhost:40456\" // fc param removed","handlingStrategy":"validation","validationCode":"java.net.URI u = java.net.URI.create(channel); if (u.getQuery() != null && u.getQuery().contains(\"fc=\")) throw new IllegalArgumentException(\"fc= not supported on unicast channels\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never add fc= to unicast aeron:udp URIs","Keep separate URI templates for unicast and multicast channels"],"tags":["configuration","flow-control","unicast","uri","aeron-driver"],"backgroundTag":"invalid-argument-value","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}