{"record":{"id":"ee580094490e01cb","repo":"apache/pulsar","slug":"unrecognized-auto-failover-policy-policytype","errorCode":null,"errorMessage":"Unrecognized auto_failover_policy: ${policyType}","messagePattern":"Unrecognized auto_failover_policy: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/impl/AutoFailoverPolicyFactory.java","lineNumber":34,"sourceCode":" * specific language governing permissions and limitations\n * under the License.\n */\npackage org.apache.pulsar.common.policies.impl;\n\nimport org.apache.pulsar.common.policies.AutoFailoverPolicy;\nimport org.apache.pulsar.common.policies.data.AutoFailoverPolicyData;\nimport org.apache.pulsar.common.policies.data.AutoFailoverPolicyType;\n\n/**\n * Factory to generate an instance of {@link AutoFailoverPolicy}.\n */\npublic class AutoFailoverPolicyFactory {\n\n    public static AutoFailoverPolicy create(AutoFailoverPolicyData policyData) {\n        // TODO: Add more policy types when needed\n        if (!AutoFailoverPolicyType.min_available.equals(policyData.getPolicyType())) {\n            // right now, only support one type of policy: MinAvailablePolicy\n            throw new IllegalArgumentException(\"Unrecognized auto_failover_policy: \" + policyData.getPolicyType());\n        }\n\n        return new MinAvailablePolicy(policyData);\n    }\n\n}\n","sourceCodeStart":16,"sourceCodeEnd":41,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/impl/AutoFailoverPolicyFactory.java#L16-L41","documentation":"AutoFailoverPolicyFactory.create throws IllegalArgumentException when the policy type in AutoFailoverPolicyData is anything other than min_available, the only policy type currently supported. Only MinAvailablePolicy can be constructed.","triggerScenarios":"Calling AutoFailoverPolicy.create(policyData) — often via namespace isolation or resource-group admin flows — with policyData.policyType set to null or a value other than AutoFailoverPolicyType.min_available (e.g. deserialized from JSON missing the policyType field).","commonSituations":"Hand-written JSON for namespace isolation policies omitting or misspelling auto_failover_policy_type, config migrated from docs showing other policy types, or default-constructed AutoFailoverPolicyData with unset policyType.","solutions":["Set policyData.setPolicyType(AutoFailoverPolicyType.min_available) before calling create","In JSON configs, ensure auto_failover_policy_type is present and exactly 'min_available'","Validate policyData.getPolicyType() != null before invoking create"],"exampleFix":"// before\nAutoFailoverPolicyData data = new AutoFailoverPolicyData();\ndata.setMinLimit(1);\nAutoFailoverPolicy policy = AutoFailoverPolicyFactory.create(data); // throws\n// after\nAutoFailoverPolicyData data = new AutoFailoverPolicyData();\ndata.setPolicyType(AutoFailoverPolicyType.min_available);\ndata.setMinLimit(1);\nAutoFailoverPolicy policy = AutoFailoverPolicyFactory.create(data);","handlingStrategy":"validation","validationCode":"if (policyData.getPolicyType() != AutoFailoverPolicyType.min_available) {\n    throw new IllegalArgumentException(\"only min_available auto-failover policy is supported\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    AutoFailoverPolicy policy = AutoFailoverPolicyFactory.create(policyData);\n} catch (IllegalArgumentException e) {\n    logger.error(\"Unsupported failover policy type {}\", policyData.getPolicyType());\n}","preventionTips":["Always set policyType explicitly via AutoFailoverPolicyType.min_available","Check JSON policy payloads include auto_failover_policy_type","Remember only min_available exists — don't invent other types from docs or other systems"],"tags":["enum","configuration","illegal-argument","policy"],"backgroundTag":"unsupported-policy-type","analyzedSha":"820761864ed8e2a7d2e52dd9763ad2ae117c1395","analyzedAt":"2026-09-06T00:14:20.138Z","contentChangedAt":"2026-09-06T00:14:20.138Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}