Yes, the problem with setting OSAF_CKPT_SHM_ALLOC_GUARANTEE is that the 
memory consumption will increase. Therefore it is not backwards 
compatible and thus not possible to do as a bug-fix.

regards,

Anders Widell


On 11/25/2016 10:46 AM, Vo Minh Hoang wrote:
> Dear Mahesh,
>
> I think this problem is #1712, problem occur when
> OSAF_CKPT_SHM_ALLOC_GUARANTEE is not set.
>
> My thinking is that because we provide 2 mode (guarantee or not) so we
> should making sure no coredump happened.
> Btw, because this is out of my scope of decide, I would like to ask Anders
> Widell about it.
>
> -----Original Message-----
> From: A V Mahesh [mailto:mahesh.va...@oracle.com]
> Sent: Friday, November 25, 2016 4:06 PM
> To: Hoang Vo <hoang.m...@dektech.com.au>; anders.wid...@ericsson.com
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: Re: [PATCH 1 of 1] cpnd: ensure shared memory size before writing
> [#2202]
>
> Hi Hoang,
>
> Is this issue coming with  enabling #1712  feature  ?
>
> Exporting  `OSAF_CKPT_SHM_ALLOC_GUARANTEE=1`  will  provide guaranteed CPSV
> service SHM issue and this is addressed broadly all SHM memory issue.
>
> So I don't think we required  API level  changes. ( may we need to document
> the usage of  Exporting  `OSAF_CKPT_SHM_ALLOC_GUARANTEE=1` )
>
> #1712  description
> ============================================================================
> ==
> summary:     leap: provide ensured disk space option for shm_open
> request [1712]
>
> description:
> leap: provide ensured disk space option for shm_open request [1712] Provided
> ensured disk space is allocated for NCS_OS_POSIX_SHM_REQ_OPEN request using
> posix_fallocate() so that application such as CPSV subsequent writes to
> bytes in the specified range are guaranteed not to fail because of lack of
> disk space.
>
> Updated the Opensaf services according to new options based on requirements.
>
> Cpsv service uses the ensured disk space option based on
> OSAF_CKPT_SHM_ALLOC_GUARANTEE environment variable ,so if user exports as
> OSAF_CKPT_SHM_ALLOC_GUARANTEE=1 (true) cpsv provided ensured disk space.
> ============================================================================
> ==
>
> -AVM
>
>
> On 11/23/2016 3:28 PM, Hoang Vo wrote:
>>    osaf/libs/core/include/ncs_osprm.h      |   9 +++++++++
>>    osaf/libs/core/leap/os_defs.c           |  19 +++++++++++++++++--
>>    osaf/services/saf/cpsv/cpnd/cpnd_proc.c |  16 ++++++++++++++++
>>    3 files changed, 42 insertions(+), 2 deletions(-)
>>
>>
>> problem: when checkpoint service init without shared memory size
>> guaranteed works in high memory load, core dump occur while adding section
> to checkpoint.
>> solution:  check the true size of shared memory before writing to it.
>>
>> diff --git a/osaf/libs/core/include/ncs_osprm.h
>> b/osaf/libs/core/include/ncs_osprm.h
>> --- a/osaf/libs/core/include/ncs_osprm.h
>> +++ b/osaf/libs/core/include/ncs_osprm.h
>> @@ -557,6 +557,7 @@ typedef enum {
>>      NCS_OS_POSIX_SHM_REQ_UNLINK,    /* unlink is shm_unlink */
>>      NCS_OS_POSIX_SHM_REQ_READ,
>>      NCS_OS_POSIX_SHM_REQ_WRITE,
>> +  NCS_OS_POSIX_SHM_REQ_STATS,
>>      NCS_OS_POSIX_SHM_REQ_MAX
>>    } NCS_OS_POSIX_SHM_REQ_TYPE;
>>    typedef struct ncs_os_posix_shm_req_open_info_tag { @@ -598,6
>> +599,13 @@ typedef struct ncs_os_posix_shm_req_writ
>>      uint64_t i_offset;
>>    } NCS_OS_POSIX_SHM_REQ_WRITE_INFO;
>>    
>> +typedef struct ncs_os_posix_shm_req_stats_info_tag {
>> +  uint32_t i_hdl;
>> +  int32_t i_fd;
>> +  bool ensures_space;
>> +  void *o_addr;
>> +} NCS_OS_POSIX_SHM_REQ_STATS_INFO;
>> +
>>    typedef struct ncs_shm_req_info {
>>      NCS_OS_POSIX_SHM_REQ_TYPE type;
>>    
>> @@ -607,6 +615,7 @@ typedef struct ncs_shm_req_info {
>>        NCS_OS_POSIX_SHM_REQ_UNLINK_INFO unlink;
>>        NCS_OS_POSIX_SHM_REQ_READ_INFO read;
>>        NCS_OS_POSIX_SHM_REQ_WRITE_INFO write;
>> +    NCS_OS_POSIX_SHM_REQ_STATS_INFO stats;
>>      } info;
>>    
>>    } NCS_OS_POSIX_SHM_REQ_INFO;
>> diff --git a/osaf/libs/core/leap/os_defs.c
>> b/osaf/libs/core/leap/os_defs.c
>> --- a/osaf/libs/core/leap/os_defs.c
>> +++ b/osaf/libs/core/leap/os_defs.c
>> @@ -799,9 +799,9 @@ uint32_t ncs_os_posix_shm(NCS_OS_POSIX_S
>>                              }
>>                      } else {
>>                              if (ftruncate(req->info.open.o_fd, (off_t)
> shm_size /* off_t == long */ ) < 0) {
>> -                                    printf("ftruncate failed with errno
> value %d \n", errno);
>> +                                    LOG_WA("ftruncate failed with errno
> value %d \n", errno);
>>                                      return NCSCC_RC_FAILURE;
>> -                                }
>> +                }
>>                      }
>>    
>>                      uint32_t prot_flag =
> ncs_shm_prot_flags(req->info.open.i_flags);
>> @@ -859,6 +859,21 @@ uint32_t ncs_os_posix_shm(NCS_OS_POSIX_S
>>                     req->info.write.i_write_size);
>>              break;
>>    
>> +    case NCS_OS_POSIX_SHM_REQ_STATS:
>> +            if (!req->info.stats.o_addr) {
>> +                    printf("Output space is not defined\n");
>> +                    return NCSCC_RC_FAILURE;
>> +            }
>> +
>> +            if (req->info.stats.ensures_space) {
>> +                    return NCSCC_RC_SUCCESS;
>> +            } else {
>> +                    if(fstat(req->info.stats.i_fd,
> req->info.stats.o_addr)) {
>> +                            return NCSCC_RC_FAILURE;
>> +                    }
>> +            }
>> +            break;
>> +
>>      default:
>>              printf("Option Not supported %d \n", req->type);
>>              return NCSCC_RC_FAILURE;
>> 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
>> @@ -1851,6 +1851,22 @@ uint32_t cpnd_sec_hdr_update(CPND_CKPT_S
>>      CPSV_SECT_HDR sec_hdr;
>>      uint32_t rc = NCSCC_RC_SUCCESS;
>>      NCS_OS_POSIX_SHM_REQ_INFO write_req;
>> +    struct stat shm_stat;
>> +    memset(&write_req, '\0', sizeof(write_req));
>> +    memset(&shm_stat, '\0', sizeof(shm_stat));
>> +    write_req.type = NCS_OS_POSIX_SHM_REQ_STATS;
>> +    write_req.info.stats.i_fd =
> cp_node->replica_info.open.info.open.o_fd;
>> +    write_req.info.stats.ensures_space = false;
>> +    write_req.info.stats.o_addr = &shm_stat;
>> +    shm_stat.st_size = sizeof(CPSV_CKPT_HDR) + (sec_info->lcl_sec_id +
> 1) * (sizeof(CPSV_SECT_HDR) + cp_node->create_attrib.maxSectionSize);
>> +    rc = ncs_os_posix_shm(&write_req);
>> +    if (rc != NCSCC_RC_SUCCESS) {
>> +            return rc;
>> +    }
>> +
>> +    if (shm_stat.st_size < sizeof(CPSV_CKPT_HDR) + (sec_info->lcl_sec_id
> + 1) * (sizeof(CPSV_SECT_HDR) + cp_node->create_attrib.maxSectionSize)) {
>> +            return NCSCC_RC_OUT_OF_MEM;
>> +    }
>>      memset(&write_req, '\0', sizeof(write_req));
>>      memset(&sec_hdr, '\0', sizeof(CPSV_SECT_HDR));
>>      sec_hdr.lcl_sec_id = sec_info->lcl_sec_id;
>


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to