38 #ifndef _CL_AMS_ENTITIES_H_
39 #define _CL_AMS_ENTITIES_H_
54 #include <clAmsTypes.h>
55 #include <clAmsSAClientApi.h>
80 CL_AMS_ENTITY_TYPE_ENTITY = 0,
81 CL_AMS_ENTITY_TYPE_NODE = 1,
82 CL_AMS_ENTITY_TYPE_APP = 2,
83 CL_AMS_ENTITY_TYPE_SG = 3,
84 CL_AMS_ENTITY_TYPE_SU = 4,
85 CL_AMS_ENTITY_TYPE_SI = 5,
86 CL_AMS_ENTITY_TYPE_COMP = 6,
87 CL_AMS_ENTITY_TYPE_CSI = 7,
88 CL_AMS_ENTITY_TYPE_CLUSTER = 8,
91 #define CL_AMS_ENTITY_TYPE_MAX 7 // not ready for cluster yet
97 typedef struct ClAmsEntityOpStack
101 } ClAmsEntityOpStackT;
115 #if defined (CL_AMS_MGMT_HOOKS)
127 ClAmsEntityOpStackT opStack;
134 typedef ClRcT (*ClAmsEntityCallbackT)(ClAmsEntityT *);
135 typedef ClRcT (*ClAmsEntityCallbackExtendedT)(ClAmsEntityT *, ClPtrT userArg);
139 ClAmsEntityCallbackT printOut;
140 ClAmsEntityCallbackT validateConfig;
141 ClAmsEntityCallbackT validateRelationships;
142 } ClAmsEntityMethodsT;
145 typedef struct ClAmsEntityOp
147 #define CL_AMS_ENTITY_OP_REMOVE_MPLUSN 0x1
148 #define CL_AMS_ENTITY_OP_SWAP_REMOVE_MPLUSN 0x2
149 #define CL_AMS_ENTITY_OP_REDUCE_REMOVE_MPLUSN 0x4
150 #define CL_AMS_ENTITY_OP_ACTIVE_REMOVE_MPLUSN 0x8
152 #define CL_AMS_ENTITY_OP_REMOVES_MPLUSN (CL_AMS_ENTITY_OP_REMOVE_MPLUSN | \
153 CL_AMS_ENTITY_OP_SWAP_REMOVE_MPLUSN |\
154 CL_AMS_ENTITY_OP_REDUCE_REMOVE_MPLUSN )
156 #define CL_AMS_ENTITY_OP_SWAP_ACTIVE_MPLUSN 0x10
157 #define CL_AMS_ENTITY_OP_SI_REASSIGN_MPLUSN 0x20
158 #define CL_AMS_ENTITY_OP_ACTIVE_REMOVE_REF_MPLUSN 0x40
165 typedef struct ClAmsEntityRemoveOp
169 ClUint32T switchoverMode;
171 }ClAmsEntityRemoveOpT;
173 typedef struct ClAmsEntitySwapRemoveOp
177 ClUint32T numOtherSIs;
178 ClAmsEntityT *otherSIs;
179 } ClAmsEntitySwapRemoveOpT;
181 typedef struct ClAmsEntityReduceRemoveOp
184 }ClAmsEntityReduceRemoveOpT;
186 typedef struct ClAmsEntitySwapActiveOp
188 ClInt32T sisReassigned;
189 } ClAmsEntitySwapActiveOpT;
191 typedef struct ClAmsSIReassignOp
201 #define CL_AMS_SG_ADJUST_DURATION (3000)
202 #define CL_AMS_SG_ADJUST_PROBATION CL_AMS_SG_ADJUST_DURATION
203 #define CL_AMS_SU_ASSIGNMENT_DELAY (3000)
206 CL_AMS_NODE_TIMER_SUFAILOVER = 1,
208 CL_AMS_SG_TIMER_INSTANTIATE = 10,
209 CL_AMS_SG_TIMER_ADJUST = 11,
210 CL_AMS_SG_TIMER_ADJUST_PROBATION = 12,
211 CL_AMS_SU_TIMER_COMPRESTART = 20,
212 CL_AMS_SU_TIMER_SURESTART = 21,
213 CL_AMS_SU_TIMER_PROBATION = 22,
214 CL_AMS_SU_TIMER_ASSIGNMENT = 23,
216 CL_AMS_COMP_TIMER_INSTANTIATE = 40,
217 CL_AMS_COMP_TIMER_TERMINATE = 41,
218 CL_AMS_COMP_TIMER_CLEANUP = 42,
219 CL_AMS_COMP_TIMER_AMSTART = 43,
220 CL_AMS_COMP_TIMER_AMSTOP = 44,
221 CL_AMS_COMP_TIMER_QUIESCINGCOMPLETE = 45,
222 CL_AMS_COMP_TIMER_CSISET = 46,
223 CL_AMS_COMP_TIMER_CSIREMOVE = 47,
224 CL_AMS_COMP_TIMER_PROXIEDCOMPINSTANTIATE = 48,
225 CL_AMS_COMP_TIMER_PROXIEDCOMPCLEANUP = 49,
226 CL_AMS_COMP_TIMER_INSTANTIATEDELAY = 50,
227 CL_AMS_COMP_TIMER_MAX,
228 } ClAmsEntityTimerTypeT;
232 ClAmsEntityTimerTypeT type;
235 ClAmsEntityT *entity;
241 typedef ClRcT (*ClAmsEntityTimerCallbackT)(ClAmsEntityTimerT *);
257 CL_AMS_ENTITY_REF_TYPE_ENTITY = 0,
258 CL_AMS_ENTITY_REF_TYPE_NODE = 1,
259 CL_AMS_ENTITY_REF_TYPE_APP = 2,
260 CL_AMS_ENTITY_REF_TYPE_SG = 3,
261 CL_AMS_ENTITY_REF_TYPE_SU = 4,
262 CL_AMS_ENTITY_REF_TYPE_SI = 5,
263 CL_AMS_ENTITY_REF_TYPE_COMP = 6,
264 CL_AMS_ENTITY_REF_TYPE_CSI = 7,
265 CL_AMS_ENTITY_REF_TYPE_SUSI = 8,
266 CL_AMS_ENTITY_REF_TYPE_SISU = 9,
267 CL_AMS_ENTITY_REF_TYPE_COMPCSI = 10,
268 CL_AMS_ENTITY_REF_TYPE_CSICOMP = 11,
269 } ClAmsEntityRefTypeT;
271 #define CL_AMS_ENTITY_REF_TYPE_MAX 11
279 ClAmsEntityTypeT type;
280 ClBoolT isRankedList;
282 ClUint32T numEntities;
298 CL_AMS_CONFIG_LIST_START ,
299 CL_AMS_NODE_CONFIG_NODE_DEPENDENT_LIST ,
300 CL_AMS_NODE_CONFIG_NODE_DEPENDENCIES_LIST ,
301 CL_AMS_NODE_CONFIG_SU_LIST ,
302 CL_AMS_SG_CONFIG_SU_LIST ,
303 CL_AMS_SG_CONFIG_SI_LIST ,
304 CL_AMS_SU_CONFIG_COMP_LIST ,
305 CL_AMS_SI_CONFIG_SU_RANK_LIST ,
306 CL_AMS_SI_CONFIG_SI_DEPENDENTS_LIST ,
307 CL_AMS_SI_CONFIG_SI_DEPENDENCIES_LIST ,
308 CL_AMS_SI_CONFIG_CSI_LIST ,
309 CL_AMS_CSI_CONFIG_NVP_LIST ,
310 CL_AMS_CSI_CONFIG_CSI_DEPENDENTS_LIST ,
311 CL_AMS_CSI_CONFIG_CSI_DEPENDENCIES_LIST ,
312 CL_AMS_CONFIG_LIST_END ,
317 CL_AMS_SG_STATUS_INSTANTIABLE_SU_LIST ,
318 CL_AMS_SG_STATUS_INSTANTIATED_SU_LIST ,
319 CL_AMS_SG_STATUS_IN_SERVICE_SPARE_SU_LIST ,
320 CL_AMS_SG_STATUS_ASSIGNED_SU_LIST ,
321 CL_AMS_SG_STATUS_FAULTY_SU_LIST ,
322 CL_AMS_SU_STATUS_SI_LIST ,
323 CL_AMS_SI_STATUS_SU_LIST ,
324 CL_AMS_COMP_STATUS_CSI_LIST ,
325 CL_AMS_CSI_STATUS_PG_LIST ,
330 CL_AMS_ENTITY_LIST_ALL_START ,
341 CL_AMS_ENTITY_LIST_ALL_END ,
344 CL_AMS_CSI_PGTRACK_CLIENT_LIST,
346 CL_AMS_SU_STATUS_SI_EXTENDED_LIST ,
348 CL_AMS_SI_STATUS_SU_EXTENDED_LIST ,
352 }ClAmsEntityListTypeT;
355 typedef ClRcT (*ClAmsEntityRefCallbackT)(
356 ClAmsEntityRefT *entityRef,
357 ClAmsEntityListTypeT listName);
420 ClAmsEntityMethodsT entity;
422 ClAmsEntityTimerCallbackT suFailoverTimeout;
429 ClAmsNodeMethodsT methods;
448 ClAmsEntityMethodsT entity;
453 ClAmsAppConfigT config;
454 ClAmsAppStatusT status;
455 ClAmsAppMethodsT methods;
490 ClBoolT reductionProcedure;
492 ClUint32T maxFailovers;
502 typedef struct ClAmsSGFailoverHistoryKey
506 }ClAmsSGFailoverHistoryKeyT;
508 typedef struct ClAmsSGFailoverHistory
514 ClUint32T numFailovers;
515 }ClAmsSGFailoverHistoryT;
526 ClAmsEntityTimerT adjustProbationTimer;
527 ClAmsEntityTimerT assignmentTimer;
532 ClAmsEntityListT faultySUList;
537 ClUint32T failoverHistoryIndex;
539 ClListHeadT failoverHistory;
546 ClAmsEntityMethodsT entity;
548 ClAmsEntityTimerCallbackT instantiateTimeout;
549 ClAmsEntityTimerCallbackT adjustTimeout;
550 ClAmsEntityTimerCallbackT adjustProbationTimeout;
557 ClAmsSGMethodsT methods;
560 typedef ClAmsSGT VDECL_VER(ClAmsSGT, 4, 1, 0);
561 typedef ClAmsSGT VDECL_VER(ClAmsSGT, 5, 0, 0);
576 ClAmsEntityRefT entityRef;
577 ClAmsHAStateT haState;
587 ClAmsEntityRefT entityRef;
588 ClAmsHAStateT haState;
589 ClUint32T numActiveCSIs;
590 ClUint32T numStandbyCSIs;
591 ClUint32T numQuiescedCSIs;
592 ClUint32T numQuiescingCSIs;
595 ClUint32T pendingInvocations;
596 } ClAmsSUSIExtendedRefT;
610 ClBoolT isRestartable;
638 ClAmsEntityTimerT suAssignmentTimer;
641 ClUint32T instantiateLevel;
643 ClUint32T numDelayAssignments;
649 ClAmsEntityMethodsT entity;
651 ClAmsEntityTimerCallbackT suRestartTimeout;
652 ClAmsEntityTimerCallbackT compRestartTimeout;
653 ClAmsEntityTimerCallbackT suProbationTimeout;
654 ClAmsEntityTimerCallbackT suAssignmentTimeout;
661 ClAmsSUMethodsT methods;
685 ClAmsEntityRefT entityRef;
687 ClAmsHAStateT haState;
688 ClUint32T pendingInvocations;
689 } ClAmsSISUExtendedRefT;
702 ClUint32T standbyAssignmentOrder;
726 ClAmsEntityMethodsT entity;
733 ClAmsSIMethodsT methods;
742 ClAmsEntityRefT entityRef;
743 ClAmsHAStateT haState;
744 ClAmsCSITransitionDescriptorT tdescriptor;
747 ClAmsEntityT *activeComp;
761 ClTimeT proxiedCompInstantiate;
764 } ClAmsCompTimerDurationsT;
768 ClAmsEntityTimerT instantiate;
769 ClAmsEntityTimerT terminate;
770 ClAmsEntityTimerT cleanup;
771 ClAmsEntityTimerT amStart;
772 ClAmsEntityTimerT amStop;
773 ClAmsEntityTimerT quiescingComplete;
774 ClAmsEntityTimerT csiSet;
775 ClAmsEntityTimerT csiRemove;
776 ClAmsEntityTimerT proxiedCompInstantiate;
777 ClAmsEntityTimerT proxiedCompCleanup;
778 ClAmsEntityTimerT instantiateDelay;
796 ClUint32T numMaxInstantiateWithDelay;
832 ClUint64T instantiateCookie;
843 ClAmsEntityMethodsT entity;
845 ClAmsEntityTimerCallbackT instantiateTimeout;
846 ClAmsEntityTimerCallbackT terminateTimeout;
847 ClAmsEntityTimerCallbackT cleanupTimeout;
848 ClAmsEntityTimerCallbackT amStartTimeout;
849 ClAmsEntityTimerCallbackT amStopTimeout;
850 ClAmsEntityTimerCallbackT quiescingCompleteTimeout;
851 ClAmsEntityTimerCallbackT csiSetTimeout;
852 ClAmsEntityTimerCallbackT csiRemoveTimeout;
853 ClAmsEntityTimerCallbackT proxiedCompInstantiateTimeout;
854 ClAmsEntityTimerCallbackT proxiedCompCleanupTimeout;
855 ClAmsEntityTimerCallbackT instantiateDelayTimeout;
862 ClAmsCompMethodsT methods;
865 typedef ClAmsCompT VDECL_VER(ClAmsCompT, 5, 1, 0);
877 ClAmsEntityRefT entityRef;
878 ClAmsHAStateT haState;
886 ClAmsPGTrackFlagT trackFlags;
888 } ClAmsCSIPGTrackClientT;
918 ClAmsEntityListT csiDependentsList;
919 ClAmsEntityListT csiDependenciesList;
934 ClAmsEntityMethodsT entity;
941 ClAmsCSIMethodsT methods;
944 typedef struct ClAmsSUReassignOp
950 typedef struct ClAmsSIReassignEntry
954 }ClAmsSIReassignEntryT;
956 #define CL_AMS_TIMER_CONVERT(x,y) \
958 (y).tsSec = (x) / 1000; \
959 (y).tsMilliSec = (x) % 1000; \
966 #define AMS_VALIDATE_ADMINSTATE(x) \
968 if ( ((x)->config.adminState < 1) || \
969 ((x)->config.adminState > 4) ) \
971 AMS_LOG(CL_DEBUG_ERROR, \
972 ("Entity[%s] fails adminState validation.\n", \
973 (x)->config.entity.name.value)); \
974 return CL_AMS_ERR_INVALID_ENTITY; \
978 #define AMS_VALIDATE_OPERSTATE(x) \
980 if ( ((x)->status.operState < 1) || \
981 ((x)->status.operState > 2) ) \
983 AMS_LOG(CL_DEBUG_ERROR, \
984 ("Entity[%s] fails operState validation.\n", \
985 (x)->config.entity.name.value)); \
989 #define AMS_VALIDATE_PRESENCESTATE(x) \
991 if ( ((x)->status.presenceState < 1) || \
992 ((x)->status.presenceState > 10) ) \
994 AMS_LOG(CL_DEBUG_ERROR, \
995 ("Entity[%s] fails presenceState validation.\n", \
996 (x)->config.entity.name.value)); \
1000 #define AMS_VALIDATE_READINESSSTATE(x) \
1002 if ( ((x)->status.readinessState < 1) || \
1003 ((x)->status.readinessState > 10) ) \
1005 AMS_LOG(CL_DEBUG_ERROR, \
1006 ("Entity[%s] fails readinessState validation.\n", \
1007 (x)->config.entity.name.value)); \
1011 #define AMS_VALIDATE_NODE_CLASS_TYPE(x) \
1013 if ( ((x)->config.classType) < CL_AMS_NODE_CLASS_NONE || \
1014 ((x)->config.classType) > CL_AMS_NODE_CLASS_D ) \
1016 AMS_LOG(CL_DEBUG_ERROR, \
1017 ("Entity[%s] fails node class type validation.\n", \
1018 (x)->config.entity.name.value)); \
1019 return CL_AMS_ERR_INVALID_ENTITY; \
1023 #define AMS_VALIDATE_COMP_CAPABILITY_MODEL(x) \
1025 if ( ((x)->config.capabilityModel < \
1026 CL_AMS_COMP_CAP_X_ACTIVE_AND_Y_STANDBY) || \
1027 ((x)->config.capabilityModel > \
1028 CL_AMS_COMP_CAP_NON_PREINSTANTIABLE) ) \
1030 AMS_LOG(CL_DEBUG_ERROR, \
1031 ("Entity[%s] fails comp capability model validation.\n",\
1032 (x)->config.entity.name.value)); \
1033 return CL_AMS_ERR_INVALID_ENTITY; \
1038 #define AMS_VALIDATE_COMP_RECOVERY_ON_ERROR(x) \
1040 if ( ((x)->config.recoveryOnTimeout < \
1041 CL_AMS_RECOVERY_NO_RECOMMENDATION) || \
1042 ((x)->config.recoveryOnTimeout > \
1043 CL_AMS_RECOVERY_SU_RESTART) ) \
1045 AMS_LOG(CL_DEBUG_ERROR, \
1046 ("Entity[%s] fails comp recoveryOnError validation.\n", \
1047 (x)->config.entity.name.value)); \
1048 return CL_AMS_ERR_INVALID_ENTITY; \
1054 #define AMS_VALIDATE_COMP_PROPERTY(x) \
1056 if ( ((x)->config.property < CL_AMS_COMP_PROPERTY_SA_AWARE ) || \
1057 ((x)->config.property > \
1058 CL_AMS_COMP_PROPERTY_NON_PROXIED_NON_PREINSTANTIABLE )) \
1060 AMS_LOG(CL_DEBUG_ERROR, \
1061 ("Entity[%s] fails comp property validation.\n", \
1062 (x)->config.entity.name.value)); \
1063 return CL_AMS_ERR_INVALID_ENTITY; \
1068 #define AMS_VALIDATE_BOOL_VALUE(x) \
1070 if ( ! ( (x) == CL_TRUE || (x) == CL_FALSE) ) \
1072 AMS_LOG(CL_DEBUG_ERROR, \
1073 ("Expecting boolean value, received value %d \n", \
1075 return CL_ERR_INVALID_PARAMETER; \
1079 #define AMS_VALIDATE_RESTART_COUNT(x) do { \
1082 AMS_LOG(CL_DEBUG_ERROR,("Expecting non-zero restart count\n")); \
1083 return CL_ERR_INVALID_PARAMETER; \
1088 #define AMS_VALIDATE_RESTART_DURATION(x) do { \
1091 AMS_LOG(CL_DEBUG_ERROR,("Expecting non-zero restart duration\n")); \
1092 return CL_ERR_INVALID_PARAMETER; \