mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-02 21:17:01 +00:00
Current speculation target selection logic has several bugs in multi-dc setup. It may select a non local target for CL=LOCAL and it may select more than one target to speculate, one of which is non local. Examples: 1. Two dataceneters: DC1 RF 2, DC2 RF 2 and read with LOCAL_QUORUM. In this scenario db::filter_for_query() will return both replicas from local DC and speculation target selection logic will peek one one which will be in different DC. 2. Two dataceneters: DC1 RF 2, DC2 RF 2 and read with LOCAL_ONE + RRD.DC_LOCAL In this scenario db::filter_for_query() will return all nodes in local DC and there already be enough nodes to speculate, but current logic will add one node from non local dc as a speculation target. The patch below fixed both of those scenarios. Message-Id: <20161103154637.GS7766@scylladb.com>