osaf/libs/agents/saf/ntfa/ntfa_api.c |  28 ++++++++++++++++++----------
 1 files changed, 18 insertions(+), 10 deletions(-)


During headless state, OpenSAF may get stopped on payload with NTF app running.
Since OpenSAF is not running on the payload, any A.01.02 NTF client should not 
be served on
this node and this client should not be recovered. After first controller comes 
up, A.01.02
client will not be recovered and application will get SA_AIS_ERR_UNAVAILABLE 
upon which an
app can call saNtfFinalize() for freeing the resources.

diff --git a/osaf/libs/agents/saf/ntfa/ntfa_api.c 
b/osaf/libs/agents/saf/ntfa/ntfa_api.c
--- a/osaf/libs/agents/saf/ntfa/ntfa_api.c
+++ b/osaf/libs/agents/saf/ntfa/ntfa_api.c
@@ -966,7 +966,8 @@ SaAisErrorT reinitializeClient(ntfa_clie
        }
        if ((rc = o_msg->info.api_resp_info.rc) != SA_AIS_OK) {
                TRACE("info.api_resp_info.rc:%u", o_msg->info.api_resp_info.rc);
-               rc = SA_AIS_ERR_BAD_HANDLE;
+               if (rc != SA_AIS_ERR_UNAVAILABLE)
+                       rc = SA_AIS_ERR_BAD_HANDLE;
                goto done;
        }
 
