Hi Vu,

Srikanth says it is existing bug #1330
so no issue , ACK from me ( verified )

-AVM

On 6/21/2016 2:34 PM, Srikanth Revanuru wrote:
> Hi Vu,
>
>
>   There is an existing ticket for the issue mentioned ( 
> https://sourceforge.net/p/opensaf/tickets/1330 )
>
> -- Srikanth
>
>
> ----- Original Message -----
> From: vu.m.ngu...@dektech.com.au
> To: mahesh.va...@oracle.com, lennart.l...@ericsson.com
> Cc: opensaf-devel@lists.sourceforge.net
> Sent: Tuesday, June 21, 2016 2:28:53 PM GMT +05:30 Chennai, Kolkata, Mumbai, 
> New Delhi
> Subject: Re: [devel] [PATCH 1 of 1] log: fix fail to delete appstream post 
> headless when controllers come back [#1877]
>
> Hi Mahesh,
>
> It is something we should consider to fix in a separate ticket (you can
> raise an ticket for this).
>
> The problem is that, logsv do not distingue runtime app stream or
> configurable app stream
> when it performs stream closing. That is why we see that syslog when we
> perfom `immcfg -d <config app stream>` .
>
> Logsv should only call ` saImmOiRtObjectDelete` if the deleted app stream is
> runtime.
>
> Regards, Vu
>
>> -----Original Message-----
>> From: A V Mahesh [mailto:mahesh.va...@oracle.com]
>> Sent: Tuesday, June 21, 2016 3:37 PM
>> To: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au>;
>> lennart.l...@ericsson.com
>> Cc: opensaf-devel@lists.sourceforge.net
>> Subject: Re: [PATCH 1 of 1] log: fix fail to delete appstream post
> headless
>> when controllers come back [#1877]
>>
>> Hi Vu,
>>
>> I was trying validate patch ,  the  App stream got deleted as expected
>> after this patch fix ,
>>
>> whic was not getting deleted as reported in  this ticket (#1877)
>>
>> but  getting "WA saImmOiRtObjectDelete returned 12" while deleting  why ?
>>
>> ==============================================================
>> =============================================
>>
>> 1)  Created application stream
>>
>>        SC-1:#immcfg -c SaLogStreamConfig
>> safLgStrCfg=appstream1,safApp=safLogService -a
>> saLogStreamPathName=applogs -a saLogStreamMaxLogFileSize=1500 -a
>> saLogStreamMaxFilesRotated=4 -a
>> saLogStreamFileName=applicationStream1
>>
>> 2) crated headless state ( stooped both controllers )
>>
>> 3) restored form  headless state ( restarted both both controllers )
>>
>> 4) checked the  App stream  & IMM object  exist
>>
>>
>>       SC-1: # immlist safLgStrCfg=appstream1,safApp=safLogService
>>
>> Name                                               Type Value(s)
>> ==============================================================
>> ==========
>> safLgStrCfg                                        SA_STRING_T
>> safLgStrCfg=appstream1
>> saLogStreamSeverityFilter                          SA_UINT32_T <Empty>
>> saLogStreamPathName                                SA_STRING_T applogs
>> saLogStreamNumOpeners                              SA_UINT32_T  1 (0x1)
>> saLogStreamMaxLogFileSize                          SA_UINT64_T 1500
> (0x5dc)
>> saLogStreamMaxFilesRotated                         SA_UINT32_T  4 (0x4)
>> saLogStreamLogFullHaltThreshold                    SA_UINT32_T  75 (0x4b)
>> saLogStreamLogFullAction                           SA_UINT32_T  3 (0x3)
>> saLogStreamLogFileFormat                           SA_STRING_T <Empty>
>> saLogStreamFixedLogRecordSize                      SA_UINT32_T 150 (0x96)
>> saLogStreamFileName                                SA_STRING_T
>> applicationStream1
>> saLogStreamCreationTimestamp                       SA_TIME_T
>> 1466496942638256691 (0x145a0b3312265233, Tue Jun 21 13:45:42 2016)
>> logStreamDiscardedCounter                          SA_UINT64_T  0 (0x0)
>> SaImmAttrImplementerName                           SA_STRING_T
>> safLogService
>> SaImmAttrClassName                                 SA_STRING_T
>> SaLogStreamConfig
>> SaImmAttrAdminOwnerName                            SA_STRING_T <Empty>
>>
>> 5) Deleted the stream
>>
>> SC-1:# immcfg -d safLgStrCfg=appstream1,safApp=safLogService
>>
>> While deleting revived following warning :
>>
>> Jun 21 13:48:35 SC-1 osafimmnd[28957]: NO Ccb 3 COMMITTED
>> (immcfg_SC-1_29261)
>> Jun 21 13:48:35 SC-1 osaflogd[28969]: WA saImmOiRtObjectDelete returned
>> 12 for safLgStrCfg=appstream1,safApp=safLogService
>>
>> 6)   checked  again the  App stream  & IMM object(  App stream got
>> deleted as this patch fixed the issue reported in  this ticket #1877 )
>>
>> SC-1:#  immlist safLgStrCfg=appstream1,safApp=safLogService
>> error - object or attribute does not exist
>>
>> ==============================================================
>> =============================================
>>
>> -AVM
>>
>>
>> On 6/14/2016 11:33 AM, Vu Minh Nguyen wrote:
>>>    osaf/services/saf/logsv/lgs/lgs_imm.cc |  54 +++++++++++++++++++++++-
>> -------
>>>    tests/logsv/logtest.c                  |   2 +
>>>    tests/logsv/logtest.h                  |   1 +
>>>    tests/logsv/tet_Log_recov.c            |  57
>> ++++++++++++++++++++++++++++++++++
>>>    4 files changed, 100 insertions(+), 14 deletions(-)
>>>
>>>
>>> logsv supposed there were only three well-known config streams at logsv
>> startup.
>>> But this is not true when headless mode is enabled, so the stream id was
>> wrongly assigned to streams.
>>> One more thing, with headless enabled, app streams can be found at
>> startup
>>> and app stream DN can be named not under `safApp=safLogService`.
>>> So, searching config objects under the root `safApp=safLogService` could
>>> miss the config app streams. e.g: app stream with DN "safLgStrCfg=Test"
>>>
>>> This patch fix the problem and also add new test suite #12 to test
>>> if created app stream can be deleted after headless.
>>>
>>> diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.cc
>> b/osaf/services/saf/logsv/lgs/lgs_imm.cc
>>> --- a/osaf/services/saf/logsv/lgs/lgs_imm.cc
>>> +++ b/osaf/services/saf/logsv/lgs/lgs_imm.cc
>>> @@ -144,6 +144,21 @@ static void report_om_error(SaImmOiHandl
>>>    }
>>>
>>>    /**
>>> + * Check to see if given DN is well-known stream or notE
>>> + *
>>> + * @param dn stream DN
>>> + * @ret true if well-known stream, false otherwise
>>> + */
>>> +static bool is_well_know_stream(const char* dn)
>>> +{
>>> +   if (strcmp(dn, SA_LOG_STREAM_ALARM) == 0) return true;
>>> +   if (strcmp(dn, SA_LOG_STREAM_NOTIFICATION) == 0) return true;
>>> +   if (strcmp(dn, SA_LOG_STREAM_SYSTEM) == 0) return true;
>>> +
>>> +   return false;
>>> +}
>>> +
>>> +/**
>>>     * Pack and send a log service config checkpoint using mbcsv
>>>     * @param stream
>>>     *
>>> @@ -1694,7 +1709,11 @@ static SaAisErrorT stream_ccb_completed_
>>>     log_stream_t *stream = log_stream_get_by_name(name);
>>>
>>>     if (stream != NULL) {
>>> -           if (stream->streamId < 3) {
>>> +           /**
>>> +            * Use stream name (DN) to regcogize if the stream is well-
>> known or not
>>> +            * instead of using streamID. This is to avoid any
> mishandling
>> on streamId.
>>> +            */
>>> +           if (is_well_know_stream(name)) {
>>>                     report_oi_error(immOiHandle, opdata->ccbId,
>>>                                     "Stream delete: well known stream
>> '%s' cannot be deleted", name);
>>>                     goto done;
>>> @@ -2713,13 +2732,11 @@ SaAisErrorT lgs_imm_init_configStreams(l
>>>     SaImmSearchHandleT immSearchHandle;
>>>     SaImmSearchParametersT_2 objectSearch;
>>>     SaImmAttrValuesT_2 **attributes;
>>> +   int wellknownStreamId = 0;
>>> +   int appStreamId = 3;
>>>     int streamId = 0;
>>>     SaNameT objectName;
>>> -   SaNameT root_name;
>>> -
>>> -   strcpy((char *) root_name.value, "safApp=safLogService");
>>> -   root_name.length = sizeof("safApp=safLogService");
>>> -
>>> +   const char *className = "SaLogStreamConfig";
>>>
>>>     TRACE_ENTER();
>>>
>>> @@ -2735,27 +2752,36 @@ SaAisErrorT lgs_imm_init_configStreams(l
>>>             osaf_abort(0);
>>>     }
>>>
>>> -   /* Search for all objects of class "SaLogStreamConfig" */
>>> -   objectSearch.searchOneAttr.attrName =
>> const_cast<SaImmAttrNameT>("safLgStrCfg");
>>> +   /* Search for all objects of class "SaLogStreamConfig". */
>>> +   /* Should not base on the attribute name `safLgStrCfg` as the user
>> can create any class having that name */
>>> +   objectSearch.searchOneAttr.attrName =
>> const_cast<SaImmAttrNameT>("SaImmAttrClassName");
>>>     objectSearch.searchOneAttr.attrValueType =
>> SA_IMM_ATTR_SASTRINGT;
>>> -   objectSearch.searchOneAttr.attrValue = NULL;
>>> -
>>> -   if ((om_rc = immutil_saImmOmSearchInitialize_2(omHandle,
>> &root_name,
>>> +   objectSearch.searchOneAttr.attrValue = &className;
>>> +
>>> +   /**
>>> +    * Search from root as app stream DN name can be any - maybe not
>> under the RDN `safApp=safLogService`
>>> +    * Therefore, searching all class under `safApp=safLogService` might
>> miss configurable app stream
>>> +    * eg: app stream with DN `saLgStrCfg=test`
>>> +    */
>>> +   if ((om_rc = immutil_saImmOmSearchInitialize_2(omHandle, NULL,
>>>                     SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR |
>> SA_IMM_SEARCH_GET_NO_ATTR,
>>>                     &objectSearch, NULL, /* Get no attributes */
>>>                     &immSearchHandle)) == SA_AIS_OK) {
>>>
>>>             while (immutil_saImmOmSearchNext_2(immSearchHandle,
>> &objectName, &attributes) == SA_AIS_OK) {
>>> -                   /* Note: Here is creationTimeStamp and
>> severityFilter set
>>> -                    * Can be recovered if scAbseceAllowed
>>> +                   /**
>>> +                    * With headless mode enabled, when lgsv restarts,
>> there could be other configurable app streams.
>>> +                    * It differs from legacy mode in which no app
> stream
>> could be exist at startup.
>>> +                    *
>>> +                    * With well-known streams, stream ID is in reserved
>> numbers [0-2].
>>>                      */
>>> +                   streamId = is_well_know_stream((char
>> *)objectName.value)? wellknownStreamId++:appStreamId++;
>>>                     ais_rc = stream_create_and_configure((char*)
>> objectName.value,
>>>                                     &stream, streamId, accessorHandle);
>>>                     if (ais_rc != SA_AIS_OK) {
>>>                             LOG_WA("stream_create_and_configure
>> failed %d", ais_rc);
>>>                             goto done;
>>>                     }
>>> -                   streamId += 1;
>>>             }
>>>     }
>>>
>>> diff --git a/tests/logsv/logtest.c b/tests/logsv/logtest.c
>>> --- a/tests/logsv/logtest.c
>>> +++ b/tests/logsv/logtest.c
>>> @@ -505,6 +505,7 @@ int main(int argc, char **argv)
>>>                     add_suite_9();
>>>                     add_suite_10();
>>>                     add_suite_11();
>>> +                   add_suite_12();
>>>                     test_list();
>>>                     exit(0);
>>>             case 'e':
>>> @@ -535,6 +536,7 @@ int main(int argc, char **argv)
>>>                     add_suite_9();
>>>                     add_suite_10();
>>>                     add_suite_11();
>>> +                   add_suite_12();
>>>                     break;
>>>             case 'v':
>>>                     if (silent_flg == true) {
>>> diff --git a/tests/logsv/logtest.h b/tests/logsv/logtest.h
>>> --- a/tests/logsv/logtest.h
>>> +++ b/tests/logsv/logtest.h
>>> @@ -98,6 +98,7 @@ void print_t(const char *format, ...) __
>>>    void add_suite_9(void);
>>>    void add_suite_10(void);
>>>    void add_suite_11(void);
>>> +void add_suite_12(void);
>>>
>>>    int get_active_sc(void);
>>>    int get_attr_value(SaNameT *inObjName, char *inAttr, void *outValue);
>>> diff --git a/tests/logsv/tet_Log_recov.c b/tests/logsv/tet_Log_recov.c
>>> --- a/tests/logsv/tet_Log_recov.c
>>> +++ b/tests/logsv/tet_Log_recov.c
>>> @@ -1901,6 +1901,50 @@ done:
>>>     rc = system(command);
>>>    }
>>>
>>> +
>>> +//>
>>> +// For test suite #12
>>> +//<
>>> +/**
>>> + * Create 02 configurable app streams
>>> + */
>>> +void saLogRecov_createCfgAppStreams()
>>> +{
>>> +   int rc;
>>> +   char command[256];
>>> +
>>> +   /* DN under RDN safApp=safLogservice */
>>> +   sprintf(command, "immcfg -c SaLogStreamConfig
>> safLgStrCfg=testCfgAppStream,safApp=safLogService "
>>> +           "-a saLogStreamFileName=testCfgAppStream -a
>> saLogStreamPathName=suite12");
>>> +   rc = system(command);
>>> +   rc_validate(WEXITSTATUS(rc), 0);
>>> +
>>> +   /* DN not under safApp=safLogService */
>>> +   sprintf(command, "immcfg -c SaLogStreamConfig
>> safLgStrCfg=testCfgAppStream1 "
>>> +           "-a saLogStreamFileName=testCfgAppStream1 -a
>> saLogStreamPathName=suite12");
>>> +   rc = system(command);
>>> +   rc_validate(WEXITSTATUS(rc), 0);
>>> +}
>>> +
>>> +/**
>>> + * Create 02 configurable app streams
>>> + */
>>> +void saLogRecov_delCfgAppStreams()
>>> +{
>>> +   int rc;
>>> +   char command[256];
>>> +
>>> +   /* DN under RDN safApp=safLogservice */
>>> +   sprintf(command, "immcfg -d
>> safLgStrCfg=testCfgAppStream,safApp=safLogService ");
>>> +   rc = system(command);
>>> +   rc_validate(WEXITSTATUS(rc), 0);
>>> +
>>> +   /* DN not under safApp=safLogService */
>>> +   sprintf(command, "immcfg -d safLgStrCfg=testCfgAppStream1");
>>> +   rc = system(command);
>>> +   rc_validate(WEXITSTATUS(rc), 0);
>>> +}
>>> +
>>>    /**
>>>     * Test suite 9
>>>     * Testing recovery of "runtime" app streams
>>> @@ -1997,3 +2041,16 @@ void add_suite_11(void)
>>>     test_case_add(11, saLogRecov_req_node_start, ""); /* Start SC
>> nodes */
>>>     test_case_add(11, saLogRecov_verRtStream_cleanup, "SC nodes
>> started: after 10 mins, the stream is cleanup, OK");
>>>    }
>>> +
>>> +/**
>>> + * Test suite 12
>>> + * Verify created configurable app streams can be deleted after
> headless.
>>> + */
>>> +void add_suite_12(void)
>>> +{
>>> +   test_suite_add(12, "LOG Server down/up: verify app streams can be
>> deleted after headless");
>>> +   test_case_add(12, saLogRecov_createCfgAppStreams, "Create 02
>> configurable app streams");
>>> +   test_case_add(12, saLogRecov_req_node_stop, ""); /* Stop SC
>> nodes */
>>> +   test_case_add(12, saLogRecov_req_node_start, ""); /* Start SC
>> nodes */
>>> +   test_case_add(12, saLogRecov_delCfgAppStreams, "SC nodes
>> started: delete created app streams");
>>> +}
>
>
> ------------------------------------------------------------------------------
> 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


------------------------------------------------------------------------------
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