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