{"record":{"id":"57956e4b2484df84","repo":"aeron-io/aeron","slug":"ingresschannel-must-be-specified-aeroncluster","errorCode":null,"errorMessage":"ingressChannel must be specified","messagePattern":"ingressChannel must be specified","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"aeron-cluster/src/main/java/io/aeron/cluster/client/AeronCluster.java","lineNumber":1480,"sourceCode":"            catch (final CloneNotSupportedException ex)\n            {\n                throw new RuntimeException(ex);\n            }\n        }\n\n        /**\n         * Conclude configuration by setting up defaults when specifics are not provided.\n         */\n        public void conclude()\n        {\n            if ((boolean)IS_CONCLUDED_VH.getAndSet(this, true))\n            {\n                throw new ConcurrentConcludeException();\n            }\n\n            if (Strings.isEmpty(ingressChannel))\n            {\n                throw new ConfigurationException(\"ingressChannel must be specified\");\n            }\n\n            if (ingressChannel.startsWith(CommonContext.IPC_CHANNEL))\n            {\n                if (null != ingressEndpoints)\n                {\n                    throw new ConfigurationException(\n                        \"AeronCluster.Context ingressEndpoints must be null when using IPC ingress\");\n                }\n            }\n\n            if (Strings.isEmpty(egressChannel))\n            {\n                throw new ConfigurationException(\"egressChannel must be specified\");\n            }\n\n            final ChannelUri egressChannelUri = ChannelUri.parse(egressChannel);\n            if (egressChannelUri.isUdp())","sourceCodeStart":1462,"sourceCodeEnd":1498,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-cluster/src/main/java/io/aeron/cluster/client/AeronCluster.java#L1462-L1498","documentation":"AeronCluster.connect() requires an ingress channel via AeronCluster.Context.ingressChannel. The ingress channel is the transport (e.g. aeron:udp?endpoint=...) used to send client requests to the cluster; without it the client cannot communicate with cluster members, so conclude() fails fast with a ConfigurationException.","triggerScenarios":"Calling AeronCluster.connect() or ctx.conclude() with an ingressChannel that is null or the empty string (Strings.isEmpty).","commonSituations":"Building a Context programmatically and forgetting ingressChannel; copying sample configs that only set egressChannel; loading config from properties where the ingress key is missing.","solutions":["Set ctx.ingressChannel(\"aeron:udp?endpoint=...\") matching the cluster's ingress endpoints before connect()","If using IPC within the same host, set ingressChannel to CommonContext.IPC_CHANNEL (\"aeron:ipc\") and leave ingressEndpoints null","If you rely on the cluster-ingress-endpoints property/channel URI, pass it in via Context.ingressChannel instead of assuming a default"],"exampleFix":"// before\nAeronCluster.connect(new AeronCluster.Context().egressChannel(\"aeron:udp?endpoint=localhost:20000\"));\n// after\nAeronCluster.connect(new AeronCluster.Context()\n    .ingressChannel(\"aeron:udp?endpoint=localhost:20000\")\n    .egressChannel(\"aeron:udp?endpoint=localhost:0\"));","handlingStrategy":"validation","validationCode":"if (ctx == null || ctx.ingressChannel() == null || ctx.ingressChannel().isEmpty()) {\n    throw new IllegalArgumentException(\"ingressChannel must be set before AeronCluster.connect()\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always build Context via a helper that sets both ingressChannel and egressChannel","Fail fast at config-load time if the ingress channel property is missing","Prefer loading full sample config files rather than hand-assembling Context fields"],"tags":["configuration","cluster-client","validation"],"backgroundTag":"missing-required-config-field","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}