This patch allows a component to start before AMF
and poll the saAmfComponetRegister() function.

-Angus

Index: services/amf.c
===================================================================
--- services/amf.c      (revision 1791)
+++ services/amf.c      (working copy)
@@ -1843,7 +1843,16 @@
        struct req_lib_amf_componentregister *req_lib = msg;
        struct amf_comp *comp;
 
-       assert (scsm.state == NORMAL_OPERATION);
+       if ((scsm.state != NORMAL_OPERATION) ||
+               (amf_cluster == NULL)) {
+               struct res_lib_amf_componentregister res_lib;
+               res_lib.header.id = MESSAGE_RES_AMF_COMPONENTREGISTER;
+               res_lib.header.size = sizeof (struct 
res_lib_amf_componentregister);
+               res_lib.header.error = SA_AIS_ERR_TRY_AGAIN;
+               openais_conn_send_response (
+                       conn, &res_lib, sizeof (struct 
res_lib_amf_componentregister));
+               return;
+       }
 
        comp = amf_comp_find (amf_cluster, &req_lib->compName);
        if (comp) {
@@ -2243,7 +2252,16 @@
        amf_comp_t *reporting_comp;
        SaNameT reporting_comp_name;
 
-       assert (scsm.state == NORMAL_OPERATION);
+       if ((scsm.state != NORMAL_OPERATION) ||
+               (amf_cluster == NULL)) {
+               struct res_lib_amf_componentregister res_lib;
+               res_lib.header.id = MESSAGE_RES_AMF_COMPONENTREGISTER;
+               res_lib.header.size = sizeof (struct 
res_lib_amf_componentregister);
+               res_lib.header.error = SA_AIS_ERR_TRY_AGAIN;
+               openais_conn_send_response (
+                       conn, &res_lib, sizeof (struct 
res_lib_amf_componentregister));
+               return;
+       }
 
        comp = amf_comp_find (amf_cluster, &req_lib->erroneousComponent);
        reporting_comp = amf_comp_find_from_conn_info (conn);
Index: services/amfcomp.c
===================================================================
--- services/amfcomp.c  (revision 1791)
+++ services/amfcomp.c  (working copy)
@@ -1267,6 +1267,9 @@
                case SA_AMF_PRESENCE_RESTARTING:
                        comp_presence_state_set (comp, 
SA_AMF_PRESENCE_INSTANTIATED);
                        break;
+               case SA_AMF_PRESENCE_UNINSTANTIATED:
+                       /* wait until amf thinks it's instantitating */
+                       return SA_AIS_ERR_TRY_AGAIN;
                case SA_AMF_PRESENCE_INSTANTIATING:
                        amf_comp_operational_state_set (comp, 
SA_AMF_OPERATIONAL_ENABLED);
                        comp_presence_state_set (comp, 
SA_AMF_PRESENCE_INSTANTIATED);
@@ -1279,9 +1282,7 @@
                                comp->saAmfCompPresenceState);
                        assert (0);
                        break;
-
        }
-
        return SA_AIS_OK;
 }
 

_______________________________________________
Openais mailing list
Openais@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to