Hi Vu,

 There is an existing ticket for the issue mentioned ( 
https://sourceforge.net/p/opensaf/tickets/1330 )

-- Srikanth


----- Original Message -----
From: [email protected]
To: [email protected], [email protected]
Cc: [email protected]
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:[email protected]]
> Sent: Tuesday, June 21, 2016 3:37 PM
> To: Vu Minh Nguyen <[email protected]>;
> [email protected]
> Cc: [email protected]
> 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
[email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to