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

Reply via email to