{"record":{"id":"f4a2062612474629","repo":"t8y2/dbx","slug":"no-rocketmq-master-brokers-available-to-s-s","errorCode":null,"errorMessage":"no RocketMQ master brokers available to %s %s","messagePattern":"no RocketMQ master brokers available to (.+?) (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/rocketmq/consumers.go","lineNumber":636,"sourceCode":"\t\treturn nil, fmt.Errorf(\"decode subscription groups: %w\", err)\n\t}\n\treturn wrapper.SubscriptionGroupTable, nil\n}\n\nfunc writeSubscriptionGroupConfig(ctx context.Context, address string, config *subscriptionGroupConfig) error {\n\tbody, err := json.Marshal(config)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"encode subscription group config: %w\", err)\n\t}\n\tcommand := remoting.NewRequest(remoting.UpdateAndCreateSubscriptionGroup, nil)\n\tcommand.Body = body\n\t_, err = invokeRemotingWithClient(ctx, address, command)\n\treturn err\n}\n\nfunc ensureMutationCoverage(action, resource string, attempted, succeeded int, lastErr error) error {\n\tif attempted <= 0 {\n\t\treturn fmt.Errorf(\"no RocketMQ master brokers available to %s %s\", action, resource)\n\t}\n\tif succeeded == attempted {\n\t\treturn nil\n\t}\n\tmessage := fmt.Sprintf(\"failed to %s %s on all masters: %d of %d succeeded\", action, resource, succeeded, attempted)\n\tif lastErr != nil {\n\t\treturn fmt.Errorf(\"%s: %w\", message, lastErr)\n\t}\n\treturn fmt.Errorf(\"%s\", message)\n}\n\nfunc (a *rocketMQAgent) enrichConsumerGroups(ctx context.Context, client *admin.Client, rows []map[string]any) {\n\tfor _, row := range rows {\n\t\tgroupID := fmt.Sprint(row[\"groupId\"])\n\t\tconnection, err := client.ExamineConsumerConnectionInfo(ctx, groupID)\n\t\tif err != nil {\n\t\t\tif _, ok := row[\"topics\"]; !ok {\n\t\t\t\trow[\"topics\"] = []string{}","sourceCodeStart":618,"sourceCodeEnd":654,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/rocketmq/consumers.go#L618-L654","documentation":"ensureMutationCoverage guards broker-side mutations (delete/update subscription group). Mutations must be attempted on every master broker; if attempted is 0, no master brokers were resolved, so nothing was changed anywhere and the library reports \"no RocketMQ master brokers available to <action> <resource>\". This is a topology discovery failure, not a write failure.","triggerScenarios":"deleteConsumerGroup or alterSubscriptionGroupConfig invoked when the cluster has zero reachable/eligible master brokers — e.g. the name server returned no route, all brokers are replicas (no masters), or the address list was empty after filtering.","commonSituations":"Single-replica-cluster configured with only slave nodes; name server unreachable or route cache empty; brokers still booting; broker IPs filtered out by health checks or the provided address list is wrong.","solutions":["Verify the name server is reachable and returns routes for the cluster (broker list is non-empty)","Confirm the cluster has master brokers (brokerId == 0), not only replicas","Check the broker address list/selection logic for filters that exclude all brokers","Wait for brokers to finish starting or fix crashed masters before mutating","Fall back to explicitly passing master broker addresses if discovery is unreliable"],"exampleFix":"// before\naddrs := brokerAddresses(cluster) // may be empty\nreturn alterSubscriptionGroupConfig(ctx, addrs, cfg)\n// after\naddrs := brokerAddresses(cluster)\nif len(addrs) == 0 {\n    return fmt.Errorf(\"cannot alter subscription group %s: no master brokers discovered; check nameserver and broker roles\", cfg.GroupName)\n}\nreturn alterSubscriptionGroupConfig(ctx, addrs, cfg)","handlingStrategy":"validation","validationCode":"masters := discoverMasterBrokers(ctx, namesrv)\nif len(masters) == 0 {\n    return fmt.Errorf(\"aborting %s of %s: no master brokers found; check nameserver and broker roles\", action, resource)\n}","typeGuard":"func hasMasterBrokers(addrs []string) bool { return len(addrs) > 0 }","tryCatchPattern":"err := deleteConsumerGroup(ctx, client, group)\nif err != nil && strings.Contains(err.Error(), \"no RocketMQ master brokers available\") {\n    log.Printf(\"cluster topology empty — verify nameserver %s and broker roles before retrying\", namesrv)\n    return err\n}","preventionTips":["Check nameserver reachability and route output before mutations","Ensure brokerId==0 masters exist (not slaves-only clusters)","Wait for brokers to finish booting before admin writes","Monitor broker discovery so empty topology is alerted early"],"tags":["rocketmq","topology","broker-discovery","no-op"],"backgroundTag":"no-masters-available","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}