Claus Ibsen created CAMEL-26610:
-----------------------------------

             Summary: camel-test-dst - more fake worlds for the consumers of 
other components (kafka, jms, file/ftp, cloud queues, reconnecting consumers)
                 Key: CAMEL-26610
                 URL: https://issues.apache.org/jira/browse/CAMEL-26610
             Project: Camel
          Issue Type: Improvement
          Components: camel-test
            Reporter: Claus Ibsen
             Fix For: 4.24.0


camel-test-dst (CAMEL-25738) runs the real consumer of a component under a 
seeded virtual-time scheduler against a fake of the external system. Five 
components have a fake world today, listed in the catalog ({{dstWorlds}}, 
CAMEL-26438): aws2-sqs, azure-eventhubs, kafka-share, pulsar and slack. They 
found real bugs, for example CAMEL-25737 (the SQS visibility extender is always 
late with visibilityTimeout=1).

This ticket is for more worlds, for the consumers where timing bugs happen: 
checkpoint, commit, acknowledge, visibility or lock renewal, reconnect, suspend 
and resume, stop while a poll is running. Each world gets its own JIRA (one per 
component) when work starts, linked here.

h3. Rules for each world

* Follow "Writing a fake world" in 
{{components/camel-test/camel-test-dst/src/main/docs/test-dst.adoc}}; the SQS 
world is the worked example.
* The fake follows the documentation of the external system, cited in the code, 
not what the Camel consumer expects.
* *Self-check against an old fix:* the world must reproduce at least one of the 
fixed bugs listed below on the code from before its fix, and pass on main. That 
shows the world can find that class of bug.
* Mark it with {{@DstWorld}} so the catalog and the docs list it.
* Do not report a failing seed as a bug before the triage step of the guide.

h3. Suggested order

The order weighs how many users the component has, how much timing logic its 
consumer has, the timing bugs fixed in it this year, and how easy it is to fake 
the client.

*Tier 1: widely used, complex consumer timing*
# *camel-kafka*: commit strategies (sync, async, manual), breakOnFirstError, 
pause and resume, rebalance, batching. Fixed: CAMEL-25756 (a failed poll 
dropped the records of an incomplete batch), CAMEL-25753 (stop waited for the 
current poll), CAMEL-25313 (a pause or resume request was lost while 
suspended). Seam: kafka-clients ships {{MockConsumer}}, which may serve as the 
base of the fake; the kafka-share world shows the approach.
# *camel-jms / camel-sjms*: the InOut reply manager (request timeout against a 
late reply against a failed send), transacted and CLIENT_ACKNOWLEDGE consumers, 
stop and start of the listener. Fixed: CAMEL-25095 and CAMEL-25122 (an InOut 
exchange completed twice), CAMEL-26536 (asyncStopListener lost the listener 
container). Harder seam (the Spring listener container has its own threads), 
but the double completion bugs make it worth it.
# *camel-file / camel-ftp / camel-sftp*: read locks, the in-progress and 
idempotent repositories, moveFailed, done files, reconnect after a failed poll. 
Fixed: CAMEL-25856 (the lock of a file name released while in use), CAMEL-25728 
(done files), CAMEL-25915 and CAMEL-25896 (ftp reconnect and noop). Seam: 
{{GenericFileOperations}} / {{RemoteFileOperations}}.

*Tier 2: cloud queues with ack deadlines and lock renewal (the same family as 
the SQS world)*
# *camel-azure-servicebus*: message lock renewal. Fixed: CAMEL-25701 (the 
renewal came too late, the same class as CAMEL-25737).
# *camel-google-pubsub*: ack deadline extension, nack at max delivery attempts, 
stop. Fixed: CAMEL-25712, CAMEL-25790.
# *camel-aws2-kinesis* and the *camel-aws2-s3* consumer: shard checkpoints and 
resume, the in-progress repository. Fixed: CAMEL-25942, CAMEL-25558, 
CAMEL-25521.

*Tier 3: connection and subscription consumers (reconnect, resubscribe)*
# *camel-milo*: the most timing fixes this year, about reconnects and 
subscriptions. Fixed: CAMEL-25691, CAMEL-25812, CAMEL-25873, CAMEL-26570.
# *camel-paho / camel-paho-mqtt5 / camel-hivemq*: reconnect, resubscribe, 
manual acks. Fixed: CAMEL-24523, CAMEL-25944, CAMEL-25793.
# *camel-nats* (JetStream) and *camel-rabbitmq / camel-spring-rabbitmq*: acks, 
stop while subscribing. Fixed: CAMEL-26462, CAMEL-25847.
# *camel-netty* client mode and *camel-vertx-websocket*: reconnect without 
blocking the event loop, consumers of a shared host. Fixed: CAMEL-26574, 
CAMEL-26573.

*Tier 4: leader election and change streams*
# *camel-zookeeper-master* and the cluster services: leadership lost while the 
consumer starts, retry of a failed start. Fixed: CAMEL-26540, CAMEL-25315; 
open: CAMEL-26577 (RebalancingCamelClusterService).
# *camel-mongodb* change streams and *camel-mongodb-gridfs*: the consumer goes 
on after its collection is dropped or a poll fails. Fixed: CAMEL-25946, 
CAMEL-25711, CAMEL-25607.

camel-seda (11 timing fixes this year) has no external system, so it needs 
deterministic tests in camel-core rather than a fake world.

The order is a suggestion; a contributor who knows one of these systems well 
can pick it first.




--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to