Hi,

The error reported in error_trace.txt is already fixed in #1818.
So what problem is being solved in this ticket and how to reproduce it.


Thanks,
Praveen


On 24-Jun-16 9:24 AM, Hoang Vo wrote:
>  osaf/libs/agents/saf/ntfa/ntfa.h           |   2 +-
>  osaf/libs/agents/saf/ntfa/ntfa_api.c       |   5 +++--
>  osaf/libs/agents/saf/ntfa/ntfa_util.c      |   4 +++-
>  osaf/libs/common/ntfsv/include/ntfsv_msg.h |   1 +
>  osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc   |  12 ++++++++----
>  osaf/services/saf/ntfsv/ntfs/ntfs_com.c    |   4 ++--
>  osaf/services/saf/ntfsv/ntfs/ntfs_evt.c    |   7 +++++--
>  osaf/services/saf/ntfsv/ntfs/ntfs_mds.c    |   2 +-
>  8 files changed, 24 insertions(+), 13 deletions(-)
>
>
> This patch fix the problem: mds_dn event doesn't mean that mds_dest is not 
> used now so ntfs server could not use this event to clean up client list.
> Fixing actions:
> Do not clean up client list when receive mds_dn
> Clean up part of client list when receive initialize
> Clean up part of client list when cannot actively send message to client
>
> diff --git a/osaf/libs/agents/saf/ntfa/ntfa.h 
> b/osaf/libs/agents/saf/ntfa/ntfa.h
> --- a/osaf/libs/agents/saf/ntfa/ntfa.h
> +++ b/osaf/libs/agents/saf/ntfa/ntfa.h
> @@ -166,7 +166,7 @@ extern uint32_t ntfa_mds_msg_async_send(
>  extern void ntfsv_ntfa_evt_free(struct ntfsv_msg *);
>
>  /* ntfa_init.c */
> -extern unsigned int ntfa_startup(void);
> +extern unsigned int ntfa_startup(uint32_t* use_count);
>  extern unsigned int ntfa_shutdown(bool forced);
>
>  /* ntfa_hdl.c */
> 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
> @@ -1212,7 +1212,7 @@ SaAisErrorT saNtfInitialize(SaNtfHandleT
>       ntfa_client_hdl_rec_t *ntfa_hdl_rec;
>       ntfsv_msg_t i_msg, *o_msg = NULL;
>       SaAisErrorT rc;
> -     uint32_t client_id, mds_rc;
> +     uint32_t client_id, mds_rc, use_count;
>
>       TRACE_ENTER();
>
> @@ -1222,7 +1222,7 @@ SaAisErrorT saNtfInitialize(SaNtfHandleT
>               goto done;
>       }
>
> -     if ((rc = ntfa_startup()) != NCSCC_RC_SUCCESS) {
> +     if ((rc = ntfa_startup(&use_count)) != NCSCC_RC_SUCCESS) {
>               TRACE("ntfa_startup FAILED");
>               rc = SA_AIS_ERR_LIBRARY;
>               goto done;
> @@ -1257,6 +1257,7 @@ SaAisErrorT saNtfInitialize(SaNtfHandleT
>       i_msg.type = NTFSV_NTFA_API_MSG;
>       i_msg.info.api_info.type = NTFSV_INITIALIZE_REQ;
>       i_msg.info.api_info.param.init.version = *version;
> +     i_msg.info.api_info.param.init.count = use_count;
>
>       /* Send a message to NTFS to obtain a client_id/server ref id which is 
> cluster
>        * wide unique.
> diff --git a/osaf/libs/agents/saf/ntfa/ntfa_util.c 
> b/osaf/libs/agents/saf/ntfa/ntfa_util.c
> --- a/osaf/libs/agents/saf/ntfa/ntfa_util.c
> +++ b/osaf/libs/agents/saf/ntfa/ntfa_util.c
> @@ -598,7 +598,7 @@ static uint32_t ntfa_hdl_cbk_dispatch_bl
>   *
>   * @return unsigned int
>   */
> -unsigned int ntfa_startup(void)
> +unsigned int ntfa_startup(uint32_t* use_count)
>  {
>       unsigned int rc = NCSCC_RC_SUCCESS;
>       pthread_mutex_lock(&ntfa_lock);
> @@ -607,6 +607,7 @@ unsigned int ntfa_startup(void)
>       if (ntfa_use_count > 0) {
>               /* Already created, just increment the use_count */
>               ntfa_use_count++;
> +             *use_count = ntfa_use_count;
>               goto done;
>       } else {
>               if ((rc = ncs_agents_startup()) != NCSCC_RC_SUCCESS) {
> @@ -619,6 +620,7 @@ unsigned int ntfa_startup(void)
>                       goto done;
>               } else
>                       ntfa_use_count = 1;
> +                     *use_count = ntfa_use_count;
>       }
>
>   done:
> diff --git a/osaf/libs/common/ntfsv/include/ntfsv_msg.h 
> b/osaf/libs/common/ntfsv/include/ntfsv_msg.h
> --- a/osaf/libs/common/ntfsv/include/ntfsv_msg.h
> +++ b/osaf/libs/common/ntfsv/include/ntfsv_msg.h
> @@ -127,6 +127,7 @@ as mentioned in LOGSV PR doc Section 3.5
>
>       typedef struct {
>               SaVersionT version;
> +             uint32_t count;
>       } ntfsv_initialize_req_t;
>
>       typedef struct {
> diff --git a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc 
> b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> --- a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> +++ b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
> @@ -515,8 +515,7 @@ void NtfAdmin::clientRemoveMDS(MDS_DEST
>                       {
>                               clientRemoved(client->getClientId());
>                               found = true;
> -                             /* avoid continue iterate after erase */
> -                             break;
> +                             /* continue iterate after erase when there are 
> clients use same MDS */
>                       }
>               }
>       } while (found);
> @@ -1024,8 +1023,13 @@ uint32_t NtfAdmin::send_cluster_membersh
>               mds_dest = client->getMdsDest();
>               NODE_ID tmp_node_id = m_NTFS_GET_NODE_ID_FROM_ADEST(mds_dest);
>               //Do not send to A11 client.
> -             if ((tmp_node_id == node_id) && (client->IsA11Client() == 
> false))
> -                     rc = send_clm_node_status_lib(cluster_change, 
> client_id, mds_dest);     
> +             if ((tmp_node_id == node_id) && (client->IsA11Client() == 
> false)) {
> +                     rc = send_clm_node_status_lib(cluster_change, 
> client_id, mds_dest);
> +                     // Clean up client list
> +                     if (rc == NCSCC_RC_FAILURE) {
> +                             clientRemoved(client_id);
> +                     }
> +             }
>       }
>       TRACE_LEAVE();
>          return rc;
> diff --git a/osaf/services/saf/ntfsv/ntfs/ntfs_com.c 
> b/osaf/services/saf/ntfsv/ntfs/ntfs_com.c
> --- a/osaf/services/saf/ntfsv/ntfs/ntfs_com.c
> +++ b/osaf/services/saf/ntfsv/ntfs/ntfs_com.c
> @@ -305,7 +305,7 @@ int send_notification_lib(ntfsv_send_not
>                              MDS_SEND_PRIORITY_HIGH);
>       if (rc != NCSCC_RC_SUCCESS) {
>               discarded = NTFS_NOTIFICATION_DISCARDED;
> -             LOG_ER("ntfs_mds_msg_send to ntfa failed rc: %d", (int)rc);
> +             TRACE("ntfs_mds_msg_send to ntfa failed rc: %d", (int)rc);
>       }
>       /* Allways confirm if not success notification will be put in discarded 
> list. */
>       notificationSentConfirmed(client_id, dispatchInfo->subscriptionId, 
> *header->notificationId, discarded);
> @@ -539,7 +539,7 @@ uint32_t send_clm_node_status_lib(SaClmC
>       msg.info.cbk_info.param.clm_node_status_cbk.clm_node_status = 
> cluster_change;
>       rc = ntfs_mds_msg_send(ntfs_cb, &msg, &mdsDest, NULL, 
> MDS_SEND_PRIORITY_HIGH);
>       if (rc != NCSCC_RC_SUCCESS) {
> -             LOG_ER("ntfs_mds_msg_send to ntfa failed rc: %d", (int)rc);
> +             TRACE("ntfs_mds_msg_send to ntfa failed rc: %d", (int)rc);
>       }
>
>       TRACE_LEAVE();
> diff --git a/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c 
> b/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c
> --- a/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c
> +++ b/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c
> @@ -104,8 +104,8 @@ static uint32_t proc_ntfa_updn_mds_msg(n
>       case NTFSV_NTFS_EVT_NTFA_UP:
>               break;
>       case NTFSV_NTFS_EVT_NTFA_DOWN:
> -             /* Remove this NTFA entry from our processing lists */
> -             clientRemoveMDS(evt->fr_dest);
> +             /* Do nothing when this event occur, MDS might be unsed again */
> +             /* Keep it there for future use */
>               break;
>       default:
>               TRACE("Unknown evt type!!!");
> @@ -280,6 +280,9 @@ static uint32_t proc_initialize_msg(ntfs
>               client_added_res_lib(ais_rc, 0, evt->fr_dest, &evt->mds_ctxt, 
> version);
>               goto done;
>       }
> +     if (evt->info.msg.info.api_info.param.init.count == 1) {
> +             clientRemoveMDS(evt->fr_dest);
> +     }
>       clientAdded(0, evt->fr_dest, &evt->mds_ctxt, version);
>
>   done:
> diff --git a/osaf/services/saf/ntfsv/ntfs/ntfs_mds.c 
> b/osaf/services/saf/ntfsv/ntfs/ntfs_mds.c
> --- a/osaf/services/saf/ntfsv/ntfs/ntfs_mds.c
> +++ b/osaf/services/saf/ntfsv/ntfs/ntfs_mds.c
> @@ -1287,7 +1287,7 @@ uint32_t ntfs_mds_msg_send(ntfs_cb_t *cb
>       /* send the message */
>       rc = ncsmds_api(&mds_info);
>       if (rc != NCSCC_RC_SUCCESS) {
> -             LOG_ER("ntfs_mds_msg_send FAILED");
> +             TRACE("ntfs_mds_msg_send FAILED");
>       }
>       return rc;
>  }
>

------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to