diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-sm.h')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-sm.h | 123 |
1 files changed, 93 insertions, 30 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.h b/xlators/mgmt/glusterd/src/glusterd-sm.h index 2bd2601cb..b9bedbe69 100644 --- a/xlators/mgmt/glusterd/src/glusterd-sm.h +++ b/xlators/mgmt/glusterd/src/glusterd-sm.h @@ -1,22 +1,12 @@ /* - Copyright (c) 2006-2009 Gluster, Inc. <http://www.gluster.com> - This file is part of GlusterFS. - - GlusterFS is free software; you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. - - GlusterFS is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see - <http://www.gnu.org/licenses/>. -*/ + Copyright (c) 2006-2012 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ #ifndef _GLUSTERD_SM_H_ #define _GLUSTERD_SM_H_ @@ -37,15 +27,21 @@ #include "byte-order.h" //#include "glusterd.h" #include "rpcsvc.h" - -struct glusterd_store_handle_ { - char *path; - int fd; - FILE *read; - FILE *write; -}; - -typedef struct glusterd_store_handle_ glusterd_store_handle_t; +#include "store.h" + +typedef enum gd_quorum_contribution_ { + QUORUM_NONE, + QUORUM_WAITING, + QUORUM_DOWN, + QUORUM_UP +} gd_quorum_contrib_t; + +typedef enum gd_quorum_status_ { + QUORUM_UNKNOWN, + QUORUM_NOT_APPLICABLE, + QUORUM_MEETS, + QUORUM_DOES_NOT_MEET +} gd_quorum_status_t; typedef enum glusterd_friend_sm_state_ { GD_FRIEND_STATE_DEFAULT = 0, @@ -56,6 +52,9 @@ typedef enum glusterd_friend_sm_state_ { GD_FRIEND_STATE_REQ_SENT_RCVD, GD_FRIEND_STATE_REJECTED, GD_FRIEND_STATE_UNFRIEND_SENT, + GD_FRIEND_STATE_PROBE_RCVD, + GD_FRIEND_STATE_CONNECTED_RCVD, + GD_FRIEND_STATE_CONNECTED_ACCEPTED, GD_FRIEND_STATE_MAX } glusterd_friend_sm_state_t; @@ -69,23 +68,63 @@ typedef struct glusterd_peer_hostname_ { struct list_head hostname_list; }glusterd_peer_hostname_t; +typedef struct glusterd_sm_transition_ { + int old_state; + int event; + int new_state; + time_t time; +} glusterd_sm_transition_t; + +typedef struct glusterd_sm_tr_log_ { + glusterd_sm_transition_t *transitions; + size_t current; + size_t size; + size_t count; + char* (*state_name_get) (int); + char* (*event_name_get) (int); +} glusterd_sm_tr_log_t; + struct glusterd_peerinfo_ { uuid_t uuid; - char uuid_str[50]; + char uuid_str[50]; /* Retrieve this using + * gd_peer_uuid_str () + */ glusterd_peer_state_info_t state; char *hostname; int port; struct list_head uuid_list; struct list_head op_peers_list; - struct list_head hostnames; struct rpc_clnt *rpc; + rpc_clnt_prog_t *mgmt; + rpc_clnt_prog_t *peer; + rpc_clnt_prog_t *mgmt_v3; int connected; - glusterd_store_handle_t *shandle; + gf_store_handle_t *shandle; + glusterd_sm_tr_log_t sm_log; + gf_boolean_t quorum_action; + gd_quorum_contrib_t quorum_contrib; + gf_boolean_t locked; }; typedef struct glusterd_peerinfo_ glusterd_peerinfo_t; +typedef enum glusterd_ev_gen_mode_ { + GD_MODE_OFF, + GD_MODE_ON, + GD_MODE_SWITCH_ON +} glusterd_ev_gen_mode_t; + +typedef struct glusterd_peer_ctx_args_ { + rpcsvc_request_t *req; + glusterd_ev_gen_mode_t mode; + dict_t *dict; +} glusterd_peerctx_args_t; +typedef struct glusterd_peer_ctx_ { + glusterd_peerctx_args_t args; + glusterd_peerinfo_t *peerinfo; + char *errstr; +} glusterd_peerctx_t; typedef enum glusterd_friend_sm_event_type_ { GD_FRIEND_EVENT_NONE = 0, @@ -99,10 +138,18 @@ typedef enum glusterd_friend_sm_event_type_ { GD_FRIEND_EVENT_INIT_REMOVE_FRIEND, GD_FRIEND_EVENT_RCVD_REMOVE_FRIEND, GD_FRIEND_EVENT_REMOVE_FRIEND, + GD_FRIEND_EVENT_CONNECTED, GD_FRIEND_EVENT_MAX } glusterd_friend_sm_event_type_t; +typedef enum glusterd_friend_update_op_ { + GD_FRIEND_UPDATE_NONE = 0, + GD_FRIEND_UPDATE_ADD, + GD_FRIEND_UPDATE_DEL, +} glusterd_friend_update_op_t; + + struct glusterd_friend_sm_event_ { struct list_head list; glusterd_peerinfo_t *peerinfo; @@ -127,12 +174,17 @@ typedef struct glusterd_friend_req_ctx_ { dict_t *vols; } glusterd_friend_req_ctx_t; -typedef glusterd_friend_req_ctx_t glusterd_friend_update_ctx_t; +typedef struct glusterd_friend_update_ctx_ { + uuid_t uuid; + char *hostname; + int op; +} glusterd_friend_update_ctx_t; typedef struct glusterd_probe_ctx_ { char *hostname; rpcsvc_request_t *req; int port; + dict_t *dict; } glusterd_probe_ctx_t; int glusterd_friend_sm_new_event (glusterd_friend_sm_event_type_t event_type, @@ -151,4 +203,15 @@ glusterd_destroy_probe_ctx (glusterd_probe_ctx_t *ctx); void glusterd_destroy_friend_req_ctx (glusterd_friend_req_ctx_t *ctx); + +char* +glusterd_friend_sm_state_name_get (int state); + +char* +glusterd_friend_sm_event_name_get (int event); + +int +glusterd_broadcast_friend_delete (char *hostname, uuid_t uuid); +void +glusterd_destroy_friend_update_ctx (glusterd_friend_update_ctx_t *ctx); #endif |
