[ https://issues.apache.org/jira/browse/CASSANDRA-2514?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13022248#comment-13022248 ]
Jonathan Ellis commented on CASSANDRA-2514: ------------------------------------------- That's the point, hintedEndpoints is *usually* but not always a subset of writeEndpoints. Here is the code from getHintedEndpoints: {code} // assign dead endpoints to be hinted to the closest live one, or to the local node // (since it is trivially the closest) if none are alive. This way, the cost of doing // a hint is only adding the hint header, rather than doing a full extra write, if any // destination nodes are alive. // // we do a 2nd pass on targets instead of using temporary storage, // to optimize for the common case (everything was alive). InetAddress localAddress = FBUtilities.getLocalAddress(); for (InetAddress ep : targets) { if (map.containsKey(ep)) continue; if (!StorageProxy.shouldHint(ep)) { if (logger.isDebugEnabled()) logger.debug("not hinting " + ep + " which has been down " + Gossiper.instance.getEndpointDowntime(ep) + "ms"); continue; } InetAddress destination = map.isEmpty() ? localAddress : snitch.getSortedListByProximity(localAddress, map.keySet()).get(0); map.put(destination, ep); } {code} > batch_mutate operations with CL=LOCAL_QUORUM throw TimeOutException when > there aren't sufficient live nodes > ----------------------------------------------------------------------------------------------------------- > > Key: CASSANDRA-2514 > URL: https://issues.apache.org/jira/browse/CASSANDRA-2514 > Project: Cassandra > Issue Type: Bug > Components: Core > Affects Versions: 0.7.0 > Environment: 1. Cassandra 0.7.4 running on RHEL 5.5 > 2. 2 DC setup > 3. RF = 4 (DC1 = 2, DC2 = 2) > 4. CL = LOCAL_QUORUM > Reporter: Narendra Sharma > Priority: Minor > Fix For: 0.7.5 > > Attachments: 2514-v2.txt, CASSANDRA-2514.patch > > > We have a 2 DC setup with RF = 4. There are 2 nodes in each DC. Following is > the keyspace definition: > <snip> > keyspaces: > - name: KeyspaceMetadata > replica_placement_strategy: > org.apache.cassandra.locator.NetworkTopologyStrategy > strategy_options: > DC1 : 2 > DC2 : 2 > replication_factor: 4 > </snip> > I shutdown all except one node and waited for the live node to recognize that > other nodes are dead. Following is the nodetool ring output on the live node: > Address Status State Load Owns Token > > > 169579575332184635438912517119426957796 > 10.17.221.19 Down Normal ? 29.20% > 49117425183422571410176530597442406739 > 10.17.221.17 Up Normal 81.64 KB 4.41% > 56615248844645582918169246064691229930 > 10.16.80.54 Down Normal ? 21.13% > 92563519227261352488017033924602789201 > 10.17.221.18 Down Normal ? 45.27% > 169579575332184635438912517119426957796 > I expect UnavailableException when I send batch_mutate request to node that > is up. However, it returned TimeOutException: > TimedOutException() > at > org.apache.cassandra.thrift.Cassandra$batch_mutate_result.read(Cassandra.java:16493) > at > org.apache.cassandra.thrift.Cassandra$Client.recv_batch_mutate(Cassandra.java:916) > at > org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:890) > Following is the cassandra-topology.properties > # Cassandra Node IP=Data Center:Rack > 10.17.221.17=DC1:RAC1 > 10.17.221.19=DC1:RAC2 > 10.17.221.18=DC2:RAC1 > 10.16.80.54=DC2:RAC2 -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira