My understanding for For CL.ONE. For the node that receives the request: (A) If RR is enabled and this node contains the needed row --> return immediately and do RR to remaining replicas in background. (B) If RR is off and this node contains the needed row --> return the needed data immediately. (C) If this node does not have the needed row --> regardless of RR ask all replicas and return the first result.
However case (C) as I have described it does not allow for any notion of 'pinning' as mentioned for dynamic_snitch_badness_threshold: # if set greater than zero and read_repair_chance is < 1.0, this will allow # 'pinning' of replicas to hosts in order to increase cache capacity. # The badness threshold will control how much worse the pinned host has to be # before the dynamic snitch will prefer other replicas over it. This is # expressed as a double which represents a percentage. Thus, a value of # 0.2 means Cassandra would continue to prefer the static snitch values # until the pinned host was 20% worse than the fastest. The wiki states CL.ONE "Will return the record returned by the first replica to respond" [1] implying that the request goes to multiple replicas, but datastax's docs state that only one node will receive the request ("Returns the response from *the* closest replica, as determined by the snitch configured for the cluster" [2]). Could someone clarify how CL.ONE reads with RR off work? [1] http://wiki.apache.org/cassandra/API [2] http://www.datastax.com/docs/0.7/consistency/index#choosing-consistency-levels emphasis added