osaf/services/saf/amf/amfnd/di.cc             |  36 +++++++++++++++++++++++++
 osaf/services/saf/amf/amfnd/include/avnd_di.h |   1 +
 osaf/services/saf/amf/amfnd/verify.cc         |  38 +--------------------------
 3 files changed, 38 insertions(+), 37 deletions(-)


If SC comes back from headless, currently protection group information
will be lost at amfd.

Patch moves the function for resending protection group for failover into
di.cc for common usage, then reuses this function to recover pg from headless

diff --git a/osaf/services/saf/amf/amfnd/di.cc 
b/osaf/services/saf/amf/amfnd/di.cc
--- a/osaf/services/saf/amf/amfnd/di.cc
+++ b/osaf/services/saf/amf/amfnd/di.cc
@@ -1260,6 +1260,8 @@ void avnd_diq_rec_del(AVND_CB *cb, AVND_
                                avnd_diq_rec_send(cb, pending_rec);
                        }
                }
+               /* resend pg start track */
+               avnd_di_resend_pg_start_track(cb);
        }
 
        /* free the avnd message contents */
@@ -1459,6 +1461,40 @@ uint32_t avnd_evt_avd_role_change_evh(AV
        return rc;
 }
 
+/****************************************************************************
+  Name          : avnd_di_resend_pg_start_track
+
+  Description   : This routing will get called on AVD fail-over or coming back
+                  from headless to send the PG start messages to the new AVD.
+
+  Arguments     : cb  - ptr to the AvND control block
+
+  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
+
+  Notes         : None.
+******************************************************************************/
+uint32_t avnd_di_resend_pg_start_track(AVND_CB *cb)
+{
+       uint32_t rc = NCSCC_RC_SUCCESS;
+       AVND_PG *pg = 0;
+       SaNameT csi_name;
+       TRACE_ENTER();
+
+       memset(&csi_name, '\0', sizeof(SaNameT));
+
+       while (nullptr != (pg = m_AVND_PGDB_REC_GET_NEXT(cb->pgdb, csi_name))) {
+               rc = avnd_di_pg_act_send(cb, &pg->csi_name, 
AVSV_PG_TRACK_ACT_START, true);
+
+               if (NCSCC_RC_SUCCESS != rc)
+                       break;
+
+               csi_name = pg->csi_name;
+       }
+
+       TRACE_LEAVE();
+       return rc;
+}
+
 /**
  * The SC absence timer expired. Reboot this node.
  * @param cb
diff --git a/osaf/services/saf/amf/amfnd/include/avnd_di.h 
b/osaf/services/saf/amf/amfnd/include/avnd_di.h
--- a/osaf/services/saf/amf/amfnd/include/avnd_di.h
+++ b/osaf/services/saf/amf/amfnd/include/avnd_di.h
@@ -83,6 +83,7 @@ uint32_t avnd_diq_rec_send(struct avnd_c
 uint32_t avnd_di_reg_su_rsp_snd(struct avnd_cb_tag *cb, SaNameT *su_name, 
uint32_t ret_code);
 uint32_t avnd_di_ack_nack_msg_send(struct avnd_cb_tag *cb, uint32_t rcv_id, 
uint32_t view_num);
 extern void avnd_di_uns32_upd_send(int class_id, int attr_id, const SaNameT 
*dn, uint32_t value);
+extern uint32_t avnd_di_resend_pg_start_track(struct avnd_cb_tag *);
 void avnd_sync_sisu(struct avnd_cb_tag *cb);
 void avnd_sync_csicomp(struct avnd_cb_tag *cb);
 
diff --git a/osaf/services/saf/amf/amfnd/verify.cc 
b/osaf/services/saf/amf/amfnd/verify.cc
--- a/osaf/services/saf/amf/amfnd/verify.cc
+++ b/osaf/services/saf/amf/amfnd/verify.cc
@@ -34,42 +34,6 @@
 
 #include "avnd.h"
 
-static uint32_t avnd_send_pg_start_on_fover(AVND_CB *cb);
-
-/****************************************************************************
-  Name          : avnd_send_pg_start_on_fover
- 
-  Description   : This routing will get called on AVD fail-over to send the
-                  PG start messages to the new AVD.
- 
-  Arguments     : cb  - ptr to the AvND control block
- 
-  Return Values : NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
- 
-  Notes         : None.
-******************************************************************************/
-static uint32_t avnd_send_pg_start_on_fover(AVND_CB *cb)
-{
-       uint32_t rc = NCSCC_RC_SUCCESS;
-       AVND_PG *pg = 0;
-       SaNameT csi_name;
-       TRACE_ENTER();
-
-       memset(&csi_name, '\0', sizeof(SaNameT));
-
-       while (nullptr != (pg = m_AVND_PGDB_REC_GET_NEXT(cb->pgdb, csi_name))) {
-               rc = avnd_di_pg_act_send(cb, &pg->csi_name, 
AVSV_PG_TRACK_ACT_START, true);
-
-               if (NCSCC_RC_SUCCESS != rc)
-                       break;
-
-               csi_name = pg->csi_name;
-       }
-
-       TRACE_LEAVE();
-       return rc;
-}
-
 /****************************************************************************
   Name          : avnd_evt_avd_verify_message
  
@@ -173,7 +137,7 @@ uint32_t avnd_evt_avd_verify_evh(AVND_CB
        /* 
         * Send PG tracking (START) message to new Active.
         */
-       avnd_send_pg_start_on_fover(cb);
+       avnd_di_resend_pg_start_track(cb);
 
 
        TRACE_LEAVE();

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to