From: <n-...@us...> - 2011-08-03 13:32:28
|
Revision: 5441 http://gfarm.svn.sourceforge.net/gfarm/?rev=5441&view=rev Author: n-soda Date: 2011-08-03 13:32:22 +0000 (Wed, 03 Aug 2011) Log Message: ----------- When a slave gfmd is upgraded to a master gfmd, automatically make the new gfmd as default master (i.e. do equivalent to "gfmdhost -m -t m <new-master-gfmd>"). Before this change, doing "/etc/init.d/gfmd restart" without "gfmdhost -m -t m <new-master-gfmd>" made a trouble that there is no master gfmd at all. Modified Paths: -------------- gfarm_v2/trunk/server/gfmd/gfmd.c gfarm_v2/trunk/server/gfmd/mdhost.c gfarm_v2/trunk/server/gfmd/mdhost.h Modified: gfarm_v2/trunk/server/gfmd/gfmd.c =================================================================== --- gfarm_v2/trunk/server/gfmd/gfmd.c 2011-08-03 04:46:50 UTC (rev 5440) +++ gfarm_v2/trunk/server/gfmd/gfmd.c 2011-08-03 13:32:22 UTC (rev 5441) @@ -1082,6 +1082,10 @@ start_db_journal_threads(); start_gfmdc_threads(); + giant_lock(); + mdhost_set_self_as_default_master(); + giant_unlock(); + gflog_info(GFARM_MSG_UNFIXED, "end transforming to the master gfmd"); } Modified: gfarm_v2/trunk/server/gfmd/mdhost.c =================================================================== --- gfarm_v2/trunk/server/gfmd/mdhost.c 2011-08-03 04:46:50 UTC (rev 5440) +++ gfarm_v2/trunk/server/gfmd/mdhost.c 2011-08-03 13:32:22 UTC (rev 5441) @@ -977,6 +977,46 @@ } static gfarm_error_t +mdhost_db_modify_default_master(struct mdhost *mh, + struct gfarm_metadb_server *ms, const char *diag) +{ + gfarm_error_t e; + + if ((e = db_begin(diag)) != GFARM_ERR_NO_ERROR) { + gflog_error(GFARM_MSG_UNFIXED, "db_begin failed: %s", + gfarm_error_string(e)); + } else if ((e = db_mdhost_modify(ms, 0)) != GFARM_ERR_NO_ERROR) { + gflog_error(GFARM_MSG_UNFIXED, "db_mdhost_modify failed: %s", + gfarm_error_string(e)); + } else if ((e = mdhost_fix_default_master(mh, diag)) + != GFARM_ERR_NO_ERROR) { + gflog_error(GFARM_MSG_UNFIXED, "db_mdhost_modify failed: %s", + gfarm_error_string(e)); + } else if ((e = db_end(diag)) != GFARM_ERR_NO_ERROR) { + gflog_error(GFARM_MSG_UNFIXED, "db_end failed: %s", + gfarm_error_string(e)); + } + return (e); +} + +/* PREREQUISITE: giant_lock */ +void +mdhost_set_self_as_default_master(void) +{ + gfarm_error_t e; + struct mdhost *self = mdhost_lookup_self(); + static const char diag[] = "mdhost_set_self_as_default_master"; + + gfarm_metadb_server_set_is_default_master(&self->ms, 1); + if ((e = mdhost_db_modify_default_master(self, &self->ms, diag)) != + GFARM_ERR_NO_ERROR) + ; + else if ((e = mdhost_updated()) != GFARM_ERR_NO_ERROR) + gflog_error(GFARM_MSG_UNFIXED, "%s: mdhost_updated: %s", + diag, gfarm_error_string(e)); +} + +static gfarm_error_t metadb_server_check_write_access(struct peer *peer, int from_client, const char *diag) { @@ -991,7 +1031,6 @@ return (GFARM_ERR_NO_ERROR); } - gfarm_error_t gfm_server_metadb_server_set(struct peer *peer, int from_client, int skip) { @@ -1120,25 +1159,7 @@ goto unlock; mdhost_modify_in_cache(mh, &ms); if (isdm) { - if ((e = db_begin(diag)) != GFARM_ERR_NO_ERROR) { - gflog_error(GFARM_MSG_UNFIXED, - "db_begin failed: %s", - gfarm_error_string(e)); - } else if ((e = db_mdhost_modify(&ms, 0)) - != GFARM_ERR_NO_ERROR) { - gflog_error(GFARM_MSG_UNFIXED, - "db_mdhost_modify failed: %s", - gfarm_error_string(e)); - } else if ((e = mdhost_fix_default_master(mh, diag)) - != GFARM_ERR_NO_ERROR) { - gflog_error(GFARM_MSG_UNFIXED, - "db_mdhost_modify failed: %s", - gfarm_error_string(e)); - } else if ((e = db_end(diag)) != GFARM_ERR_NO_ERROR) { - gflog_error(GFARM_MSG_UNFIXED, - "db_end failed: %s", - gfarm_error_string(e)); - } + e = mdhost_db_modify_default_master(mh, &ms, diag); } else if ((e = db_mdhost_modify(&ms, 0)) != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_UNFIXED, "db_mdhost_modify failed: %s", Modified: gfarm_v2/trunk/server/gfmd/mdhost.h =================================================================== --- gfarm_v2/trunk/server/gfmd/mdhost.h 2011-08-03 04:46:50 UTC (rev 5440) +++ gfarm_v2/trunk/server/gfmd/mdhost.h 2011-08-03 13:32:22 UTC (rev 5441) @@ -36,6 +36,7 @@ int mdhost_is_recieved_seqnum(struct mdhost *); void mdhost_set_is_recieved_seqnum(struct mdhost *, int); void mdhost_set_self_as_master(void); +void mdhost_set_self_as_default_master(void); int mdhost_is_sync_replication(struct mdhost *); int mdhost_get_flags(struct mdhost *); int mdhost_is_in_first_sync(struct mdhost *); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |