wang-jiahua opened a new pull request, #10974: URL: https://github.com/apache/rocketmq/pull/10974
### Which Issue(s) This PR Fixes Fixes #10972 ### Brief Description `TimerMessageStore#convertMessage` encoded `propertiesString` from the original property map and only afterwards cleared `REAL_TOPIC` / `REAL_QUEUE_ID` from the deep copy. As a result the delivered timer message carried the internal properties on the wire while the broker-side map had them cleared, and the file-based timer store observably diverged from `TimerMessageRocksDBStore#convertMessage`, which already clears first and encodes from the copied map. This PR moves the encode after the clear block and encodes from `msgInner.getProperties()`, mirroring the RocksDB implementation. It also removes the map/wire mismatch where the deep copy was made but the encode still read the original map. `TIMER_DELIVER_MS` and other timer metadata are not in the clearing list, so the deliveryTimestamp exposed to gRPC consumers is unchanged. ### How Did You Test This Change? - New regression test `testConvertMessagePropertiesStringMatchesProperties`: the delivered message drops `REAL_TOPIC`/`REAL_QUEUE_ID` from the wire and `propertiesString` equals the re-encoded map; the rolled message keeps them. `TimerMessageStoreTest` passes 11/11. - 4-node cluster A/B (file-based timer store, `benchmark.timer.TimerProducer` 64 threads x 40 slots x 250 msgs/slot, 1 KiB, per arm clean store + page cache drop, 3 interleaved trials; the 2-minute first-slot offset isolates GC sampling to the pure delivery phase): every arm delivered 639,990/640,000 (report-sampling rounding) with zero send failures; delivery-phase young GC base 2/2/2 vs patch 1/2/2 — correctness intact, no regression. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
