I think the following condition should not be added inside clms_send_track().
   if ((node_id != node->node_id) && (node->admin_op == 0)){

Better not to change common area code, because the above condition may not work 
when admin operations are in progress.
The decision to not send track should be made outside of the function or by 
other means instead of relying on admin_op variable.

Thanks,
Ramesh.

On 9/25/2014 12:56 AM, mathi.naic...@oracle.com wrote:
>   osaf/services/saf/clmsv/clms/clms_imm.c |  25 +++++++++++++++++++++----
>   1 files changed, 21 insertions(+), 4 deletions(-)
>
>
> It is possible that when a payload that goes down during controller failover, 
> can reboot and come back fast.
> As a part of failover processing, it is possible that the agent downs for 
> these nodes reach the new ACTIVE
> before node down events. In this scenario, when sending a track callback with 
> COMPLETED step, we need
> to check whether the track is for an agent that is on a node for which we 
> have received node downevent.
> And if so, don't send track for any clm agent(subscriber) on that node.
>
> diff --git a/osaf/services/saf/clmsv/clms/clms_imm.c 
> b/osaf/services/saf/clmsv/clms/clms_imm.c
> --- a/osaf/services/saf/clmsv/clms/clms_imm.c
> +++ b/osaf/services/saf/clmsv/clms/clms_imm.c
> @@ -1036,17 +1036,34 @@ void clms_send_track(CLMS_CB * cb, CLMS_
>                                               /*Implies the change is on this 
> local node */
>                                               rc = 
> clms_send_track_local(node,rec,SA_CLM_CHANGE_COMPLETED);
>                                       }
> -                             } else
> -                                     rc = clms_prep_and_send_track(cb, node, 
> rec, SA_CLM_CHANGE_COMPLETED,
> +                             } else {
> +                                     /* In the COMPLETED step and when there 
> is no admin op in progress,
> +                                      * we shouldn't send track to the same 
> node that left the cluster.
> +                                      * Because, this node would have 
> rebooted and come back so quick and
> +                                      * the subscriber would have come back 
> with the same address.
> +                                      * We may not yet have recieved the 
> service down of the agents on this node.
> +                                      */
> +                                     if ((node_id != node->node_id) && 
> (node->admin_op == 0)){
> +                                             rc = 
> clms_prep_and_send_track(cb, node, rec, SA_CLM_CHANGE_COMPLETED,
>                                                             
> notify_changes_only);
> +                                     }
> +                             }
>                       }else if (rec->track_flags & SA_TRACK_CHANGES){
>                               if(rec->track_flags & SA_TRACK_LOCAL){
>                                       if(node_id == node->node_id){
>                                               /*Implies the change is on this 
> local node */
>                                               rc = 
> clms_send_track_local(node,rec,SA_CLM_CHANGE_COMPLETED);
>                                       }
> -                             } else
> -                                     rc = clms_prep_and_send_track(cb, node, 
> rec, SA_CLM_CHANGE_COMPLETED, notify_changes);
> +                             } else {
> +                                     /* In the COMPLETED step and when there 
> is no admin op in progress,
> +                                      * we shouldn't send track to the same 
> node that left the cluster.
> +                                      * Because, this node would have 
> rebooted and come back so quick and
> +                                      * the subscriber would have come back 
> with the same address.
> +                                      * We may not yet have recieved the 
> service down of the agents on this node.
> +                                      */
> +                                     if ((node_id != node->node_id) && 
> (node->admin_op == 0))
> +                                             rc = 
> clms_prep_and_send_track(cb, node, rec, SA_CLM_CHANGE_COMPLETED, 
> notify_changes);
> +                             }
>                       }
>   
>                       if (rc != NCSCC_RC_SUCCESS) {


------------------------------------------------------------------------------
Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer
Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports
Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper
Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer
http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to