The GitHub Actions job "CI" on rocketmq-dashboard.git/fix/topic-name-bounds has 
failed.
Run started by GitHub user unbridled-41 (triggered by unbridled-41).

Head commit for run:
0ff437ac0269826318d0dced3f50099accca7274 / unbridled-41 
<[email protected]>
fix(topic): validate topic and group names before the ownership write

The write paths only trimmed the name (ResourceOwnershipGuard.requireText) and 
let
the broker decide, but the broker's own validation 
(TopicValidator.validateTopic)
runs at the RPC - after this code has already inserted the ownership row:

    // createTopic -> executeResourceWrite -> ownershipGuard.write(...) -> the 
RPC

Two failure modes followed. A name longer than the 255-character storage column
makes that insert throw DataIntegrityViolationException, which no handler maps, 
so
the API answers 500 Internal Server Error with no reason. A name that fits the
column but not the broker (128..255 characters, or any name outside
^[%|a-zA-Z0-9_-]+$) leaves the claim behind as a PENDING row: the topic/group 
list
filters by instance only, so the never-created resource shows up in the console
with 0 queues and blocks the name for every other instance until someone deletes
the phantom.

Validate with the broker's own rules in createTopic/updateTopic and the group
limit in createConsumerGroup/updateConsumerGroup, before any write, so the 
caller
gets the broker's message as a 400 and nothing is persisted. The console already
enforces the same bounds client-side (resourceCsvImport: topic 127, group 120),
so this only closes the server side and the AI-tool/import paths that bypass it.

Tests (server/): mvn -o -B -ntp test -Dtest='RocketMQAdminClientImplTest'
-> Tests run: 83, Failures: 0, Errors: 0.
- new createTopicRejectsAnIllegalNameBeforeWritingAnythingTest and
  createConsumerGroupRejectsANameLongerThanTheBrokerLimitTest fail before this
  change (no 400, the broker call is reached) and pass after it; the first also
  asserts no ownership write happens.
- new createTopicKeepsTheBrokerCompatibleNamesItAcceptsTest guards the bounds
  (127 characters and a name with underscores still reach the broker).
- mvn -o -B -ntp test 
-Dtest='MetadataServiceTest,TopicControllerTest,ConsumerGroupControllerTest'
  -> Tests run: 100, Failures: 0, Errors: 0; checkstyle passes.

Report URL: 
https://github.com/apache/rocketmq-dashboard/actions/runs/37975600190

With regards,
GitHub Actions via GitBox

Reply via email to