Dear Mahesh,

I have just submitted the V3 patch fixing source code following your
comment.
I also update readme file that is attached to this email.
Please tell me if you have any further inquiry.

Thank you and best regards,
Hoang

-----Original Message-----
From: A V Mahesh [mailto:mahesh.va...@oracle.com] 
Sent: Friday, July 29, 2016 1:27 PM
To: Vo Minh Hoang <hoang.m...@dektech.com.au>
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [PATCH 6 of 8] cpsv: Apply new messages supporting extended
SaNameT to CPD, CPND, and CPA v1 [#1574]

Hi ,

I have proved some code related minor comment in 4 of 8 , 6 of 8 & 8 of
8 , please  address them also in new patch(s).

Reading testing :

On 7/29/2016 7:49 AM, Vo Minh Hoang wrote:
> We do not have specific test case and environment for in-service update.
> So my test work is based on osaftest cases.
>
> I tested with old d - new nd and new d - old nd cases.

I started basic testing with  one new Controller  & one old Controller and
tow Old payload setup.
I observed some encode/decode issue  by running simple  ` /usr/bin/ckpttest`

Even I was not able to proceed with other testing which not related to LONG
DN)( continuously receiving SA_AIS_ERR_TRY_AGAIN) Please re-visit the all
encode & decode function that you have introduced run  the basic testing
with the above setup running application on ( old nodes/application  and new
nodes/application )

traces On Old Node ( with out patch )

============================================================================
====================

Jul 29 11:34:16 SC-2 osafckptnd[5233]: ER cpnd mds decode failed Jul 29
11:34:16 SC-2 osafckptnd[5233]: ER cpnd mds decode failed Jul 29 11:34:26
SC-2 osafckptnd[5233]: ER cpnd mds decode failed Jul 29 11:34:27 SC-2
osafckptnd[5233]: ER cpnd mds decode failed Jul 29 11:34:27 SC-2
osafckptnd[5233]: ER cpnd mds decode failed

============================================================================
======================

Jul 29 11:34:04.216980 osafckptnd [5233:cpnd_mds.c:0225] >>
cpnd_mds_callback Jul 29 11:34:04.217086 osafckptnd [5233:cpnd_mds.c:0267]
<< cpnd_mds_callback Jul 29 11:34:04.217100 osafckptnd
[5233:cpnd_mds.c:0225] >> cpnd_mds_callback Jul 29 11:34:04.217129
osafckptnd [5233:cpnd_mds.c:0729] << cpnd_mds_rcv Jul 29 11:34:04.217175
osafckptnd [5233:cpnd_mds.c:0267] << cpnd_mds_callback Jul 29
11:34:04.217240 osafckptnd [5233:cpsv_evt.c:2219] TR cpnd <<== [9]
CPSV_EVT_ND2ND_CKPT_SECT_CREATE_REQ(sec_id=0x0B15) from node 0x2010F Jul 29
11:34:04.217254 osafckptnd [5233:cpnd_evt.c:2626] >>
cpnd_evt_proc_nd2nd_ckpt_sect_create
Jul 29 11:34:04.217264 osafckptnd [5233:cpnd_evt.c:2632] T4 cpnd ckpt node
get failed for ckpt_id:9 Jul 29 11:34:04.217272 osafckptnd
[5233:cpnd_mds.c:1004] >> cpnd_mds_send_rsp Jul 29 11:34:04.217282
osafckptnd [5233:cpsv_evt.c:2213] TR cpnd ==>> [0]
CPSV_EVT_ND2ND_CKPT_SECT_ACTIVE_CREATE_RSP(err=6) to node 0x2010F Jul 29
11:34:04.217301 osafckptnd [5233:cpnd_mds.c:0225] >> cpnd_mds_callback Jul
29 11:34:04.217310 osafckptnd [5233:cpnd_mds.c:0291] >> cpnd_mds_enc Jul 29
11:34:04.217331 osafckptnd [5233:cpnd_mds.c:0267] << cpnd_mds_callback Jul
29 11:34:04.217464 osafckptnd [5233:cpnd_mds.c:1028] << cpnd_mds_send_rsp
Jul 29 11:34:04.217483 osafckptnd [5233:cpnd_evt.c:2740] <<
cpnd_evt_proc_nd2nd_ckpt_sect_create
Jul 29 11:34:04.217493 osafckptnd [5233:cpnd_evt.c:4433] >> cpnd_evt_destroy
Jul 29 11:34:04.217503 osafckptnd [5233:cpnd_evt.c:4619] << cpnd_evt_destroy
Jul 29 11:34:04.719653 osafckptnd [5233:cpnd_mds.c:0225] >>
cpnd_mds_callback Jul 29 11:34:04.719758 osafckptnd [5233:cpnd_mds.c:0267]
<< cpnd_mds_callback Jul 29 11:34:04.719772 osafckptnd
[5233:cpnd_mds.c:0225] >> cpnd_mds_callback Jul 29 11:34:04.719801
osafckptnd [5233:cpnd_mds.c:0729] << cpnd_mds_rcv Jul 29 11:34:04.719812
osafckptnd [5233:cpnd_mds.c:0267] << cpnd_mds_callback