@@ -1033,7 +1034,8 @@ SaAisErrorT recoverReader(ntfa_client_hd
        osafassert(o_msg != NULL);
        if ((rc = o_msg->info.api_resp_info.rc) != SA_AIS_OK) {
                TRACE("o_msg->info.api_resp_info.rc:%u", 
o_msg->info.api_resp_info.rc);
-               rc = SA_AIS_ERR_BAD_HANDLE;
+               if (rc != SA_AIS_ERR_UNAVAILABLE)
+                       rc = SA_AIS_ERR_BAD_HANDLE;
                goto done;
        }
 
@@ -1108,7 +1110,8 @@ SaAisErrorT recoverSubscriber(ntfa_clien
 
        if ((rc = o_msg->info.api_resp_info.rc) != SA_AIS_OK) {
                TRACE("o_msg->info.api_resp_info.rc:%u", 
o_msg->info.api_resp_info.rc);
-               rc = SA_AIS_ERR_BAD_HANDLE;
+               if (rc != SA_AIS_ERR_UNAVAILABLE)
+                       rc = SA_AIS_ERR_BAD_HANDLE;
                goto done;
        }
 
@@ -1437,7 +1440,7 @@ SaAisErrorT saNtfDispatch(SaNtfHandleT n
        if (!hdl_rec->valid) {
                /* recovery */
                if ((rc = recoverClient(hdl_rec)) != SA_AIS_OK) {
-                       if ((rc == SA_AIS_ERR_BAD_HANDLE) || (rc == 
SA_AIS_ERR_UNAVAILABLE)) {
+                       if (rc == SA_AIS_ERR_BAD_HANDLE) {
                                ncshm_give_hdl(ntfHandle);
                                osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) 
== 0);
                                ntfa_hdl_rec_force_del(&ntfa_cb.client_list, 
hdl_rec);
@@ -1445,6 +1448,11 @@ SaAisErrorT saNtfDispatch(SaNtfHandleT n
                                ntfa_shutdown(false);
                                goto done;
                        }
+                       if (rc == SA_AIS_ERR_UNAVAILABLE) {
+                               TRACE("Node not CLM member or stale client");
+                               ncshm_give_hdl(ntfHandle);
+                               goto done;
+                       }
                }
        }
 
@@ -1807,7 +1815,7 @@ SaAisErrorT saNtfNotificationSend(SaNtfN
                if ((rc = recoverClient(client_rec)) != SA_AIS_OK) {
                        ncshm_give_hdl(client_handle);
                        ncshm_give_hdl(notificationHandle);
-                       if ((rc == SA_AIS_ERR_BAD_HANDLE) || (rc == 
SA_AIS_ERR_UNAVAILABLE)) {
+                       if (rc == SA_AIS_ERR_BAD_HANDLE) {
                                osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) 
== 0);
                                ntfa_hdl_rec_force_del(&ntfa_cb.client_list, 
client_rec);
                                
osafassert(pthread_mutex_unlock(&ntfa_cb.cb_lock) == 0);
@@ -2153,7 +2161,7 @@ SaAisErrorT saNtfNotificationSubscribe(c
                if (notificationFilterHandles->alarmFilterHandle)
                        
ncshm_give_hdl(notificationFilterHandles->alarmFilterHandle);
        }
-       if (recovery_failed && ((rc == SA_AIS_ERR_BAD_HANDLE) || (rc == 
SA_AIS_ERR_UNAVAILABLE))) {
+       if (recovery_failed && (rc == SA_AIS_ERR_BAD_HANDLE)) {
                osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) == 0);
                ntfa_hdl_rec_force_del(&ntfa_cb.client_list, client_hdl_rec);
                osafassert(pthread_mutex_unlock(&ntfa_cb.cb_lock) == 0);
@@ -3355,7 +3363,7 @@ SaAisErrorT saNtfNotificationUnsubscribe
 
        if (!client_hdl_rec->valid && getServerState() == NTFA_NTFSV_UP) {
                if ((rc = recoverClient(client_hdl_rec)) != SA_AIS_OK) {
-                       if ((rc == SA_AIS_ERR_BAD_HANDLE) || (rc == 
SA_AIS_ERR_UNAVAILABLE)) {
+                       if (rc == SA_AIS_ERR_BAD_HANDLE) {
                                ncshm_give_hdl(ntfHandle);
                                osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) 
== 0);
                                ntfa_hdl_rec_force_del(&ntfa_cb.client_list, 
client_hdl_rec);
@@ -3517,7 +3525,7 @@ done_give_client_hdl:
        }
 
        ncshm_give_hdl(notificationFilterHandles->alarmFilterHandle);
-       if (recovery_failed && ((rc == SA_AIS_ERR_BAD_HANDLE) || (rc == 
SA_AIS_ERR_UNAVAILABLE))) {
+       if (recovery_failed && (rc == SA_AIS_ERR_BAD_HANDLE)) {
                osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) == 0);
                ntfa_hdl_rec_force_del(&ntfa_cb.client_list, client_hdl_rec);
                osafassert(pthread_mutex_unlock(&ntfa_cb.cb_lock) == 0);
@@ -3621,7 +3629,7 @@ SaAisErrorT saNtfNotificationReadFinaliz
 
        if (!client_hdl_rec->valid && getServerState() == NTFA_NTFSV_UP) {
                if ((rc = recoverClient(client_hdl_rec)) != SA_AIS_OK) {
-                       if ((rc == SA_AIS_ERR_BAD_HANDLE) || (rc == 
SA_AIS_ERR_UNAVAILABLE)) {
+                       if (rc == SA_AIS_ERR_BAD_HANDLE) {
                                ncshm_give_hdl(client_hdl_rec->local_hdl);
                                ncshm_give_hdl(readhandle);
                                osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) 
== 0);
@@ -3699,7 +3707,7 @@ SaAisErrorT saNtfNotificationReadNext(Sa
                if ((rc = recoverClient(client_hdl_rec)) != SA_AIS_OK) {
                        ncshm_give_hdl(client_hdl_rec->local_hdl);
                        ncshm_give_hdl(readHandle);
-                       if ((rc == SA_AIS_ERR_BAD_HANDLE) || (rc == 
SA_AIS_ERR_UNAVAILABLE)) {
+                       if (rc == SA_AIS_ERR_BAD_HANDLE) {
                                osafassert(pthread_mutex_lock(&ntfa_cb.cb_lock) 
== 0);
                                ntfa_hdl_rec_force_del(&ntfa_cb.client_list, 
client_hdl_rec);
                                
osafassert(pthread_mutex_unlock(&ntfa_cb.cb_lock) == 0);

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial! http://pubads.g.doubleclick.net/
gampad/clk?id=1444514301&iu=/ca-pub-7940484522588532
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to