amf.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849
  1. /*
  2. * Copyright (c) 2002-2005 MontaVista Software, Inc.
  3. * Author: Steven Dake (sdake@mvista.com)
  4. *
  5. * Copyright (c) 2006 Ericsson AB.
  6. * Author: Hans Feldt
  7. * Description: - Reworked to match AMF B.02 information model
  8. * - New state machine design
  9. *
  10. * All rights reserved.
  11. * This software licensed under BSD license, the text of which follows:
  12. *
  13. * Redistribution and use in source and binary forms, with or without
  14. * modification, are permitted provided that the following conditions are met:
  15. *
  16. * - Redistributions of source code must retain the above copyright notice,
  17. * this list of conditions and the following disclaimer.
  18. * - Redistributions in binary form must reproduce the above copyright notice,
  19. * this list of conditions and the following disclaimer in the documentation
  20. * and/or other materials provided with the distribution.
  21. * - Neither the name of the MontaVista Software, Inc. nor the names of its
  22. * contributors may be used to endorse or promote products derived from this
  23. * software without specific prior written permission.
  24. *
  25. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  26. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  29. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  30. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  31. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  32. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  33. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  34. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  35. * THE POSSIBILITY OF SUCH DAMAGE.
  36. */
  37. #ifndef AMF_H_DEFINED
  38. #define AMF_H_DEFINED
  39. #include <limits.h>
  40. #include "../include/saAis.h"
  41. #include "../include/saAmf.h"
  42. #include "../include/list.h"
  43. #include "../include/ipc_gen.h"
  44. #include "objdb.h"
  45. #include "timer.h"
  46. enum clc_component_types {
  47. clc_component_sa_aware = 0, /* sa aware */
  48. clc_component_proxied_pre = 1, /* proxied, pre-instantiable */
  49. clc_component_proxied_non_pre = 2, /* proxied, non pre-instantiable */
  50. clc_component_non_proxied_non_sa_aware = 3 /* non-proxied, non sa aware */
  51. };
  52. typedef enum {
  53. SG_AC_Idle = 0,
  54. SG_AC_DeactivatingDependantWorkload,
  55. SG_AC_TerminatingSuspected,
  56. SG_AC_ActivatingStandby,
  57. SG_AC_AssigningStandbyToSpare,
  58. SG_AC_ReparingComponent,
  59. SG_AC_ReparingSu,
  60. SG_AC_AssigningOnRequest,
  61. SG_AC_InstantiatingServiceUnits,
  62. SG_AC_RemovingAssignment,
  63. SG_AC_AssigningActiveworkload,
  64. SG_AC_AssigningAutoAdjust,
  65. SG_AC_AssigningStandBy,
  66. SG_AC_WaitingAfterOperationFailed
  67. } sg_avail_control_state_t;
  68. typedef enum {
  69. SU_RC_ESCALATION_LEVEL_0 = 0,
  70. SU_RC_ESCALATION_LEVEL_1,
  71. SU_RC_ESCALATION_LEVEL_2,
  72. SU_RC_RESTART_COMP_DEACTIVATING,
  73. SU_RC_RESTART_COMP_RESTARTING,
  74. SU_RC_RESTART_COMP_SETTING,
  75. SU_RC_RESTART_COMP_ACTIVATING,
  76. SU_RC_RESTART_SU_DEACTIVATING,
  77. SU_RC_RESTART_SU_TERMINATING,
  78. SU_RC_RESTART_SU_INSTANTIATING,
  79. SU_RC_RESTART_SU_SETTING,
  80. SU_RC_RESTART_SU_ACTIVATING
  81. } su_restart_control_state_t;
  82. struct amf_si_assignment;
  83. struct amf_csi_assignment;
  84. struct amf_healthcheck;
  85. struct amf_cluster {
  86. /* Configuration Attributes */
  87. SaNameT name;
  88. int saAmfClusterStartupTimeout;
  89. SaNameT saAmfClusterClmCluster;
  90. /* Runtime Attributes */
  91. SaAmfAdminStateT saAmfClusterAdminState;
  92. /* Relations */
  93. struct amf_node *node_head;
  94. struct amf_application *application_head;
  95. /* Implementation */
  96. openais_timer_handle timeout_handle;
  97. };
  98. struct amf_node {
  99. /* Configuration Attributes */
  100. SaNameT name;
  101. SaNameT saAmfNodeClmNode;
  102. int saAmfNodeSuFailOverProb;
  103. SaUint32T saAmfNodeSuFailoverMax;
  104. SaBoolT saAmfNodeAutoRepair;
  105. SaBoolT saAmfNodeRebootOnInstantiationFailure;
  106. SaBoolT saAmfNodeRebootOnTerminationFailure;
  107. /* Runtime Attributes */
  108. SaAmfAdminStateT saAmfNodeAdminState;
  109. SaAmfOperationalStateT saAmfNodeOperState;
  110. /* Relations */
  111. struct amf_cluster *cluster;
  112. /* Implementation */
  113. struct amf_node *next;
  114. };
  115. struct amf_application {
  116. /* Configuration Attributes */
  117. SaNameT name;
  118. /* Runtime Attributes */
  119. SaAmfAdminStateT saAmfApplicationAdminState;
  120. SaUint32T saAmfApplicationCurrNumSG;
  121. /* Relations */
  122. struct amf_cluster *cluster;
  123. struct amf_sg *sg_head;
  124. struct amf_si *si_head;
  125. /* Implementation */
  126. char clccli_path[PATH_MAX];
  127. char binary_path[PATH_MAX];
  128. struct amf_application *next;
  129. };
  130. struct amf_sg {
  131. /* Configuration Attributes */
  132. SaNameT name;
  133. saAmfRedundancyModelT saAmfSGRedundancyModel;
  134. SaBoolT saAmfSGAutoAdjust;
  135. SaUint32T saAmfSGNumPrefActiveSUs;
  136. SaUint32T saAmfSGNumPrefStandbySUs;
  137. SaUint32T saAmfSGNumPrefInserviceSUs;
  138. SaUint32T saAmfSGNumPrefAssignedSUs;
  139. SaUint32T saAmfSGMaxActiveSIsperSUs;
  140. SaUint32T saAmfSGMaxStandbySIsperSUs;
  141. SaTimeT saAmfSGCompRestartProb;
  142. SaUint32T saAmfSGCompRestartMax;
  143. SaTimeT saAmfSGSuRestartProb;
  144. SaUint32T saAmfSGSuRestartMax;
  145. SaTimeT saAmfSGAutoAdjustProb;
  146. SaBoolT saAmfSGAutoRepair;
  147. /* Runtime Attributes */
  148. SaAmfAdminStateT saAmfSGAdminState;
  149. SaUint32T saAmfSGNumCurrAssignedSUs;
  150. SaUint32T saAmfSGNumCurrNonInstantiatedSpareSUs;
  151. SaUint32T saAmfSGNumCurrInstantiatedSpareSUs;
  152. /* Relations */
  153. struct amf_application *application;
  154. struct amf_su *su_head;
  155. /* Implementation */
  156. char clccli_path[PATH_MAX];
  157. char binary_path[PATH_MAX];
  158. struct amf_sg *next;
  159. sg_avail_control_state_t avail_state;
  160. };
  161. struct amf_su {
  162. /* Configuration Attributes */
  163. SaNameT name;
  164. SaUint32T saAmfSURank;
  165. SaUint32T saAmfSUNumComponents;
  166. SaBoolT saAmfSUIsExternal;
  167. SaBoolT saAmfSUFailover;
  168. /* Runtime Attributes */
  169. SaBoolT saAmfSUPreInstantiable;
  170. SaAmfOperationalStateT saAmfSUOperState;
  171. SaAmfAdminStateT saAmfSUAdminState;
  172. // SaAmfReadinessStateT saAmfSUReadinessState;
  173. SaAmfPresenceStateT saAmfSUPresenceState;
  174. // SaNameT saAmfSUAssignedSIs;
  175. SaNameT saAmfSUHostedByNode;
  176. /* SaUint32T saAmfSUNumCurrActiveSIs; */
  177. /* SaUint32T saAmfSUNumCurrStandbySIs; */
  178. SaUint32T saAmfSURestartCount;
  179. /* Relations */
  180. struct amf_sg *sg;
  181. struct amf_comp *comp_head;
  182. /* Implementation */
  183. su_restart_control_state_t restart_control_state;
  184. su_restart_control_state_t escalation_level_history_state;
  185. char clccli_path[PATH_MAX];
  186. char binary_path[PATH_MAX];
  187. SaUint32T su_failover_cnt; /* missing in SAF specs? */
  188. struct amf_su *next;
  189. };
  190. struct amf_comp {
  191. /* Configuration Attributes */
  192. SaNameT name;
  193. SaNameT **saAmfCompCsTypes;
  194. saAmfCompCategoryT saAmfCompCategory;
  195. saAmfCompCapabilityModelT saAmfCompCapability;
  196. SaUint32T saAmfCompNumMaxActiveCsi;
  197. SaUint32T saAmfCompNumMaxStandbyCsi;
  198. SaStringT *saAmfCompCmdEnv;
  199. int saAmfCompDefaultClcCliTimeout;
  200. int saAmfCompDefaultCallbackTimeOut;
  201. SaStringT saAmfCompInstantiateCmd;
  202. SaStringT saAmfCompInstantiateCmdArgv;
  203. int saAmfCompInstantiateTimeout;
  204. SaUint32T saAmfCompInstantiationLevel;
  205. SaUint32T saAmfCompNumMaxInstantiateWithoutDelay;
  206. SaUint32T saAmfCompNumMaxInstantiateWithDelay;
  207. int saAmfCompDelayBetweenInstantiateAttempts;
  208. SaStringT saAmfCompTerminateCmd;
  209. int saAmfCompTerminateTimeout;
  210. SaStringT saAmfCompTerminateCmdArgv;
  211. SaStringT saAmfCompCleanupCmd;
  212. int saAmfCompCleanupTimeout;
  213. SaStringT saAmfCompCleanupCmdArgv;
  214. SaStringT saAmfCompAmStartCmd;
  215. int saAmfCompAmStartTimeout;
  216. SaStringT saAmfCompAmStartCmdArgv;
  217. SaUint32T saAmfCompNumMaxAmStartAttempt;
  218. SaStringT saAmfCompAmStopCmd;
  219. int saAmfCompAmStopTimeout;
  220. SaStringT saAmfCompAmStopCmdArgv;
  221. SaUint32T saAmfCompNumMaxAmStopAttempt;
  222. int saAmfCompTerminateCallbackTimeout;
  223. int saAmfCompCSISetCallbackTimeout;
  224. int saAmfCompQuiescingCompleteTimeout;
  225. int saAmfCompCSIRmvCallbackTimeout;
  226. SaAmfRecommendedRecoveryT saAmfCompRecoveryOnError;
  227. SaBoolT saAmfCompDisableRestart;
  228. SaNameT saAmfCompProxyCsi;
  229. /* Runtime Attributes */
  230. SaAmfOperationalStateT saAmfCompOperState;
  231. // SaAmfReadinessStateT saAmfCompReadinessState;
  232. SaAmfPresenceStateT saAmfCompPresenceState;
  233. SaUint32T saAmfCompRestartCount;
  234. /* SaUint32T saAmfCompNumCurrActiveCsi; */
  235. /* SaUint32T saAmfCompNumCurrStandbyCsi; */
  236. SaNameT saAmfCompAssignedCsi;
  237. SaNameT saAmfCompCurrProxyName;
  238. SaNameT saAmfCompCurrProxiedNames;
  239. /* Relations */
  240. struct amf_comp *proxy_comp;
  241. struct amf_su *su;
  242. /* Implementation */
  243. char clccli_path[PATH_MAX];
  244. char binary_path[PATH_MAX];
  245. struct amf_comp *next;
  246. void *conn;
  247. enum clc_component_types comptype;
  248. struct amf_healthcheck *healthcheck_head;
  249. /**
  250. * Flag that indicates of this component has a suspected error
  251. */
  252. int error_suspected;
  253. };
  254. struct amf_healthcheck {
  255. /* Configuration Attributes */
  256. SaAmfHealthcheckKeyT safHealthcheckKey;
  257. int saAmfHealthcheckMaxDuration;
  258. int saAmfHealthcheckPeriod;
  259. /* Relations */
  260. struct amf_comp *comp;
  261. /* Implementation */
  262. struct amf_healthcheck *next;
  263. int active;
  264. SaAmfHealthcheckInvocationT invocationType;
  265. SaAmfRecommendedRecoveryT recommendedRecovery;
  266. openais_timer_handle timer_handle_duration;
  267. openais_timer_handle timer_handle_period;
  268. };
  269. struct amf_si {
  270. /* Configuration Attributes */
  271. SaNameT name;
  272. SaNameT saAmfSIProtectedbySG;
  273. SaUint32T saAmfSIRank;
  274. SaUint32T saAmfSINumCSIs;
  275. SaUint32T saAmfSIPrefActiveAssignments;
  276. SaUint32T saAmfSIPrefStandbyAssignments;
  277. /* Runtime Attributes */
  278. SaAmfAdminStateT saAmfSIAdminState;
  279. // SaAmfAssignmentStateT saAmfSIAssignmentState;
  280. // SaUint32T saAmfSINumCurrActiveAssignments;
  281. // SaUint32T saAmfSINumCurrStandbyAssignments;
  282. /* Relations */
  283. struct amf_application *application;
  284. struct amf_csi *csi_head;
  285. struct amf_si_assignment *assigned_sis;
  286. struct amf_si_dependency *depends_on;
  287. struct amf_si_ranked_su *ranked_sus;
  288. /* Implementation */
  289. struct amf_si *next;
  290. };
  291. struct amf_si_ranked_su {
  292. /* Configuration Attributes */
  293. SaNameT name;
  294. SaUint32T saAmfRank;
  295. /* Relations */
  296. struct amf_si *si;
  297. struct amf_su *su;
  298. /* Implementation */
  299. struct amf_si_ranked_su *su_next;
  300. struct amf_si_ranked_su *si_next;
  301. };
  302. struct amf_si_dependency {
  303. /* Configuration Attributes */
  304. SaNameT name;
  305. int saAmfToleranceTime;
  306. /* Relations */
  307. /* Implementation */
  308. struct amf_si_dependency *next;
  309. };
  310. struct amf_si_assignment {
  311. /* Runtime Attributes */
  312. SaNameT name;
  313. SaAmfHAStateT saAmfSISUHAState;
  314. /* Relations */
  315. struct amf_si *si;
  316. struct amf_su *su;
  317. /* Implementation */
  318. SaAmfHAStateT requested_ha_state;
  319. struct amf_si_assignment *next;
  320. void (*assumed_callback_fn) (
  321. struct amf_si_assignment *si_assignment, int result);
  322. };
  323. struct amf_csi {
  324. /* Configuration Attributes */
  325. SaNameT name;
  326. SaNameT saAmfCSTypeName;
  327. SaNameT **saAmfCSIDependencies;
  328. /* Relations */
  329. struct amf_si *si;
  330. struct amf_csi_assignment *assigned_csis;
  331. struct amf_csi_attribute *attributes_head;
  332. /* Implementation */
  333. struct amf_csi *next;
  334. int pg_set;
  335. };
  336. struct amf_csi_attribute {
  337. /* Configuration Attributes */
  338. SaStringT name;
  339. SaStringT *value;
  340. /* Implementation */
  341. struct amf_csi_attribute *next;
  342. };
  343. struct amf_csi_assignment {
  344. /* Runtime Attributes */
  345. SaNameT name;
  346. SaAmfHAStateT saAmfCSICompHAState; /* confirmed HA state */
  347. /* Relations */
  348. struct amf_csi *csi;
  349. struct amf_comp *comp;
  350. /* Implementation */
  351. SaAmfHAStateT requested_ha_state;
  352. struct amf_csi_assignment *next;
  353. struct amf_si_assignment *si_assignment;
  354. };
  355. enum amf_response_interfaces {
  356. AMF_RESPONSE_HEALTHCHECKCALLBACK = 1,
  357. AMF_RESPONSE_CSISETCALLBACK = 2,
  358. AMF_RESPONSE_CSIREMOVECALLBACK = 3,
  359. AMF_RESPONSE_COMPONENTTERMINATECALLBACK = 4
  360. };
  361. enum amf_message_req_types {
  362. MESSAGE_REQ_EXEC_AMF_COMPONENT_REGISTER = 0,
  363. MESSAGE_REQ_EXEC_AMF_COMPONENT_ERROR_REPORT = 1,
  364. MESSAGE_REQ_EXEC_AMF_CLC_CLEANUP_COMPLETED = 2,
  365. MESSAGE_REQ_EXEC_AMF_HEALTHCHECK_TMO = 3,
  366. MESSAGE_REQ_EXEC_AMF_RESPONSE = 4
  367. };
  368. struct req_exec_amf_clc_cleanup_completed {
  369. mar_req_header_t header;
  370. SaNameT compName;
  371. };
  372. struct req_exec_amf_healthcheck_tmo {
  373. mar_req_header_t header;
  374. SaNameT compName;
  375. SaAmfHealthcheckKeyT safHealthcheckKey;
  376. };
  377. /*===========================================================================*/
  378. /* amfutil.c */
  379. extern struct amf_cluster *amf_config_read (char **error_string);
  380. extern char *amf_serialize (struct amf_cluster *cluster);
  381. extern int amf_deserialize (char *buf, struct amf_cluster *cluster);
  382. extern void amf_state_print (struct amf_cluster *cluster);
  383. extern void amf_runtime_attributes_print (struct amf_cluster *cluster);
  384. extern int amf_enabled (struct objdb_iface_ver0 *objdb);
  385. extern int amf_invocation_create (int interface, void *data);
  386. extern int amf_invocation_get_and_destroy (
  387. int invocation, int *interface, void **data);
  388. extern void amf_invocation_destroy_by_data (void *data);
  389. extern const char *amf_admin_state (int state);
  390. extern const char *amf_op_state (int state);
  391. extern const char *amf_presence_state (int state);
  392. extern const char *amf_ha_state (int state);
  393. extern const char *amf_readiness_state (int state);
  394. extern const char *amf_assignment_state (int state);
  395. /*===========================================================================*/
  396. /* amfnode.c */
  397. /* General methods */
  398. extern struct amf_node *amf_node_create (void);
  399. extern int amf_node_serialize (
  400. struct amf_node *node, char **buf, int *offset);
  401. extern struct amf_node *amf_node_deserialize (
  402. char **buf, int *size, struct amf_cluster *cluster);
  403. /* Event methods */
  404. extern void amf_node_sync_ready (struct amf_node *node);
  405. extern void amf_node_leave (struct amf_node *node);
  406. extern void amf_node_failover (struct amf_node *node);
  407. extern void amf_node_switchover (struct amf_node *node);
  408. extern void amf_node_failfast (struct amf_node *node);
  409. extern void amf_node_comp_restart_req (
  410. struct amf_node *node, struct amf_comp *comp);
  411. extern void amf_node_comp_failover_req (
  412. struct amf_node *node, struct amf_comp *comp);
  413. enum amf_reboot_reason {
  414. TERMINATION_FAILED = 1,
  415. INSTANTIATION_FAILED = 2
  416. };
  417. extern int amf_node_reboot (
  418. struct amf_node *node, enum amf_reboot_reason reason);
  419. /* Response event methods */
  420. extern void amf_node_application_started (
  421. struct amf_node *node, struct amf_application *app);
  422. extern void amf_node_application_workload_assigned (
  423. struct amf_node *node, struct amf_application *app);
  424. /* Timer event methods */
  425. extern void timer_function_node_probation_period_expired (void *node);
  426. /*===========================================================================*/
  427. /* amfcluster.c */
  428. /* General methods */
  429. extern void amf_cluster_init (void);
  430. extern struct amf_cluster *amf_cluster_create (void);
  431. extern int amf_cluster_serialize (
  432. struct amf_cluster *cluster, char **buf, int *offset);
  433. extern struct amf_cluster *amf_cluster_deserialize (
  434. char **buf, int *size, struct amf_cluster *cluster);
  435. /* Event methods */
  436. extern void amf_cluster_start (struct amf_cluster *cluster);
  437. /* Response event methods */
  438. extern void amf_cluster_application_started (
  439. struct amf_cluster *cluster, struct amf_application *app);
  440. extern void amf_cluster_application_workload_assigned (
  441. struct amf_cluster *cluster, struct amf_application *app);
  442. /*===========================================================================*/
  443. /* amfapp.c */
  444. /* General methods */
  445. extern void amf_application_init (void);
  446. extern struct amf_application *amf_application_create (void);
  447. extern int amf_application_calc_and_set_si_dependency_level (
  448. struct amf_application *app);
  449. extern int amf_application_serialize (
  450. struct amf_application *application, char **buf, int *offset);
  451. extern struct amf_application *amf_application_deserialize (
  452. char **buf, int *size, struct amf_cluster *cluster);
  453. /* Event methods */
  454. extern void amf_application_start (
  455. struct amf_application *app, struct amf_node *node);
  456. extern void amf_application_assign_workload (
  457. struct amf_application *app, struct amf_node *node);
  458. /* Response event methods */
  459. extern void amf_application_sg_started (
  460. struct amf_application *app, struct amf_sg *sg, struct amf_node *node);
  461. extern void amf_application_sg_assigned (
  462. struct amf_application *app, struct amf_sg *sg);
  463. /*===========================================================================*/
  464. /* amfsg.c */
  465. /* General methods */
  466. extern void amf_sg_init (void);
  467. extern struct amf_sg *amf_sg_create (void);
  468. extern int amf_sg_serialize (
  469. struct amf_sg *sg, char **buf, int *offset);
  470. extern struct amf_sg *amf_sg_deserialize (
  471. char **buf, int *size, struct amf_cluster *cluster);
  472. /**
  473. * Request SG to start (instantiate all SUs)
  474. *
  475. * @param sg
  476. * @param node - NULL start all SUs in the SG
  477. * @param node - !NULL start all SUs in the SG for the specified
  478. * node.
  479. */
  480. extern void amf_sg_start (struct amf_sg *sg, struct amf_node *node);
  481. /**
  482. * Assign SIs on a certain dependency level to SUs
  483. * @param sg
  484. * @param dependency_level
  485. */
  486. extern void amf_sg_assign_si (struct amf_sg *sg, int dependency_level);
  487. extern void amf_sg_failover_node_req (
  488. struct amf_sg *sg, struct amf_node *node);
  489. extern void amf_sg_failover_su_req (
  490. struct amf_sg *sg, struct amf_su *su, struct amf_node *node);
  491. extern void amf_sg_failover_comp_req (
  492. struct amf_sg *sg, struct amf_node *node);
  493. extern void amf_sg_switchover_node_req (
  494. struct amf_sg *sg, struct amf_node *node);
  495. /* Response event methods */
  496. extern void amf_sg_su_state_changed (
  497. struct amf_sg *sg, struct amf_su *su, SaAmfStateT type, int state);
  498. extern void amf_sg_si_ha_state_changed (
  499. struct amf_sg *sg, struct amf_si *si, int state);
  500. extern void amf_sg_su_assignment_removed (
  501. struct amf_sg *sg, struct amf_su *su);
  502. extern void amf_sg_si_activated (
  503. struct amf_sg *sg, struct amf_si *si);
  504. /* Timer event methods */
  505. //static void timer_function_auto_adjust_tmo (void *sg);
  506. /*===========================================================================*/
  507. /* amfsu.c */
  508. /* General methods */
  509. extern void amf_su_init (void);
  510. extern struct amf_su *amf_su_create (void);
  511. extern char *amf_su_dn_make (struct amf_su *su, SaNameT *name);
  512. extern int amf_su_serialize (
  513. struct amf_su *su, char **buf, int *offset);
  514. extern struct amf_su *amf_su_deserialize (
  515. char **buf, int *size, struct amf_cluster *cluster);
  516. extern int amf_su_is_local (struct amf_su *su);
  517. extern struct amf_si_assignment *amf_su_get_next_si_assignment (
  518. struct amf_su *su, const struct amf_si_assignment *si_assignment);
  519. extern void amf_su_foreach_si_assignment (
  520. struct amf_su *su,
  521. void (*foreach_fn)(struct amf_su *su,
  522. struct amf_si_assignment *si_assignment));
  523. extern int amf_su_get_saAmfSUNumCurrActiveSIs (struct amf_su *su);
  524. extern int amf_su_get_saAmfSUNumCurrStandbySIs (struct amf_su *su);
  525. extern SaAmfReadinessStateT amf_su_get_saAmfSUReadinessState (
  526. struct amf_su *su);
  527. /* Event methods */
  528. extern void amf_su_instantiate (struct amf_su *su);
  529. extern void amf_su_assign_si (
  530. struct amf_su *su, struct amf_si *si, SaAmfHAStateT ha_state);
  531. extern void amf_su_restart_req (struct amf_su *su);
  532. /**
  533. * Request termination of all component in an SU
  534. * @param su
  535. */
  536. extern void amf_su_terminate (struct amf_su *su);
  537. extern struct amf_node *amf_su_get_node (struct amf_su *su);
  538. extern void amf_su_escalation_level_reset (struct amf_su *su);
  539. extern void amf_su_remove_assignment (struct amf_su *su);
  540. /* Response event methods */
  541. extern void amf_su_comp_state_changed (
  542. struct amf_su *su, struct amf_comp *comp, SaAmfStateT type, int state);
  543. #if 0
  544. extern void amf_su_comp_hastate_changed (
  545. struct amf_su *su, struct amf_comp *comp,
  546. struct amf_csi_assignment *csi_assignment);
  547. #endif
  548. extern void amf_su_comp_error_suspected (
  549. struct amf_su *su,
  550. struct amf_comp *comp,
  551. SaAmfRecommendedRecoveryT recommended_recovery);
  552. /* Timer event methods */
  553. //static void timer_function_su_probation_period_expired(void *data);
  554. /*===========================================================================*/
  555. /* amfcomp.c */
  556. /* General methods */
  557. extern void amf_comp_init (void);
  558. extern struct amf_comp *amf_comp_create (struct amf_su *su);
  559. extern char *amf_comp_dn_make (struct amf_comp *comp, SaNameT *name);
  560. extern struct amf_comp *amf_comp_find (
  561. struct amf_cluster *cluster, SaNameT *name);
  562. extern int amf_comp_serialize (
  563. struct amf_comp *comp, char **buf, int *offset);
  564. extern struct amf_comp *amf_comp_deserialize (
  565. char **buf, int *size, struct amf_cluster *cluster);
  566. extern void amf_comp_foreach_csi_assignment (
  567. struct amf_comp *component,
  568. void (*foreach_fn)(struct amf_comp *component,
  569. struct amf_csi_assignment *csi_assignment));
  570. extern struct amf_csi_assignment *amf_comp_get_next_csi_assignment (
  571. struct amf_comp *component, const struct amf_csi_assignment *csi_assignment);
  572. extern SaAmfReadinessStateT amf_comp_get_saAmfCompReadinessState (
  573. struct amf_comp *comp);
  574. /* Event methods */
  575. extern void amf_comp_instantiate (struct amf_comp *comp);
  576. extern void amf_comp_terminate (struct amf_comp *comp);
  577. /**
  578. * Request the component to assume a HA state
  579. * @param comp
  580. * @param csi_assignment
  581. * @param requested_ha_state
  582. */
  583. extern void amf_comp_hastate_set (
  584. struct amf_comp *comp,
  585. struct amf_csi_assignment *csi_assignment);
  586. extern void amf_comp_restart (struct amf_comp *comp);
  587. extern void amf_comp_operational_state_set (
  588. struct amf_comp *comp, SaAmfOperationalStateT opstate);
  589. extern void amf_comp_readiness_state_set (
  590. struct amf_comp *comp, SaAmfReadinessStateT state);
  591. extern struct amf_healthcheck *amf_comp_find_healthcheck (
  592. struct amf_comp *comp, SaAmfHealthcheckKeyT *key);
  593. extern void amf_comp_healthcheck_tmo (
  594. struct amf_comp *comp, struct amf_healthcheck *healthcheck);
  595. extern void amf_comp_cleanup_completed (struct amf_comp *comp);
  596. /**
  597. * Count number of active CSI assignments
  598. * @param component
  599. *
  600. * @return int
  601. */
  602. extern int amf_comp_get_saAmfCompNumCurrActiveCsi(struct amf_comp *component);
  603. /**
  604. * Count number of standby CSI assignments
  605. * @param component
  606. *
  607. * @return int
  608. */
  609. extern int amf_comp_get_saAmfCompNumCurrStandbyCsi(struct amf_comp *component);
  610. /*
  611. * Originates from library
  612. */
  613. extern SaAisErrorT amf_comp_healthcheck_start (
  614. struct amf_comp *comp,
  615. SaAmfHealthcheckKeyT *healthcheckKey,
  616. SaAmfHealthcheckInvocationT invocationType,
  617. SaAmfRecommendedRecoveryT recommendedRecovery);
  618. extern SaAisErrorT amf_comp_healthcheck_stop (
  619. struct amf_comp *comp,
  620. SaAmfHealthcheckKeyT *healthcheckKey);
  621. extern SaAisErrorT amf_comp_register (struct amf_comp *comp);
  622. extern void amf_comp_unregister (struct amf_comp *comp);
  623. extern void amf_comp_error_report (
  624. struct amf_comp *comp, SaAmfRecommendedRecoveryT recommendedRecovery);
  625. extern int amf_comp_response_1 (
  626. SaInvocationT invocation, SaAisErrorT error, SaAisErrorT *retval);
  627. extern struct amf_comp *amf_comp_response_2 (
  628. SaInvocationT invocation, SaAisErrorT error, SaAisErrorT *retval);
  629. extern SaAisErrorT amf_comp_hastate_get (
  630. struct amf_comp *comp, SaNameT *csi_name, SaAmfHAStateT *ha_state);
  631. extern SaAisErrorT amf_comp_healthcheck_confirm (
  632. struct amf_comp *comp,
  633. SaAmfHealthcheckKeyT *healthcheckKey,
  634. SaAisErrorT healthcheckResult);
  635. /*===========================================================================*/
  636. /* amfsi.c */
  637. /* General methods */
  638. extern void amf_si_init (void);
  639. extern struct amf_si *amf_si_create (void);
  640. extern int amf_si_calc_and_set_csi_dependency_level (struct amf_si *si);
  641. extern int amf_si_serialize (
  642. struct amf_si *si, char **buf, int *offset);
  643. extern struct amf_si *amf_si_deserialize (
  644. char **buf, int *size, struct amf_cluster *cluster);
  645. /**
  646. * Get number of active assignments for the specified SI
  647. * @param si
  648. *
  649. * @return int
  650. */
  651. extern int amf_si_get_saAmfSINumCurrActiveAssignments (struct amf_si *si);
  652. /**
  653. * Get number of standby assignments for the specified SI
  654. * @param si
  655. *
  656. * @return int
  657. */
  658. extern int amf_si_get_saAmfSINumCurrStandbyAssignments (struct amf_si *si);
  659. /**
  660. * Get assignment state for the specified SI.
  661. * @param si
  662. *
  663. * @return SaAmfAssignmentStateT
  664. */
  665. extern SaAmfAssignmentStateT amf_si_get_saAmfSIAssignmentState (
  666. struct amf_si *si);
  667. /* Event methods */
  668. /**
  669. * Activate all active assignments. Request component to change
  670. * HA state to active.
  671. * @param si
  672. * @param activated_callback_fn
  673. */
  674. extern void amf_si_activate (
  675. struct amf_si *si,
  676. void (*activated_callback_fn)(struct amf_si *si, int result));
  677. /**
  678. * Deactivate all active assignments. Request component to
  679. * change HA state to quiesced.
  680. *
  681. * @param si_assignment
  682. * @param deactivated_callback_fn
  683. *
  684. * @return int 1 - deactived immediately
  685. * @return int 0 - asynchronous response through callback
  686. */
  687. /***/
  688. extern int amf_si_deactivate (
  689. struct amf_si_assignment *si_assignment,
  690. void (*deactivated_callback_fn)(struct amf_si_assignment *si_assignment,
  691. int result));
  692. /**
  693. * Request SI (SU) to assume a HA state (request component)
  694. *
  695. * @param si_assignment
  696. * @param assumed_ha_state_callback_fn
  697. */
  698. extern void amf_si_ha_state_assume (
  699. struct amf_si_assignment *si_assignment,
  700. void (*assumed_ha_state_callback_fn)(struct amf_si_assignment *si_assignment,
  701. int result));
  702. /**
  703. * Component reports to SI that a workload assignment succeeded.
  704. *
  705. * @param si
  706. * @param csi_assignment
  707. */
  708. extern void amf_si_comp_set_ha_state_done (
  709. struct amf_si *si, struct amf_csi_assignment *csi_assignment);
  710. /**
  711. * Component reports to SI that a workload assignment failed.
  712. * @param si
  713. * @param csi_assignment
  714. */
  715. extern void amf_si_comp_set_ha_state_failed (
  716. struct amf_si *si, struct amf_csi_assignment *csi_assignment);
  717. /**
  718. * Request a CSI to delete all CSI assignments.
  719. *
  720. * @param component
  721. * @param csi
  722. */
  723. extern void amf_csi_delete_assignments (struct amf_csi *csi, struct amf_su *su);
  724. /* General methods */
  725. extern struct amf_csi *amf_csi_create (void);
  726. extern int amf_csi_serialize (
  727. struct amf_csi *csi, char **buf, int *offset);
  728. extern struct amf_csi *amf_csi_deserialize (
  729. char **buf, int *size, struct amf_cluster *cluster);
  730. extern char *amf_csi_dn_make (struct amf_csi *csi, SaNameT *name);
  731. /*===========================================================================*/
  732. extern struct amf_node *this_amf_node;
  733. extern struct amf_cluster *amf_cluster;
  734. #endif /* AMF_H_DEFINED */