You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@eventmesh.apache.org by "qqeasonchen (via GitHub)" <gi...@apache.org> on 2026/09/09 15:09:27 UTC

[I] Storage plugins silently drop every polled event after #5357 (eventmesh)

qqeasonchen opened a new issue, #5387:
URL: https://github.com/apache/eventmesh/issues/5387

   # Storage plugins silently drop every polled event after #5357
   
   PR #5357 turned `EventMeshFrame` into an immutable value object whose
   `attributes()` returns an unmodifiable map. All three storage plugins
   were left calling `attributes().put(...)` to stamp the MQ physical
   offset/partition after decoding each polled event:
   
   ```
   EventMeshFrame frame = EventMeshFrame.decode(msg.getBody());
   frame.attributes().put("emmqoffset", Long.toString(msg.getQueueOffset())); // throws UOE
   frame.attributes().put("emmqpartition", Integer.toString(msg.getQueueId()));
   ```
   
   That `UnsupportedOperationException` is swallowed by the surrounding
   `catch (Exception decodeEx)` block, which then retries the legacy
   CloudEvents-JSON fallback against a binary frame body. The fallback
   decodes nothing and the polled event is silently dropped — subscribers
   starve and the OffsetStore never sees the cursor advance.
   
   ## Impact
   
   - **Kafka**: 100 % reproducer. Every polled event dies; the
     `KafkaClientE2EIntegrationTest` "event delivered within 40s" assertion
     fails on the very first message.
   - **RocketMQ 5.x**: only fires when `popCk != null` (lite topics that
     exercise POP). `StreamingSdkE2ETest` over rmq5 lite topics hits
     this — token-order and SSE-closed failures all traced back to the
     same swallowed exception.
   - **RocketMQ 4.x**: same as Kafka. Was masked earlier in the e2e
     suite by other failures in this commit's parent.
   
   ## Reproduction
   
   ```
   docker compose -f e2e-infra/docker-compose.rmq5.yml up -d --wait
   ./gradlew :eventmesh-runtime:e2eTest5x \
     --tests "org.apache.eventmesh.runtime.it.KafkaClientE2EIntegrationTest" \
     -Dit.storage=kafka -Dit.kafka.bootstrap=127.0.0.1:9092 \
     -Dit.kafka.user=eventmesh -Dit.kafka.password=eventmesh-pass
   ```
   
   ## Suggested fix
   
   Derive a new frame via `withAttribute` instead of mutating in place.
   Callers must keep the return value.
   
   ```java
   private static EventMeshFrame stampMqOffset(EventMeshFrame frame, int partition, long offset) {
       return frame.withAttribute("emmqoffset", Long.toString(offset))
           .withAttribute("emmqpartition", Integer.toString(partition));
   }
   ```
   
   PR with the fix: linked below.


-- 
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: issues-unsubscribe@eventmesh.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@eventmesh.apache.org
For additional commands, e-mail: issues-help@eventmesh.apache.org


Re: [I] Storage plugins silently drop every polled event after #5357 (eventmesh)

Posted by "qqeasonchen (via GitHub)" <gi...@apache.org>.
qqeasonchen closed issue #5387: Storage plugins silently drop every polled event after #5357
URL: https://github.com/apache/eventmesh/issues/5387


-- 
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: issues-unsubscribe@eventmesh.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@eventmesh.apache.org
For additional commands, e-mail: issues-help@eventmesh.apache.org