Session.update_created_pools() can schedule a pool renewal for a host while Cluster.on_up() is already handling that same host and opening replacement pools.
Problem
Cluster.on_up() sets host._currently_handling_node_up while it prepares queries, removes old pools, and schedules add_or_renew_pool() futures for the host.
If another topology/status path calls Session.update_created_pools() during that window, the session sees an up or unknown-state host with no active pool and can schedule a second add_or_renew_pool() for the same host. That can replace a pool that is already being established by the on_up() flow.
Expected behavior
update_created_pools() should skip hosts currently being handled by Cluster.on_up(). The on_up() completion path is already responsible for reconciling created pools after the transition finishes.
Session.update_created_pools()can schedule a pool renewal for a host whileCluster.on_up()is already handling that same host and opening replacement pools.Problem
Cluster.on_up()setshost._currently_handling_node_upwhile it prepares queries, removes old pools, and schedulesadd_or_renew_pool()futures for the host.If another topology/status path calls
Session.update_created_pools()during that window, the session sees an up or unknown-state host with no active pool and can schedule a secondadd_or_renew_pool()for the same host. That can replace a pool that is already being established by theon_up()flow.Expected behavior
update_created_pools()should skip hosts currently being handled byCluster.on_up(). Theon_up()completion path is already responsible for reconciling created pools after the transition finishes.