============================================================================
=================

520|0 88 03703659 1 10|
520|0 88 03703659 1 11| SUCCESS       : ckpt with all flags on created
520|0 88 03703659 1 12| Return Value  : SA_AIS_OK
520|0 88 03703659 1 13|
520|0 88 03703659 1 14| SUCCESS       : Unlinked ckpt all replica
520|0 88 03703659 1 15| Return Value  : SA_AIS_OK
520|0 88 03703659 1 16|
520|0 88 03703659 1 17| FAILED        : Section 11 created in ckpt
520|0 88 03703659 1 18| Return Value  : SA_AIS_ERR_TRY_AGAIN

============================================================================
=================

-AVM


On 7/29/2016 7:49 AM, Vo Minh Hoang wrote:
> Dear Mahesh,
>
> We do not have specific test case and environment for in-service update.
> So my test work is based on osaftest cases.
>
> I tested with old d - new nd and new d - old nd cases.
> There are failed test cases but after investigating, they are 
> intensional when old one cannot recognize new message.
> The only problem found is record to ticket #1922 and it is not related 
> to long DN problem.
>
> Thank you and best regards,
> Hoang
>
> -----Original Message-----
> From: A V Mahesh [mailto:mahesh.va...@oracle.com]
> Sent: Thursday, July 28, 2016 4:04 PM
> To: Hoang Vo <hoang.m...@dektech.com.au>
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: Re: [PATCH 6 of 8] cpsv: Apply new messages supporting 
> extended SaNameT to CPD, CPND, and CPA v1 [#1574]
>
> Hi Hoang,
>
> I just started reviewing please share following :
>
> I hope this Long DN should support In-service upgrade ,  if so,
>
> please share the test case that you run , it will help me in reviewing
>
> and  in test uncovered  use/test cases.
>
> -AVM
>
>
> On 7/21/2016 3:04 PM, Hoang Vo wrote:
>>    osaf/libs/agents/saf/cpa/cpa_api.c      |  12 +++++++++---
>>    osaf/libs/agents/saf/cpa/cpa_mds.c      |   2 +-
>>    osaf/libs/common/cpsv/cpsv_evt.c        |   1 +
>>    osaf/services/saf/cpsv/cpd/cpd_evt.c    |  10 +++++++---
>>    osaf/services/saf/cpsv/cpd/cpd_mds.c    |   3 ++-
>>    osaf/services/saf/cpsv/cpd/cpd_proc.c   |   2 +-
>>    osaf/services/saf/cpsv/cpnd/cpnd_evt.c  |  26
++++++++++++++++----------
>>    osaf/services/saf/cpsv/cpnd/cpnd_mds.c  |   4 ++--
>>    osaf/services/saf/cpsv/cpnd/cpnd_proc.c |   6 +++---
>>    9 files changed, 42 insertions(+), 24 deletions(-)
>>
>>
>> diff --git a/osaf/libs/agents/saf/cpa/cpa_api.c
>> b/osaf/libs/agents/saf/cpa/cpa_api.c
>> --- a/osaf/libs/agents/saf/cpa/cpa_api.c
>> +++ b/osaf/libs/agents/saf/cpa/cpa_api.c
>> @@ -880,6 +880,8 @@ SaAisErrorT saCkptCheckpointOpen(SaCkptH
>>      }
>>    
>>      ckpt_name = osaf_extended_name_borrow(checkpointName);
>> +    if (strlen(ckpt_name) >= kOsafMaxDnLength)
>> +            return SA_AIS_ERR_INVALID_PARAM;
>>    
>>      /* SA_AIS_ERR_INVALID_PARAM, bullet 4 in SAI-AIS-CKPT-B.02.02
>>               Section 3.6.1 saCkptCheckpointOpen() and 
>> saCkptCheckpointOpenAsync(), Return Values */ @@ -981,7 +983,7 @@
> SaAisErrorT saCkptCheckpointOpen(SaCkptH
>>      /* Populate & Send the Open Event to CPND */
>>      memset(&evt, 0, sizeof(CPSV_EVT));
>>      evt.type = CPSV_EVT_TYPE_CPND;
>> -    evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_OPEN;
>> +    evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_OPEN_2;
>>      evt.info.cpnd.info.openReq.client_hdl = ckptHandle;
>>      evt.info.cpnd.info.openReq.lcl_ckpt_hdl = lc_node->lcl_ckpt_hdl;
>>    
>> @@ -1192,6 +1194,8 @@ SaAisErrorT saCkptCheckpointOpenAsync(Sa
>>      }
>>    
>>      ckpt_name = osaf_extended_name_borrow(checkpointName);
>> +    if (strlen(ckpt_name) >= kOsafMaxDnLength)
>> +            return SA_AIS_ERR_INVALID_PARAM;
>>    
>>      /* SA_AIS_ERR_INVALID_PARAM, bullet 4 in SAI-AIS-CKPT-B.02.02
>>               Section 3.6.1 saCkptCheckpointOpen() and 
>> saCkptCheckpointOpenAsync(), Return Values */ @@ -1277,7 +1281,7 @@
> SaAisErrorT saCkptCheckpointOpenAsync(Sa
>>      /* Populate & Send the Open Event to CPND */
>>      memset(&evt, 0, sizeof(CPSV_EVT));
>>      evt.type = CPSV_EVT_TYPE_CPND;
>> -    evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_OPEN;
>> +    evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_OPEN_2;
>>      evt.info.cpnd.info.openReq.client_hdl = ckptHandle;
>>      evt.info.cpnd.info.openReq.lcl_ckpt_hdl = lc_node->lcl_ckpt_hdl;
>>    
>> @@ -1597,6 +1601,8 @@ SaAisErrorT saCkptCheckpointUnlink(SaCkp
>>      }
>>    
>>      ckpt_name = osaf_extended_name_borrow(checkpointName);
>> +    if (strlen(ckpt_name) >= kOsafMaxDnLength)
>> +            return SA_AIS_ERR_INVALID_PARAM;
>>    
>>      /* retrieve CPA CB */
>>      m_CPA_RETRIEVE_CB(cb);
>> @@ -1635,7 +1641,7 @@ SaAisErrorT saCkptCheckpointUnlink(SaCkp
>>      /* Populate evt.info.cpnd.info.unlinkReq & Call MDS sync Send */
>>      memset(&evt, 0, sizeof(CPSV_EVT));
>>      evt.type = CPSV_EVT_TYPE_CPND;
>> -    evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_UNLINK;
>> +    evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_UNLINK_2;
>>    
>>      osaf_extended_name_lend(ckpt_name,
>> &evt.info.cpnd.info.ulinkReq.ckpt_name);
>>    
>> diff --git a/osaf/libs/agents/saf/cpa/cpa_mds.c
>> b/osaf/libs/agents/saf/cpa/cpa_mds.c
>> --- a/osaf/libs/agents/saf/cpa/cpa_mds.c
>> +++ b/osaf/libs/agents/saf/cpa/cpa_mds.c
>> @@ -515,7 +515,7 @@ static uint32_t cpa_mds_svc_evt(CPA_CB *
>>                 /* Populate & Send the Open Event to CPND */
>>                 memset(&evt, 0, sizeof(CPSV_EVT));
>>                 evt.type = CPSV_EVT_TYPE_CPND;
>> -               evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_LIST_UPDATE;
>> +               evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_LIST_UPDATE_2;
>>                 evt.info.cpnd.info.ckptListUpdate.client_hdl =
> lc_node->cl_hdl;
>>                 osaf_extended_name_lend(lc_node->ckpt_name,
>> &evt.info.cpnd.info.ckptListUpdate.ckpt_name);
>>    
>> diff --git a/osaf/libs/common/cpsv/cpsv_evt.c
>> b/osaf/libs/common/cpsv/cpsv_evt.c
>> --- a/osaf/libs/common/cpsv/cpsv_evt.c
>> +++ b/osaf/libs/common/cpsv/cpsv_evt.c
>> @@ -2414,6 +2414,7 @@ uint32_t cpsv_encode_extended_name(NCS_U
>>      if(!osaf_is_an_extended_name(name))
>>              return NCSCC_RC_SUCCESS;
>>    
>> +    TRACE("length = %d", name->length);
>>      SaConstStringT value = osaf_extended_name_borrow(name);
>>      uint16_t length = osaf_extended_name_length(name);
>>    
>> diff --git a/osaf/services/saf/cpsv/cpd/cpd_evt.c
>> b/osaf/services/saf/cpsv/cpd/cpd_evt.c
>> --- a/osaf/services/saf/cpsv/cpd/cpd_evt.c
>> +++ b/osaf/services/saf/cpsv/cpd/cpd_evt.c
>> @@ -110,6 +110,7 @@ void cpd_process_evt(CPSV_EVT *evt)
>>              (void)cpd_evt_proc_timer_expiry(cb, &evt->info.cpd);
>>              break;
>>      case CPD_EVT_ND2D_CKPT_CREATE:
>> +    case CPD_EVT_ND2D_CKPT_CREATE_2:
>>              (void)cpd_evt_proc_ckpt_create(cb, &evt->info.cpd,
> &evt->sinfo);
>>              break;
>>      case CPD_EVT_ND2D_CKPT_USR_INFO:
>> @@ -119,6 +120,7 @@ void cpd_process_evt(CPSV_EVT *evt)
>>              (void)cpd_evt_proc_ckpt_sec_info_upd(cb, &evt->info.cpd,
> &evt->sinfo);
>>              break;
>>      case CPD_EVT_ND2D_CKPT_UNLINK:
>> +    case CPD_EVT_ND2D_CKPT_UNLINK_2:
>>              (void)cpd_evt_proc_ckpt_unlink(cb, &evt->info.cpd,
> &evt->sinfo);
>>              break;
>>      case CPD_EVT_ND2D_CKPT_RDSET:
>> @@ -131,12 +133,14 @@ void cpd_process_evt(CPSV_EVT *evt)
>>              (void)cpd_evt_proc_ckpt_destroy(cb, &evt->info.cpd,
> &evt->sinfo);
>>              break;
>>      case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME:
>> +    case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME_2:
>>              (void)cpd_evt_proc_ckpt_destroy_byname(cb, &evt->info.cpd,
> &evt->sinfo);
>>              break;
>>      case CPD_EVT_MDS_QUIESCED_ACK_RSP:
>>              (void)cpd_evt_mds_quiesced_ack_rsp(cb, &evt->info.cpd,
> &evt->sinfo);
>>              break;
>>      case CPD_EVT_ND2D_CKPT_INFO_UPDATE:
>> +    case CPD_EVT_ND2D_CKPT_INFO_UPDATE_2:
>>              (void)cpd_evt_proc_ckpt_info_upd(cb, &evt->info.cpd,
> &evt->sinfo);
>>              break;
>>    
>> @@ -1484,15 +1488,15 @@ static uint32_t cpd_evt_proc_mds_evt(CPD
>>    static void cpd_evt_free(CPSV_EVT *evt)
>>    {
>>      switch (evt->info.cpd.type) {
>> -    case CPD_EVT_ND2D_CKPT_CREATE:
>> +    case CPD_EVT_ND2D_CKPT_CREATE_2:
>>              if
> (osaf_is_an_extended_name(&evt->info.cpd.info.ckpt_create.ckpt_name))
>>                      free((void
> *)osaf_extended_name_borrow(&evt->info.cpd.info.ckpt_create.ckpt_name)
> );
>>              break;
>> -    case CPD_EVT_ND2D_CKPT_UNLINK:
>> +    case CPD_EVT_ND2D_CKPT_UNLINK_2:
>>              if
> (osaf_is_an_extended_name(&evt->info.cpd.info.ckpt_ulink.ckpt_name))
>>                      free((void
> *)osaf_extended_name_borrow(&evt->info.cpd.info.ckpt_ulink.ckpt_name))
> ;
>>              break;
>> -    case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME:
>> +    case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME_2:
>>              if
> (osaf_is_an_extended_name(&evt->info.cpd.info.ckpt_destroy_byname.ckpt
> _name)
> )
>>                      free((void
> *)osaf_extended_name_borrow(&evt->info.cpd.info.ckpt_destroy_byname.ck
> pt_nam
> e));
>>              break;
>> diff --git a/osaf/services/saf/cpsv/cpd/cpd_mds.c
>> b/osaf/services/saf/cpsv/cpd/cpd_mds.c
>> --- a/osaf/services/saf/cpsv/cpd/cpd_mds.c
>> +++ b/osaf/services/saf/cpsv/cpd/cpd_mds.c
>> @@ -333,7 +333,7 @@ static uint32_t cpd_mds_enc(CPD_CB *cb,
>>    
>>              if (pevt->type == CPSV_EVT_TYPE_CPND) {
>>                      switch (pevt->info.cpnd.type) {
>> -                    case CPND_EVT_D2ND_CKPT_CREATE:
>> +                    case CPND_EVT_D2ND_CKPT_CREATE_2:
>>    
>>                              pstream = ncs_enc_reserve_space(io_uba, 12);
>>                              if (!pstream)
>> @@ -431,6 +431,7 @@ static uint32_t cpd_mds_dec(CPD_CB *cb,
>>                              return rc;
>>    
>>                      case CPD_EVT_ND2D_CKPT_INFO_UPDATE:
>> +                    case CPD_EVT_ND2D_CKPT_INFO_UPDATE_2:
>>                              ncs_dec_skip_space(dec_info->io_uba, 8);
>>                              rc =
> cpsv_nd2d_ckpt_info_update_decode(&msg_ptr->info.cpd.info.ckpt_info,
> dec_info->io_uba);
>>                              if (rc != NCSCC_RC_SUCCESS) {
>> diff --git a/osaf/services/saf/cpsv/cpd/cpd_proc.c
>> b/osaf/services/saf/cpsv/cpd/cpd_proc.c
>> --- a/osaf/services/saf/cpsv/cpd/cpd_proc.c
>> +++ b/osaf/services/saf/cpsv/cpd/cpd_proc.c
>> @@ -61,7 +61,7 @@ uint32_t cpd_noncolloc_ckpt_rep_create(C
>>      /* Send the Replica create info to CPND */
>>      memset(&send_evt, 0, sizeof(CPSV_EVT));
>>      send_evt.type = CPSV_EVT_TYPE_CPND;
>> -    send_evt.info.cpnd.type = CPND_EVT_D2ND_CKPT_CREATE;
>> +    send_evt.info.cpnd.type = CPND_EVT_D2ND_CKPT_CREATE_2;
>>    
>>      osaf_extended_name_lend(map_info->ckpt_name,
>> &send_evt.info.cpnd.info.ckpt_create.ckpt_name);
>>    
>> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
>> b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
>> --- a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
>> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
>> @@ -200,6 +200,7 @@ void cpnd_process_evt(CPSV_EVT *evt)
>>              break;
>>    
>>      case CPND_EVT_A2ND_CKPT_OPEN:
>> +    case CPND_EVT_A2ND_CKPT_OPEN_2:
>>              (void)cpnd_evt_proc_ckpt_open(cb, &evt->info.cpnd,
> &evt->sinfo);
>>              break;
>>    
>> @@ -208,6 +209,7 @@ void cpnd_process_evt(CPSV_EVT *evt)
>>              break;
>>    
>>      case CPND_EVT_A2ND_CKPT_UNLINK:
>> +    case CPND_EVT_A2ND_CKPT_UNLINK_2:
>>              (void)cpnd_evt_proc_ckpt_unlink(cb, &evt->info.cpnd,
> &evt->sinfo);
>>              break;
>>    
>> @@ -313,6 +315,7 @@ void cpnd_process_evt(CPSV_EVT *evt)
>>    
>>      case CPND_EVT_D2ND_CKPT_CREATE: /* happens for non-collocated and
> received
>>                                                 by CPNDs on SCXB */
>> +    case CPND_EVT_D2ND_CKPT_CREATE_2:
>>              (void)cpnd_evt_proc_ckpt_create(cb, &evt->info.cpnd,
> &evt->sinfo);
>>              break;
>>    
>> @@ -360,6 +363,7 @@ void cpnd_process_evt(CPSV_EVT *evt)
>>              break;
>>    
>>      case CPND_EVT_A2ND_CKPT_LIST_UPDATE:
>> +    case CPND_EVT_A2ND_CKPT_LIST_UPDATE_2:
>>              (void) cpnd_evt_proc_ckpt_ckpt_list_update(cb,
> &evt->info.cpnd, &evt->sinfo);
>>              break;
>>    
>> @@ -708,7 +712,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
>>    
>>      /* ckpt is not present locally */
>>      /* if not present send to cpd,get the details...
>> -       Send the CPD_EVT_ND2D_CKPT_CREATE evt to CPD to get the ckpt
> details
>> +       Send the CPD_EVT_ND2D_CKPT_CREATE_2 evt to CPD to get the ckpt 
>> +details
>>         Fill send_evt.info.cpd.info.ckpt_create */
>>      if (sinfo->stype == MDS_SENDTYPE_SNDRSP) {
>>              timeout =
>> m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(evt->info.openReq.timeout);
>> @@ -718,7 +722,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
>>              timeout = CPSV_WAIT_TIME;
>>    
>>      send_evt.type = CPSV_EVT_TYPE_CPD;
>> -    send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_CREATE;
>> +    send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_CREATE_2;
>>    
>>      osaf_extended_name_lend(ckpt_name,
> &send_evt.info.cpd.info.ckpt_create.ckpt_name);
>>      send_evt.info.cpd.info.ckpt_create.attributes =
>> evt->info.openReq.ckpt_attrib; @@ -743,7 +747,7 @@ static uint32_t
>> cpnd_evt_proc_ckpt_open(
>>    
>>                      memset(node, '\0',
> sizeof(CPND_CPD_DEFERRED_REQ_NODE));
>>                      node->evt.type = CPSV_EVT_TYPE_CPD;
>> -                    node->evt.info.cpd.type =
> CPD_EVT_ND2D_CKPT_DESTROY_BYNAME;
>> +                    node->evt.info.cpd.type =
> CPD_EVT_ND2D_CKPT_DESTROY_BYNAME_2;
>>                      osaf_extended_name_lend(ckpt_name,
>> &node->evt.info.cpd.info.ckpt_destroy_byname.ckpt_name);
>>    
>>                      ncs_enqueue(&cb->cpnd_cpd_deferred_reqs_list, (void
> *)node); @@
>> -1151,7 +1155,7 @@ static uint32_t cpnd_evt_proc_ckpt_unlin
>>      }
>>    
>>      send_evt.type = CPSV_EVT_TYPE_CPD;
>> -    send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_UNLINK;
>> +    send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_UNLINK_2;
>>      send_evt.info.cpd.info.ckpt_ulink.ckpt_name =
>> evt->info.ulinkReq.ckpt_name;
>>    
>>      rc = cpnd_mds_msg_sync_send(cb, NCSMDS_SVC_ID_CPD,
>> cb->cpd_mdest_id, &send_evt, &out_evt, CPSV_WAIT_TIME); @@ -3954,13
> +3958,13 @@ static uint32_t cpnd_proc_cpd_new_active
>>                              TRACE_4("cpnd cpd new active destroy failed
> with error:%d",out_evt->info.cpnd.info.destroy_ack.error);
>>                      }
>>                      break;
>> -            case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME:
>> +            case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME_2:
>>                      if (out_evt &&
> out_evt->info.cpnd.info.destroy_ack.error != SA_AIS_OK) {
>>                              TRACE_4("cpnd cpd new active destroy byname
> failed with error:%d",out_evt->info.cpnd.info.destroy_ack.error);
>>                      }
>>                      break;
>>    
>> -            case CPD_EVT_ND2D_CKPT_UNLINK:
>> +            case CPD_EVT_ND2D_CKPT_UNLINK_2:
>>                      if (out_evt &&
> out_evt->info.cpnd.info.ulink_ack.error != SA_AIS_OK) {
>>                              TRACE_4("cpnd cpd new active unlink failed
> with error:%d",out_evt->info.cpnd.info.ulink_ack.error);
>>                      }
>> @@ -4628,16 +4632,18 @@ uint32_t cpnd_evt_destroy(CPSV_EVT *evt)
>>                      }
>>                      break;
>>              }
>> -    } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_OPEN) {
>> +    } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_OPEN_2) {
>>              if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.openReq.ckpt_name))
>>                      free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.openReq.ckpt_name));
>> -    } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_UNLINK) {
>> +    } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_UNLINK_2) {
>>              if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.ulinkReq.ckpt_name))
>>                      free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.ulinkReq.ckpt_name));
>> -    } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_LIST_UPDATE) {
>> +    } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_LIST_UPDATE_2) 
>> +{
>>              if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.ckptListUpdate.ckpt_nam
> e))
>>                      free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckptListUpdate.ckpt_n
> ame));
>> -    } else if (evt->info.cpnd.type == CPND_EVT_D2ND_CKPT_CREATE) {
>> +    } else if (evt->info.cpnd.type == CPND_EVT_D2ND_CKPT_CREATE_2) {
>> +            if (evt->info.cpnd.info.ckpt_create.ckpt_info.dest_list !=
> NULL)
>> +                    
>> +m_MMGR_FREE_CPSV_SYS_MEMORY(evt->info.cpnd.info.ckpt_create.ckpt_inf
>> +o
>> +.dest_list);
>>              if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.ckpt_create.ckpt_name))
>>                      free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckpt_create.ckpt_name
> ));
>>      }
>> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_mds.c
>> b/osaf/services/saf/cpsv/cpnd/cpnd_mds.c
>> --- a/osaf/services/saf/cpsv/cpnd/cpnd_mds.c
>> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_mds.c
>> @@ -425,7 +425,7 @@ static uint32_t cpnd_mds_enc(CPND_CB *cb
>>                              TRACE_LEAVE();
>>                              return rc;
>>    
>> -                    case CPD_EVT_ND2D_CKPT_INFO_UPDATE:
>> +                    case CPD_EVT_ND2D_CKPT_INFO_UPDATE_2:
>>                              pstream = ncs_enc_reserve_space(io_uba, 8);
>>                              if (!pstream)
>>                                      return
> m_CPSV_DBG_SINK(NCSCC_RC_FAILURE, @@ -593,7 +593,7 @@
>> static uint32_t cpnd_mds_dec(CPND_CB *cb
>>                              rc =
> cpsv_refcnt_ckptid_decode(&msg_ptr->info.cpnd.info.refCntsetReq,dec_in
> fo->io
> _uba);
>>                              goto free;
>>    
>> -                    case CPND_EVT_D2ND_CKPT_CREATE:
>> +                    case CPND_EVT_D2ND_CKPT_CREATE_2:
>>                              ncs_dec_skip_space(dec_info->io_uba, 12);
>>                              rc =
> cpsv_d2nd_ckpt_create_2_decode(&msg_ptr->info.cpnd.info.ckpt_create,
> dec_info->io_uba);
>>                              goto free;
>> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
>> b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
>> --- a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
>> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
>> @@ -2529,7 +2529,7 @@ void cpnd_proc_ckpt_info_update(CPND_CB
>>              LOG_NO("cpnd_proc_update_cpd_data::ckpt_name = %s[%llu]",
> (char*)ckpt_node->ckpt_name,
>>                      ckpt_node->ckpt_id);
>>              send_evt.type = CPSV_EVT_TYPE_CPD;
>> -            send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_INFO_UPDATE;
>> +            send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_INFO_UPDATE_2;
>>              send_evt.info.cpd.info.ckpt_info.ckpt_id =
> ckpt_node->ckpt_id;
>>              osaf_extended_name_lend(ckpt_node->ckpt_name,
> &send_evt.info.cpd.info.ckpt_info.ckpt_name);
>>              send_evt.info.cpd.info.ckpt_info.attributes = 
>> ckpt_node->create_attrib; @@ -2550,12 +2550,12 @@ void
> cpnd_proc_ckpt_info_update(CPND_CB
>>              else
>>                      send_evt.info.cpd.info.ckpt_info.is_last = false;
>>    
>> -            LOG_NO("cpnd_proc_update_cpd_data::send
> CPD_EVT_ND2D_CKPT_INFO_UPDATE");
>> +            LOG_NO("cpnd_proc_update_cpd_data::send
>> +CPD_EVT_ND2D_CKPT_INFO_UPDATE_2");
>>              rc = cpnd_mds_msg_sync_send(cb, NCSMDS_SVC_ID_CPD,
> cb->cpd_mdest_id, &send_evt, &out_evt,
>>                                          CPSV_WAIT_TIME);
>>    
>>              if (rc != NCSCC_RC_SUCCESS) {
>> -                    LOG_ER("cpnd_proc_update_cpd_data::fail to send
> CPD_EVT_ND2D_CKPT_INFO_UPDATE");
>> +                    LOG_ER("cpnd_proc_update_cpd_data::fail to send 
>> +CPD_EVT_ND2D_CKPT_INFO_UPDATE_2");
>>              }
>>    
>>              if (out_evt == NULL) {
>

CPSV LONG DN SUPPORT

===============================================================================
GENERAL INFORMATION
The SaNameT type, which is used to pass distinguished names (DNs) in AIS
functions and structures, contains a fixed-size buffer that limits the string
length to a maximum of 255 bytes. As a consequence of this, the SAF
specifications also impose a 64 byte limit for the length of relative
distinguished names (RDNs). To overcome these limitations, the extended SaNameT
type has been introduced in OpenSAF. The extended SaNameT type has the same
size and memory alignment requirements as the original type, and is fully
backwards compatible as long as the string length does not exceed 255 bytes.
When the length of the DN name is longer than 255 bytes, the extended SaNameT
type shall hold a reference to the string, which is stored in a separate memory
area.
===============================================================================
CONFIGURATION
In order to utilize the long DNs support in CKPT, the environment variable 
SA_ENABLE_EXTENDED_NAMES is set to "1". This is configured by the support of
IMM.

The support for IMM objects with DNs longer than 255 bytes and RDNs longer than
64 bytes is controlled by introduction of the new configuration attribute
longDnsAllowed that is added to the class OpensafImm. When upgrading from an
older release of OpenSAF, this class needs to be upgraded. An IMM xml file
containing the extended class definition for OpensafImm can be found in the 
file:
        samples/immsv/OpensafImm_Upgrade_4.5.xml
        
By default, the attribute - longDnsAllowed has the value 0, which means that the
old length limits of 255 bytes for DNs and 64 bytes for RDNs are enforced. To
allow long DNs and RDNs in IMM, this attribute must be set to 1 for example
using the following command:
$ immcfg -a longDnsAllowed=1 opensafImm=opensafImm,safApp=safImmService

To prohibit DNs longer than 255 bytes and RDNs longer than 64 bytes in IMM, do
the following:
$ immcfg -a longDnsAllowed=0 opensafImm=opensafImm,safApp=safImmService

The IMM service will reject attempts to set the longDnsAllowed attribute back
to 0 if the IMM database contains objects with DNs longer than 255 bytes or
RDNs longer than 64 bytes.
===============================================================================
PATCH V2 FILES:
1 of 8: updated
2 of 8: updated
3 of 8: no change
4 of 8: no change
5 of 8: no change
6 of 8: no change
7 of 8: no change
8 of 8: updated

MODIFICATIONS
- Implement free() of ckpt_name inside m_MMGR_FREE_* series
- Change the REP_NAME max length to Filename length limits on linux (255)
===============================================================================
PATCH V3 FILES:
1 of 8: no change
2 of 8: no change
3 of 8: no change
4 of 8: updated
5 of 8: no change
6 of 8: updated
7 of 8: no change
8 of 8: updated

MODIFICATIONS
- Use old message to deliver DN checkpoint name and new message to deliver long
DN checkpoint name
- Minor adding TRACE_LEAVE_2 in some function
- Revert unwanted change in struct cpsv_ckpt_hdr 
===============================================================================
REVIEW DISCUSSION LOG

[PATCH 1 of 8]
>> Comment 1 :
I will update PR document so there is not a README file.

>> Comment 2:
I thought that we should keep current implementation even it is not beautiful. 
The reasons are:
- keep a consistence way to access string value.
- 2 pointers to one string brings potential problem for future maintenance.
- For near future changing to CPP,  this implementation can easily change to 
nicer way. 

>> Comment 3 :
I'm agreed with your comments, will work on that in next version of patch.

>> Comment 4 :
Firstly, I tried to look for ckpt_name usage in source code but found nothing.
Secondly, struct cpd_cpnd_info_node contains cpnd node info so it does not have 
any ckpt_name related sematic. And struct cpd_cpnd_info_node also have 
ckpt_ref_list to refer all its check points.
So ckpt_name seems redundant and need to be removed.

>> Comment 5 :
I'm agreed. This work has lower priority and will be submitted in different 
patch/ticket.

[PATCH 2 of 8] 
>> Dose REP_NAME Including node_id  will go  up to  Filename length limits on 
>> linux (255) ?
Yes, I updated name limit to 255 as your comment.

[PATCH 6 of 8]
>> Is this changes  tested with in-service upgrade ?
>> case like old ND and new ND  , New Director and  Old ND.
Yes we tested with these cases.
One problem found but it is not long DN problem so I create another ticket for 
it.
For reference: https://sourceforge.net/p/opensaf/tickets/1922/

[PATCH 7 of 8]
>> Please provide usage detailes of SA_ENABLE_EXTENDED_NAMES in README  in V2 
>> patch.
Please refer to CONFIGURATION part of this README.

[PATCH 8 of 8]
>> cpnd_restore_client_info
>> cpnd_restore_ckpt_info_v0
>> cpnd_restore_ckpt_info_v1

>> can you please elaborate   this share memory version &
>> and restoring client information from share memory process  ,
>> Not able to interpret the  use case.
Here is the purpose of this implementation:
This patch aims for handle the case of in service upgrading without reboot node.
So new CPSV must open old sharemem and convert it to new version (Long DNs).

As the sharemem structure is:
|- ------- ---  |--------------------------------|------------ 
|------------------|
|               |                                |             |                
  |
| CLIENT_HDR    |  CLIENT_INFO                   |  CKPT_HDR   |  CKPT_INFO     
  |
|No. of clients |                                |             |                
  |
--------------------------------------------------------------------------------
    

>> cpnd_restore_client_info
This function restore the CLIENT_ part

>> cpnd_restore_ckpt_info_v0
>> cpnd_restore_ckpt_info_v1
These 2 functions restore the CKPT_ part
The v0 function handle old version (no long DN) sharemem
The v1 function handle new version (long DN) sharemem

[PATCH 8 of 8]
>> [AVM] why rollback of `char ckpt_name[kOsafMaxDnLength];`   to `SaNameT 
>> ckpt_name;` ?
This change is unwanted and this field is currently redundant.
So I revert it.

[PATCH 4 of 8]
>> [AVM] Please take care of Alignment
Corrected it as your request.

[PATCH 6 of 8]
>> [AVM] Add   TRACE_LEAVE2  * TRACE
Trace added.
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to