Thanks for the review, Lisa. Have incorporated all your suggestions. Thanks & Regards, Sambit
Lisa.Shepherd at Sun.COM wrote: > Sambit, > > Some minor changes in the user-visible text: > > ccradm.cc > - Change "...changes after split-brain" to "...changes after split > brain" (no hyphen is needed when there is no noun being modified). > > updatable_copy_impl.cc > - In the SCMSGS user action, change "split-brain" to "split brain", but > add a hyphen to change "weak membership model" to "weak-membership > model" (here "weak-membership" is modifying the noun "model"). > > path_manager.cc > - In the PM_DBG messages immediately before the SCMSGS text, change > "done after split-brain" to "done after split brain" (no hyphen). > - In the SCMSGS user action, change "non-cluster mode" to "noncluster > mode" (multiple instances). > - In the error message itself, change "after split-brain" to "after > split brain". > > quorum_impl.cc > - In the SCMSGS explanation, change "...determine the required amount of > quorum votes required for survival..." to "...determine the number of > quorum votes that are required for survival...". > - Change "CMM: We could not..." to "CMM: Could not..." (multiple instances). > > Otherwise, user-visible text looks good. > > Thanks. > > Lisa Shepherd > Sun Cluster Technical Publications > "We're the M in RTFM" > > > > On 12/15/08 01:39, Sambit Nayak wrote: > >> Hi everyone, >> >> Please review the changes in CMM and CCR that support >> the new "weaker" form of membership being introduced >> with Project Colorado. This "weaker" form of membership >> allows multiple partitions to survive if a split brain >> situation develops. >> >> You can access the webrev at : >> http://cr.opensolaris.org/~samnayak/colorado-I-CMM-CCR/ >> >> >> ********* >> Here is a summary of the CMM and CCR changes. >> Please refer to the Requirements Document for Project Colorado >> to understand what these changes in CMM and CCR are trying to achieve. >> >> >> SUMMARY OF CMM CHANGES >> ---------------------- >> 1. cmm_impl::read_membership_info_from_ccr() reads membership properties >> from CCR and stores them into the CMM 'conf' structure >> (structure declaration in cmm_config.h). >> >> The properties read from infrastructure table in CCR are >> a. multiple_partitions : true/false which indicates whether >> cluster allows multiple partitions to survive >> b. ping_targets : comma separated list of IP addresses >> that the cluster nodes ping to check their own health >> during CMM reconfiguration. This ping is done only >> if cluster allows multiple partitions to survive >> (weaker form of membership) >> >> This 'read' is done when the cluster node boots up first, >> and also when infrastructure table (that stores these properties) >> is modified. >> >> >> 2. CMM has methods register_cmm_for_infr_callback() and >> unregister_cmm_for_infr_callback() to register/unregister with CCR >> for infrastructure table update callbacks. >> When infrastructure table changes, CCR delivers callbacks to CMM >> and CMM reads in its required membership information. >> >> The callback object registered by CMM is of type infr_cb_impl_for_cmm >> (introduced in this set of changes). >> >> >> 3. cmm_config.h declares the 'conf' structure that holds >> properties read in by CMM from CCR. >> We add a boolean value called multiple_partitions and >> a list of strings called ping_targets that stores the IP addresses. >> >> 4. During CMM reconfiguration, the CMM automaton does the ping check >> if cluster is configured to allow multiple partitions to survive. >> This functionality is implemented in automaton_impl::ping_health_check(). >> It essentially does a door upcall to userland qd_userd daemon >> in order to execute the ping. >> If the door upcall cannot be performed or the ping fails, >> then the node is panicked by the automaton considering that >> the ping check failed. >> >> 5. For the weaker form of membership that allows multiple partitions >> to survive, we alter the definition of required quorum votes. >> For the usual strong form of membership, the definition was : >> Q = (V/2) +1 where Q is the required quorum votes and V is the total votes. >> For the new weaker form of membership, the definition is : >> Q = 1, if V = 1 or 2; >> and we do not allow weaker form of membership if V > 2. >> If the cluster has more than 2 nodes, strong form of membership is used. >> >> 6. When a node tries to join another node, a path is first formed >> before CMM knows that a remote node is reachable and starts reconfiguration. >> When a node receives a request to form path, >> path_manager::update_node_incarnation() does checks based on >> incarnation numbers before allowing the path formation. >> An additional check is introduced here to see if the local node >> has any CCR changes done during split-brain that are still unresolved. >> If so, then the node will reject the request of path formation. >> Thus, a node that has unresolved post-split-brain CCR changes >> will not allow other nodes to join it. >> The CCR changes have to be resolved (nodes have to be marked winner/loser) >> before the nodes can join. >> >> >> SUMMARY OF CCR CHANGES >> ---------------------- >> >> 1. Flag To Indicate CCR Change During Split-Brain >> >> Existence of a file "/etc/cluster/.split_brain_ccr_change" >> on a cluster node serves as an indicator that CCR changes >> were done during split-brain on that node. >> >> The file is created (if it doesn't already exist) upon >> successful completion of a CCR transaction during split-brain. >> >> The file is defined as SPLIT_BRAIN_CHANGE_FILE: >> >> #define SPLIT_BRAIN_CHANGE_FILE >> "/etc/cluster/.split_brain_ccr_change" >> >> It is created with 600 permission bits, owned by root. >> >> The split-brain change file will be created at the end of >> updatable_copy_impl::commit_transaction(), if all the previous >> steps of the commit were successful. >> >> 2. New convenience functions in os class >> >> os::file_create() to create files. >> The creation mode wil be O_EXCL | O_CREAT. >> >> os::file_exists() will be used to query whether or not >> there is CCR change during split-brain on this node. >> >> 3. How To Indicate A Table Was Changed During Split-Brain >> >> No special indication present in the changed table itself. >> Let the generation number increase normally whenever the table >> is changed. The presence of the SPLIT_BRAIN_CHANGE_FILE will >> indicate that some change exists. >> >> 4. How To Select The Winning CCR Copy >> >> The administrator will run a CLI utility to mark the CCR >> on a cluster node as the truth copy. >> (The CLI is not part of the present set of changes, >> but the CCR interfaces that it will use are present.) >> >> The CCR interface will delete the SPLIT_BRAIN_CHANGE_FILE. >> The CCR tables themselves are not modified. >> >> 5. How To Select The Loser CCR Copy >> >> The administrator will run a CLI utility to mark the CCR >> on a cluster node as the losing copy. >> (The CLI is not part of the present set of changes, >> but the CCR interfaces that it will use are present.) >> >> The CCR interface will delete the SPLIT_BRAIN_CHANGE_FILE >> is deleted, and then every table on the losing node >> is marked as invalid (generation number -1). Marking every >> table with this generation number -1 will ensure that >> when this node joins the winner node to form cluster, >> it will update its CCR copy using the winner node's CCR. >> The loser node cannot form a cluster of its own, as well. >> >> Note that this command to mark the loser has to be run >> in non-cluster mode. The node must then be rebooted >> into cluster mode. >> >> 6. CCR Interfaces Provided >> >> a. Interface to query if this node has split-brain CCR change(s). >> Exists both in kernel and userland. >> Implementation : Check if SPLIT_BRAIN_CHANGE_FILE exists. >> >> bool ccrlib::split_brain_ccr_change_exists() >> >> b. Interface to mark this node's CCR as winning copy. >> Removes SPLIT_BRAIN_CHANGE_FILE. >> Exists in userland. >> >> int ccrlib::mark_ccr_as_winner() >> >> c. Interface to mark this node's CCR as valid until cluster join; >> in other words, mark this node's CCR as loser copy. >> Removes SPLIT_BRAIN_CHANGE_FILE file. >> Set the gennum of every CCR table to -1. >> Exists in userland. >> >> int ccrlib::mark_ccr_as_loser() >> >> >> 7. Internal utility - ccradm - is modified to provide the following >> features until the CLI is available. >> a. ccradm -q : check whether split-brain CCR change exist >> b. ccradm -m <"winner"|"loser"> : >> mark a node as the "winner" or "loser" >> >> >> *********** >> >> >> Apologies for the short notice; >> we are targetting a putback to Colorado staging gate on Dec 17 >> if there are no major objections, >> and hence would request quick reviews. :) >> >> >> >> Thanks & Regards, >> Zoram, Sambit >> >> >> >> _______________________________________________ >> ha-clusters-discuss mailing list >> ha-clusters-discuss at opensolaris.org >> http://mail.opensolaris.org/mailman/listinfo/ha-clusters-discuss >> >> > _______________________________________________ > ha-clusters-discuss mailing list > ha-clusters-discuss at opensolaris.org > http://mail.opensolaris.org/mailman/listinfo/ha-clusters-discuss >