2 Copyright (C) 2010 Proxmox Server Solutions GmbH
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU Affero General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Affero General Public License for more details.
14 You should have received a copy of the GNU Affero General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 Author: Dietmar Maurer <dietmar@proxmox.com>
24 #include <corosync/corotypes.h>
25 #include <corosync/cpg.h>
29 typedef struct dfsm dfsm_t
;
35 unsigned int state_len
;
41 gpointer data
; /* app can use that */
42 dfsm_node_info_t
*local
;
43 dfsm_node_info_t nodes
[];
47 * res <= 0 ... serious error, leave group
48 * res > 0 ... OK, continue
50 typedef int (*dfsm_deliver_fn_t
)(
61 typedef void (*dfsm_confchg_fn_t
)(
64 const struct cpg_address
*member_list
,
65 size_t member_list_entries
);
68 * res == NULL ... serious error, leave group
69 * res != NULL ... OK, continue
71 typedef gpointer (*dfsm_get_state_fn_t
)(
74 unsigned int *res_len
);
76 typedef gboolean (*dfsm_checksum_fn_t
)(
82 typedef int (*dfsm_process_state_update_fn_t
)(
85 dfsm_sync_info_t
*syncinfo
);
87 typedef void (*dfsm_synced_fn_t
)(dfsm_t
*dfsm
);
90 * res < 0 ... serious error, leave group
93 typedef int (*dfsm_process_update_fn_t
)(
96 dfsm_sync_info_t
*syncinfo
,
103 dfsm_deliver_fn_t dfsm_deliver_fn
;
104 dfsm_confchg_fn_t dfsm_confchg_fn
;
105 dfsm_get_state_fn_t dfsm_get_state_fn
;
106 dfsm_process_state_update_fn_t dfsm_process_state_update_fn
;
107 dfsm_process_state_update_fn_t dfsm_commit_fn
;
108 dfsm_process_state_update_fn_t dfsm_cleanup_fn
;
109 dfsm_process_update_fn_t dfsm_process_update_fn
;
110 dfsm_checksum_fn_t dfsm_checksum_fn
;
111 dfsm_synced_fn_t dfsm_synced_fn
;
116 int result
; /* we only have integer results for now */
123 const char *group_name
,
124 const char *log_domain
,
125 guint32 protocol_version
,
126 dfsm_callbacks_t
*callbacks
);
129 dfsm_destroy(dfsm_t
*dfsm
);
132 dfsm_initialize(dfsm_t
*dfsm
, int *fd
);
135 dfsm_finalize(dfsm_t
*dfsm
);
138 dfsm_join(dfsm_t
*dfsm
);
141 dfsm_leave(dfsm_t
*dfsm
);
146 cs_dispatch_flags_t dispatch_types
);
149 dfsm_restartable(dfsm_t
*dfsm
);
152 dfsm_is_initialized(dfsm_t
*dfsm
);
155 dfsm_set_errormode(dfsm_t
*dfsm
);
164 /* only call this from another thread - else you get blocked forever */
166 dfsm_send_message_sync(
180 dfsm_send_update_complete(dfsm_t
*dfsm
);
183 dfsm_lowest_nodeid(dfsm_t
*dfsm
);
186 dfsm_nodeid_is_local(
192 dfsm_verify_request(dfsm_t
*dfsm
);
195 service_dfsm_new(dfsm_t
*dfsm
);
198 service_dfsm_destroy(cfs_service_t
*service
);
201 #endif /* _PVE_DFSM_H_ */