mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-11-07 06:19:43 -10:00
* fix(managed-agent): tell a broker that cannot write apart from a wrong topic type The startup send probe reported every failure as a topic-type misconfiguration and named the mqadmin remedy. When a broker answered but refused the write itself — a full disk, a stopped store, an HA failover — an operator was told to reconfigure a topic that was already correct, with the real cause buried at the bottom of the chain. A type conflict arrives as a BadRequestException (40014/40020), while a broker-side write refusal arrives as an InternalErrorException (50000/50001/50002), so the exception type separates the two without parsing messages. Only the second case changes: it now leads with the broker's own inability to accept writes. Genuine misconfiguration keeps today's fail-fast wording, and the capability probe is untouched. Refs #15892 * fix(managed-agent): cover HA in the write-refusal hint and pin the exception mapping Review found that both branch tests construct their own exceptions, so neither pins the client's code-to-type mapping the branch selection depends on — while the description claimed the contrast test did. Add a contract test that drives the real StatusChecker over 40014/40020 versus 50000/50001/50002, so a client upgrade that remapped a type conflict onto InternalErrorException fails at unit speed instead of only at the real-broker gate. Asserting the wrong type for 40014 makes it fail, so the guard is not vacuous. Also widen the hint: InternalErrorException covers HA_NOT_AVAILABLE too, where naming only disk space and message store was narrower than the condition. It now names HA state as well. Refs #15892 * fix(managed-agent): name the persistence-timeout family in the write-refusal arm The arm caught only InternalErrorException, but the client reports a master or slave store timing out on the probe write as ProxyTimeoutException — a sibling under ClientException, not a subclass. So the stopped-store cause the comment itself lists still told an operator to run mqadmin updateTopic against a topic that was already LITE, which is the misdiagnosis this branch exists to remove. Catch both types; Java rejects parent/child alternatives in a multi-catch, so the fact that it compiles is itself proof they are siblings. UnsupportedException stays out deliberately: it collects REQUEST_TIMEOUT alongside NOT_IMPLEMENTED and UNSUPPORTED, mixing the unreachable question with the incapable-broker fail-fast, and a disk-space hint for either would trade one misdiagnosis for another. Also pin the whole operator hint, not just its first fragment. The write-refusal test asserted only "disk space", so trimming "message store and HA state" shipped green; both halves are now asserted, and the mapping contract test covers all eight codes the split depends on. Refs #15892 * fix(managed-agent): name the refusal families and stop overclaiming reachability Two more gaps in the same enumeration, both found by review with mutation witnesses. Throttling, lite-topic quota and ACL refusals are five more siblings under ClientException — TooManyRequests, LiteTopicQuotaExceeded, LiteSubscriptionQuotaExceeded, Unauthorized, Forbidden — so a rate limit or an exhausted quota still told an operator to run mqadmin updateTopic on a topic that was already LITE. 42901 is the sharpest case: the probe's lite topic exists, and an exhausted quota is not a missing one. They get their own arm pointing at quota, flow control and ACL state, which is a different thing to inspect than a disk or a store. The write-failure message also claimed the broker "is reachable", which 50400 PROXY_TIMEOUT does not establish: the proxy produces it from ACCESS_BROKER_TIMEOUT and RemotingTimeoutException, exactly when it got no answer from the broker. That overclaim came in with the previous widening. Drop it, name the proxy-to-broker path in the hint, and scope the comment so it no longer says the broker answered. UnsupportedException stays outside the arms deliberately, and the residual limit of enumerating families is now stated in the description rather than left implicit. The mapping contract test covers all thirteen codes. Refs #15892