{"record":{"id":"1455e7c76e977fed","repo":"TechnitiumSoftware/DnsServer","slug":"dns-server-cluster-config-version-not-supported","errorCode":null,"errorMessage":"DNS Server Cluster config version not supported.","messagePattern":"DNS Server Cluster config version not supported\\.","errorType":"exception","errorClass":"InvalidDataException","httpStatus":null,"severity":"critical","filePath":"DnsServerCore/Cluster/ClusterManager.cs","lineNumber":396,"sourceCode":"                    Dictionary<int, ClusterNode> clusterNodes = null;\n                    int count = bR.ReadByte();\n\n                    if (count > 0)\n                    {\n                        clusterNodes = new Dictionary<int, ClusterNode>(count);\n\n                        for (int i = 0; i < count; i++)\n                        {\n                            ClusterNode node = new ClusterNode(this, bR);\n                            clusterNodes.TryAdd(node.Id, node);\n                        }\n                    }\n\n                    _clusterNodes = clusterNodes;\n                    break;\n\n                default:\n                    throw new InvalidDataException(\"DNS Server Cluster config version not supported.\");\n            }\n        }\n\n        private void WriteConfigTo(Stream s)\n        {\n            BinaryWriter bW = new BinaryWriter(s);\n\n            bW.Write(Encoding.ASCII.GetBytes(\"CL\")); //format\n            bW.Write((byte)1); //version\n\n            bW.Write(_clusterDomain);\n            bW.Write(_heartbeatRefreshIntervalSeconds);\n            bW.Write(_heartbeatRetryIntervalSeconds);\n            bW.Write(_configRefreshIntervalSeconds);\n            bW.Write(_configRetryIntervalSeconds);\n            s.WriteDateTime(_configLastSynced);\n\n            IReadOnlyDictionary<int, ClusterNode> clusterNodes = _clusterNodes;","sourceCodeStart":378,"sourceCodeEnd":414,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Cluster/ClusterManager.cs#L378-L414","documentation":"Thrown by ClusterManager.ReadConfigFrom(Stream) when the version byte (read after the 'CL' magic) does not match any supported case (currently only version 1 is implemented). This is a forward-compatibility guard: a newer server wrote a config format this build cannot parse, so it refuses rather than misread fields. WriteConfigTo always writes version 1.","triggerScenarios":"Loading a cluster config that was saved by a newer Technitium DNS Server release which bumped the cluster config version, while the running binary only understands version 1.","commonSituations":"Downgrading the server after a cluster was configured on a newer version; copying a config between nodes running different server versions; a mixed-version cluster during a rolling upgrade.","solutions":["Upgrade all cluster nodes to the same (newer) server version that understands the config format.","Re-initialize the cluster from scratch after aligning versions, deleting the incompatible config.","Keep all cluster members on the exact same Technitium version to avoid format mismatches."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try\n{\n    clusterManager.Load();\n}\ncatch (InvalidDataException ex) when (ex.Message.Contains(\"Cluster config version not supported\"))\n{\n    logger.LogError(ex, \"Cluster config version unsupported; upgrade all nodes to the same version.\");\n    NotifyAdminUpgradeRequired();\n}","preventionTips":["Run all cluster nodes on the exact same Technitium version.","Avoid downgrading after a cluster is configured on a newer version.","Plan version upgrades across the whole cluster simultaneously."],"tags":["cluster","config","serialization","version","technitium-dns-server"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}