{"record":{"id":"b5584ba239202cf3","repo":"aeron-io/aeron","slug":"resolvername-is-required-when-resolverinterface-is-set","errorCode":null,"errorMessage":"`resolverName` is required when `resolverInterface` is set","messagePattern":"`resolverName` is required when `resolverInterface` is set","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"aeron-driver/src/main/java/io/aeron/driver/MediaDriver.java","lineNumber":4482,"sourceCode":"\n            if (null == nameResolver)\n            {\n                nameResolver = DefaultNameResolver.INSTANCE;\n            }\n\n            if (null == channelReceiveTimestampClock)\n            {\n                channelReceiveTimestampClock = new SystemEpochNanoClock();\n            }\n\n            if (null == channelSendTimestampClock)\n            {\n                channelSendTimestampClock = new SystemEpochNanoClock();\n            }\n\n            if (null != resolverInterface && Strings.isEmpty(resolverName))\n            {\n                throw new ConfigurationException(\"`resolverName` is required when `resolverInterface` is set\");\n            }\n        }\n\n        private void concludeCounters()\n        {\n            if (null == countersManager)\n            {\n                if (countersMetaDataBuffer() == null)\n                {\n                    countersMetaDataBuffer(createCountersMetaDataBuffer(cncByteBuffer, cncMetaDataBuffer));\n                }\n\n                if (countersValuesBuffer() == null)\n                {\n                    countersValuesBuffer(createCountersValuesBuffer(cncByteBuffer, cncMetaDataBuffer));\n                }\n\n                final long reuseTimeoutMs = counterFreeToReuseTimeoutNs > 0 ?","sourceCodeStart":4464,"sourceCodeEnd":4500,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-driver/src/main/java/io/aeron/driver/MediaDriver.java#L4464-L4500","documentation":"The driver MediaDriver.Context requires that when a resolverInterface is configured, a resolverName is also provided. The name is what the name resolver advertises over the resolver interface, so an interface without a name is an incomplete configuration.","triggerScenarios":"Building a MediaDriver.Context with .resolverInterface(\"...\") but leaving resolverName null or empty, then calling conclude()/start().","commonSituations":"Copy-pasting multi-driver or name-resolver sample configs and filling in only the interface; setting the interface via system property but not the name; switching from the default driver to a name-resolver topology.","solutions":["Add a unique resolverName to the driver context","Remove the resolverInterface setting if the name resolver is not actually used","Set the aeron.dir.resolver.name system property alongside aeron.dir.resolver.interface"],"exampleFix":"// before\nctx.resolverInterface(\"0.0.0.0:40456\");\n// after\nctx.resolverInterface(\"0.0.0.0:40456\").resolverName(\"driver-a\");","handlingStrategy":"validation","validationCode":"if (resolverInterface != null && (resolverName == null || resolverName.isEmpty())) throw new IllegalArgumentException(\"resolverName required with resolverInterface\");","typeGuard":null,"tryCatchPattern":"try { mediaDriver = MediaDriver.launch(ctx); } catch (ConfigurationException e) { log.error(\"driver config incomplete: {}\", e.getMessage()); }","preventionTips":["Set resolverName and resolverInterface together in one config helper","Validate driver config properties before launch","Review name-resolver sample configs as a pair"],"tags":["aeron","configuration","name-resolver"],"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"}