You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by Apache Wiki <wi...@apache.org> on 2010/02/08 19:14:48 UTC

[Cassandra Wiki] Update of "ArchitectureInternals" by JonathanEllis

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Cassandra Wiki" for change notification.

The "ArchitectureInternals" page has been changed by JonathanEllis.
The comment on this change is: link AntiEntropy.
http://wiki.apache.org/cassandra/ArchitectureInternals?action=diff&rev1=8&rev2=9

--------------------------------------------------

  = Write path =
   * !StorageProxy gets the nodes responsible for replicas of the keys from the !ReplicationStrategy, then sends !RowMutation messages to them.
     * If nodes are changing position on the ring, "pending ranges" are associated with their destinations in !TokenMetadata and these are also written to.
-    * If nodes that should accept the write are down, but the remaining nodes can fulfill the requested !ConsistencyLevel, the writes for the down nodes will be sent to another node instead, with a header (a "hint") saying that data associated with that key should be sent to the replica node when it comes back up.  This is called "hinted handoff" and reduces the "eventual" in "eventual consistency."
+    * If nodes that should accept the write are down, but the remaining nodes can fulfill the requested !ConsistencyLevel, the writes for the down nodes will be sent to another node instead, with a header (a "hint") saying that data associated with that key should be sent to the replica node when it comes back up.  This is called HintedHandoff and reduces the "eventual" in "eventual consistency."  Note that HintedHandoff is only an '''optimization'''; AntiEntropy is responsible for restoring consistency more completely.
   * on the destination node, !RowMutationVerbHandler hands the write first to !CommitLog.java, then to the Memtable for the appropriate !ColumnFamily (through Table.apply).
   * When a Memtable is full, it gets sorted and written out as an !SSTable asynchronously by !ColumnFamilyStore.switchMemtable
     * When enough SSTables exist, they are merged by !ColumnFamilyStore.doFileCompaction