Hi Vu, Ack from me (tested)
Thanks, Minh On 16/08/16 13:30, Vu Minh Nguyen wrote: > Hi all, > > Do you have any comments on the updated patch (update test code)? Thanks. > > Regards, Vu > >> -----Original Message----- >> From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] >> Sent: Thursday, August 11, 2016 3:33 PM >> To: praveen malviya <praveen.malv...@oracle.com>; Lennart Lund >> <lennart.l...@ericsson.com>; Minh Hon Chau >> <minh.c...@dektech.com.au> >> Cc: opensaf-devel@lists.sourceforge.net >> Subject: [devel] [PATCH 1 of 1] ntfsv: refactor logging long dn > notification >> [#1585] >> >> osaf/services/saf/ntfsv/ntfs/NtfLogger.cc | 51 +----- >> tests/ntfsv/tet_longDnObject_notification.c | 188 >> +++++++++++++++++++++++++++- >> 2 files changed, 196 insertions(+), 43 deletions(-) >> >> >> Remove the part of code that truncates the long DN. >> And update the long DN test suite (#36) to make sure full record logged. >> >> diff --git a/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc >> b/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc >> --- a/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc >> +++ b/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc >> @@ -21,6 +21,7 @@ >> */ >> #include <sys/poll.h> >> >> +#include "osaf_utility.h" >> #include "saAis.h" >> #include "saLog.h" >> #include "NtfAdmin.hh" >> @@ -232,48 +233,22 @@ SaAisErrorT NtfLogger::logNotification(N >> notif->getNotificationId(), >> SA_LOG_RECORD_WRITE_ACK, >> &logRecord); >> - if (SA_AIS_OK != errorCode) { >> - LOG_NO("Failed to log an alarm or security alarm notification > (%d)", >> errorCode); >> - if (errorCode == SA_AIS_ERR_LIBRARY || errorCode == >> SA_AIS_ERR_BAD_HANDLE) { >> - LOG_ER("Fatal error SA_AIS_ERR_LIBRARY or >> SA_AIS_ERR_BAD_HANDLE; exiting (%d)...", errorCode); >> - exit(EXIT_FAILURE); >> - } else if (errorCode == SA_AIS_ERR_INVALID_PARAM) { >> - /* Retry to log truncated notificationObject/notifyingObject > because >> - * LOG Service has not supported long dn in Opensaf 4.5 >> - */ >> - char short_dn[SA_MAX_UNEXTENDED_NAME_LENGTH]; >> - memset(&short_dn, 0, SA_MAX_UNEXTENDED_NAME_LENGTH); >> - SaNameT shortdn_notificationObject, shortdn_notifyingObject; >> - if (osaf_is_an_extended_name(ntfHeader->notificationObject)) { >> - strncpy(short_dn, osaf_extended_name_borrow(ntfHeader- >>> notificationObject) >> - , SA_MAX_UNEXTENDED_NAME_LENGTH - 1); >> - osaf_extended_name_lend(short_dn, &shortdn_notificationObject); >> - logRecord.logHeader.ntfHdr.notificationObject = >> &shortdn_notificationObject; >> - } >> - if (osaf_is_an_extended_name(ntfHeader->notifyingObject)) { >> - strncpy(short_dn, osaf_extended_name_borrow(ntfHeader- >>> notifyingObject) >> - , SA_MAX_UNEXTENDED_NAME_LENGTH - 1); >> - osaf_extended_name_lend(short_dn, &shortdn_notifyingObject); >> - logRecord.logHeader.ntfHdr.notifyingObject = >> &shortdn_notifyingObject; >> - } >> - if (short_dn[0] != '\0') { >> - LOG_NO("Retry to log the truncated >> notificationObject/notifyingObject"); >> - if ((errorCode = saLogWriteLogAsync(alarmStreamHandle, >> - notif->getNotificationId(), >> - SA_LOG_RECORD_WRITE_ACK, >> - &logRecord)) != SA_AIS_OK) > { >> - LOG_ER("Failed to log the truncated >> notificationObject/notifyingObject (%d)" >> - , errorCode); >> - } >> - } >> - } >> - goto end; >> + switch (errorCode) { >> + case SA_AIS_OK: >> + break; >> + >> + /* LOGsv is busy. Put the notification to queue and re-send next time > */ >> + case SA_AIS_ERR_TRY_AGAIN: >> + case SA_AIS_ERR_TIMEOUT: >> + TRACE("Failed to log notification (ret: %d). Try next time.", >> errorCode); >> + break; >> + >> + default: >> + osaf_abort(errorCode); >> } >> } >> >> -end: >> TRACE_LEAVE(); >> - >> return errorCode; >> } >> >> diff --git a/tests/ntfsv/tet_longDnObject_notification.c >> b/tests/ntfsv/tet_longDnObject_notification.c >> --- a/tests/ntfsv/tet_longDnObject_notification.c >> +++ b/tests/ntfsv/tet_longDnObject_notification.c >> @@ -19,6 +19,7 @@ >> */ >> #include <utest.h> >> #include <util.h> >> +#include <unistd.h> >> #include "tet_ntf.h" >> #include "tet_ntf_common.h" >> //#include "util.h" >> @@ -57,6 +58,166 @@ static SaNtfSecurityAlarmNotificationT m >> extern void saAisNameLend(SaConstStringT value, SaNameT* name); >> extern SaConstStringT saAisNameBorrow(const SaNameT* name); >> >> +//> >> +// For backup and restore IMM attribute values. >> +//< >> + >> +#define MAX_DATA 256 >> +typedef struct { >> + char name[MAX_DATA]; >> + char val[MAX_DATA]; >> + int val_is_num; >> +} attrinfo_t; >> + >> +typedef struct { >> + attrinfo_t *attr; >> + size_t size; >> +} attrlist_t; >> + >> +typedef struct { >> + attrlist_t *alist; >> + char dn[MAX_DATA]; >> +} imminfo_t; >> + >> +static void getVal(imminfo_t *info) >> +{ >> + FILE *fp = NULL; >> + attrinfo_t *tmp = NULL; >> + char attrValue[MAX_DATA] = {0}; >> + char command[MAX_DATA] = {0}; >> + size_t s = info->alist->size; >> + >> + tmp = info->alist->attr; >> + while (s) { >> + sprintf(command, "immlist -a %s %s " >> + "| awk -F \"=\" '{print $2}' ", tmp->name, >> + info->dn); >> + fp = popen(command, "r"); >> + while (fgets(attrValue, sizeof(attrValue) - 1, fp) != NULL) > {}; >> + pclose(fp); >> + strtok(attrValue, "\n"); >> + strncpy(tmp->val, attrValue, MAX_DATA); >> + s--; >> + tmp++; >> + >> + /* For Debug only*/ >> + if (getenv("NTFTEST_DEBUG")) printf("%s \n", command); >> + >> + } >> + >> +} >> + >> +static int setVal(imminfo_t *info) >> +{ >> + char *f = NULL; >> + attrinfo_t *tmp = NULL; >> + char command[MAX_DATA] = {0}; >> + char format[MAX_DATA] = {0}; >> + size_t s = info->alist->size; >> + int rc; >> + >> + f = format; >> + tmp = info->alist->attr; >> + while (s) { >> + if (tmp->val_is_num) { >> + rc = snprintf(f, MAX_DATA, "-a %s=%s ", >> + tmp->name, >> + tmp->val); >> + } else { >> + rc = snprintf(f, MAX_DATA, "-a %s='%s' ", >> + tmp->name, >> + tmp->val); >> + } >> + f = f + rc; >> + s--; >> + tmp++; >> + } >> + sprintf(command, "immcfg %s %s", format, info->dn); >> + >> + /* For Debug only*/ >> + if (getenv("NTFTEST_DEBUG")) printf("%s \n", command); >> + >> + rc = system(command); >> + return WEXITSTATUS(rc); >> +} >> + >> +static attrinfo_t g_alarm[] = { >> + { >> + "saLogStreamFixedLogRecordSize", >> + "200", // default val >> + 1 // val is num type >> + }, >> + { >> + "saLogStreamLogFileFormat", >> + "@Cr @Ct @Nt @Ne6 @No30 @Ng30 \"@Cb\"", >> + 0 // val is string type >> + } >> +}; >> +static attrinfo_t g_config[] = { >> + { >> + "logMaxLogrecsize", >> + "1024", >> + 1 >> + } >> +}; >> +static attrlist_t alarmList = {g_alarm, > sizeof(g_alarm)/sizeof(attrinfo_t)}; >> +static attrlist_t configList = {g_config, > sizeof(g_config)/sizeof(attrinfo_t)}; >> +static imminfo_t alarmInfo = {&alarmList, >> "safLgStrCfg=saLogAlarm,safApp=safLogService"}; >> +static imminfo_t configInfo = {&configList, >> "logConfig=1,safApp=safLogService"}; >> + >> +static void backupEnv(void) >> +{ >> + getVal(&alarmInfo); >> + getVal(&configInfo); >> + >> + /* For Debug only*/ >> + if (getenv("NTFTEST_DEBUG")) printf("\n"); >> +} >> + >> +static void restoreEnv(void) >> +{ >> + /* For Debug only*/ >> + if (getenv("NTFTEST_DEBUG")) printf("\n"); >> + >> + setVal(&configInfo); >> + setVal(&alarmInfo); >> + >> + /* For Debug only*/ >> + if (getenv("NTFTEST_DEBUG")) printf("\n"); >> +} >> + >> +static void setupEnv(void) >> +{ >> + >> + attrinfo_t aData[2]; >> + memcpy(aData, g_alarm, sizeof(g_alarm)); >> + strcpy(aData[0].val, "0"); >> + strcpy(aData[1].val, "@Cr @Ct @Nt @Ne6 @No @Ng \"@Cb\""); >> + >> + attrinfo_t cData[1]; >> + memcpy(cData, g_config, sizeof(g_config)); >> + strcpy(cData[0].val, "65535"); >> + >> + attrlist_t aList = {aData, sizeof(aData)/sizeof(attrinfo_t)}; >> + attrlist_t cList = {cData, sizeof(cData)/sizeof(attrinfo_t)}; >> + >> + imminfo_t aInfo; >> + aInfo.alist= &aList; >> + strcpy(aInfo.dn, alarmInfo.dn); >> + >> + imminfo_t cInfo; >> + cInfo.alist= &cList; >> + strcpy(cInfo.dn, configInfo.dn); >> + >> + setVal(&aInfo); >> + setVal(&cInfo); >> + >> + /* For Debug only*/ >> + if (getenv("NTFTEST_DEBUG")) printf("\n"); >> +} >> + >> +//< >> + >> /** >> * Init default long dn objects >> */ >> @@ -306,6 +467,7 @@ void extFillHeader(SaNtfNotificationHead >> int i; >> SaStringT dest_ptr; >> SaNameT name1, name2, name3, name4, name5; >> + >> *(head->eventType) = SA_NTF_ALARM_COMMUNICATION; >> *(head->eventTime) = SA_TIME_UNKNOWN; >> >> @@ -390,12 +552,15 @@ void extFillHeader(SaNtfNotificationHead >> */ >> void extAdditionalInfoTest(void) >> { >> - SaNtfAlarmNotificationFilterT myAlarmFilter; >> + SaNtfAlarmNotificationFilterT myAlarmFilter; >> subscriptionId = 1; >> SaNtfNotificationHeaderT *head; >> - >> + >> rc = SA_AIS_OK; >> >> + backupEnv(); >> + setupEnv(); >> + >> resetCounters(); >> >> safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> @@ -475,6 +640,7 @@ void extFillHeader(SaNtfNotificationHead >> safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> rc = check_errors(); >> test_validate(rc, SA_AIS_OK); >> + restoreEnv(); >> } >> >> /** >> @@ -482,12 +648,15 @@ void extFillHeader(SaNtfNotificationHead >> */ >> void extFilterNotificationTest(void) >> { >> - SaNtfAlarmNotificationFilterT myAlarmFilter; >> + SaNtfAlarmNotificationFilterT myAlarmFilter; >> subscriptionId = 1; >> SaNtfNotificationHeaderT *head; >> - >> + >> rc = SA_AIS_OK; >> >> + backupEnv(); >> + setupEnv(); >> + >> resetCounters(); >> >> safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> @@ -586,6 +755,7 @@ void extFilterNotificationTest(void) >> safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> rc = check_errors(); >> test_validate(rc, SA_AIS_OK); >> + restoreEnv(); >> } >> >> /** >> @@ -593,11 +763,14 @@ void extFilterNotificationTest(void) >> */ >> void extAlarmNotificationTest(void) >> { >> - SaNtfAlarmNotificationFilterT myAlarmFilter; >> + SaNtfAlarmNotificationFilterT myAlarmFilter; >> subscriptionId = 1; >> >> rc = SA_AIS_OK; >> >> + backupEnv(); >> + setupEnv(); >> + >> resetCounters(); >> >> safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> @@ -683,6 +856,7 @@ void extAlarmNotificationTest(void) >> safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> rc = check_errors(); >> test_validate(rc, SA_AIS_OK); >> + restoreEnv(); >> } >> >> /** >> @@ -887,6 +1061,9 @@ void extSecurityAlarmNotificationTest(vo >> >> subscriptionId = 5; >> >> + backupEnv(); >> + setupEnv(); >> + >> resetCounters(); >> safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> @@ -954,6 +1131,7 @@ void extSecurityAlarmNotificationTest(vo >> safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); >> rc = check_errors(); >> test_validate(rc, SA_AIS_OK); >> + restoreEnv(); >> } >> >> __attribute__ ((constructor)) static void >> longDnObject_notification_constructor(void) >> >> > ---------------------------------------------------------------------------- > -- >> What NetFlow Analyzer can do for you? Monitors network bandwidth and >> traffic >> patterns at an interface-level. Reveals which users, apps, and protocols > are >> consuming the most bandwidth. Provides multi-vendor support for NetFlow, >> J-Flow, sFlow and other flows. Make informed decisions using capacity >> planning reports. http://sdm.link/zohodev2dev >> _______________________________________________ >> Opensaf-devel mailing list >> Opensaf-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/opensaf-devel > ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel