osaf/services/saf/logsv/lgs/Makefile.am | 1 +
osaf/services/saf/logsv/lgs/lgs.h | 4 +-
osaf/services/saf/logsv/lgs/lgs_amf.cc | 14 +-
osaf/services/saf/logsv/lgs/lgs_config.cc | 30 +-
osaf/services/saf/logsv/lgs/lgs_evt.cc | 77 ++++--
osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 12 +-
osaf/services/saf/logsv/lgs/lgs_fmt.cc | 41 ++-
osaf/services/saf/logsv/lgs/lgs_imm.cc | 256 ++++++++++-----------
osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc | 12 +-
osaf/services/saf/logsv/lgs/lgs_main.cc | 7 +-
osaf/services/saf/logsv/lgs/lgs_mbcsv.cc | 74 +++--
osaf/services/saf/logsv/lgs/lgs_mds.cc | 296 ++++++++++++++++---------
osaf/services/saf/logsv/lgs/lgs_recov.cc | 44 +--
osaf/services/saf/logsv/lgs/lgs_recov.h | 8 +-
osaf/services/saf/logsv/lgs/lgs_stream.cc | 322 +++++++++------------------
osaf/services/saf/logsv/lgs/lgs_stream.h | 18 +-
osaf/services/saf/logsv/lgs/lgs_util.cc | 25 ++-
osaf/services/saf/logsv/lgs/lgs_util.h | 2 +
18 files changed, 630 insertions(+), 613 deletions(-)
Major change overview:
1) Replace all internal SaNameT with C/C++ strings
2) Remove NCS_PATRICIA_TREE used to hold stream DNs,
Using the existing database `stream_array` instead.
3) Change a bit in `checkFieldSize()/lgs_fmt`,
check `numOfDigits` agains number of digits of the constant
SA_LOG_MAX_RECORD_SIZE
diff --git a/osaf/services/saf/logsv/lgs/Makefile.am
b/osaf/services/saf/logsv/lgs/Makefile.am
--- a/osaf/services/saf/logsv/lgs/Makefile.am
+++ b/osaf/services/saf/logsv/lgs/Makefile.am
@@ -45,6 +45,7 @@ osaf_execbin_PROGRAMS = osaflogd
osaflogd_CXXFLAGS = $(AM_CXXFLAGS)
osaflogd_CPPFLAGS = \
+ -DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
-I$(top_srcdir)/osaf/libs/common/logsv/include \
-I$(top_srcdir)/osaf/libs/common/immsv/include
diff --git a/osaf/services/saf/logsv/lgs/lgs.h
b/osaf/services/saf/logsv/lgs/lgs.h
--- a/osaf/services/saf/logsv/lgs/lgs.h
+++ b/osaf/services/saf/logsv/lgs/lgs.h
@@ -123,11 +123,11 @@ extern SaAisErrorT lgs_imm_init_configS
// Functions for recovery handling
void lgs_cleanup_abandoned_streams();
-void lgs_delete_one_stream_object(char *name_str);
+void lgs_delete_one_stream_object(const std::string &name_str);
void lgs_search_stream_objects();
SaUint32T *lgs_get_scAbsenceAllowed_attr(SaUint32T *attr_val);
int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out,
- char *object_name,
+ const std::string &object_name,
SaImmHandleT *immOmHandle);
int lgs_free_streamobj_attr(SaImmHandleT immHandle);
diff --git a/osaf/services/saf/logsv/lgs/lgs_amf.cc
b/osaf/services/saf/logsv/lgs/lgs_amf.cc
--- a/osaf/services/saf/logsv/lgs/lgs_amf.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_amf.cc
@@ -27,13 +27,13 @@
static void close_all_files()
{
log_stream_t *stream;
-
- stream = log_stream_getnext_by_name(NULL);
+ int num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) {
if (log_stream_file_close(stream) != 0)
- LOG_WA("Could not close file for stream %s",
stream->name);
+ LOG_WA("Could not close file for stream %s",
stream->name.c_str());
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
}
@@ -54,6 +54,7 @@ static SaAisErrorT amf_active_state_hand
{
log_stream_t *stream;
SaAisErrorT error = SA_AIS_OK;
+ int num;
TRACE_ENTER2("HA ACTIVE request");
@@ -67,12 +68,13 @@ static SaAisErrorT amf_active_state_hand
lgs_start_gcfg_applier();
/* check existing streams */
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
if (!stream)
LOG_ER("No streams exist!");
while (stream != NULL) {
*stream->p_fd = -1; /* First Initialize fd */
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
done:
diff --git a/osaf/services/saf/logsv/lgs/lgs_config.cc
b/osaf/services/saf/logsv/lgs/lgs_config.cc
--- a/osaf/services/saf/logsv/lgs/lgs_config.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_config.cc
@@ -464,6 +464,7 @@ int lgs_cfg_verify_root_dir(const std::s
int rc = 0;
log_stream_t *stream = NULL;
size_t n = root_str_in.size();
+ int num;
if (n > PATH_MAX) {
LOG_NO("verify_root_dir Fail. Path > PATH_MAX");
@@ -475,7 +476,8 @@ int lgs_cfg_verify_root_dir(const std::s
* Make sure that the path /rootPath/streamPath/<fileName><tail>
* must not be larger than PATH_MAX.
*/
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) {
if (lgs_is_valid_pathlength(stream->pathName, stream->fileName,
root_str_in) == false) {
@@ -483,7 +485,8 @@ int lgs_cfg_verify_root_dir(const std::s
rc = -1;
goto done;
}
- stream = log_stream_getnext_by_name(stream->name);
+
+ stream = log_stream_get_by_id(--num);
}
if (lgs_path_is_writeable_dir_h(root_str_in) == false) {
@@ -785,7 +788,6 @@ static int verify_all_init()
*/
static void read_logsv_config_obj_2() {
SaImmHandleT omHandle;
- SaNameT objectName;
SaImmAccessorHandleT accessorHandle;
SaImmAttrValuesT_2 *attribute;
SaImmAttrValuesT_2 **attributes;
@@ -808,18 +810,15 @@ static void read_logsv_config_obj_2() {
osaf_abort(0);
}
- n = snprintf((char *) objectName.value, SA_MAX_NAME_LENGTH, "%s",
- LGS_IMM_LOG_CONFIGURATION);
- if (n >= SA_MAX_NAME_LENGTH) {
- LOG_ER("%s: Fail Object name > SA_MAX_NAME_LENGTH",
__FUNCTION__);
- osaf_abort(0); /* Should never happen */
- }
- objectName.length = strlen((char *) objectName.value);
+ SaConstStringT objectName = LGS_IMM_LOG_CONFIGURATION;
+
+ SaNameT tmpObjName;
+ osaf_extended_name_lend(objectName, &tmpObjName);
/* Get all attributes of the object */
if ((om_rc = immutil_saImmOmAccessorGet_2(
accessorHandle,
- &objectName,
+ &tmpObjName,
NULL,
&attributes)) != SA_AIS_OK) {
LOG_NO("%s immutil_saImmOmAccessorGet_2 Fail: %s",
@@ -1396,15 +1395,14 @@ void conf_runtime_obj_create(SaImmOiHand
NULL
};
- SaNameT parent_name, *parent_name_p;
- strcpy((char *) parent_name.value, "safApp=safLogService");
- parent_name.length = strlen((char *) parent_name.value);
- parent_name_p = &parent_name;
+ SaNameT parent_name_p;
+ SaConstStringT parent_name = "safApp=safLogService";
+ osaf_extended_name_lend(parent_name, &parent_name_p);
rc = immutil_saImmOiRtObjectCreate_2(
immOiHandle,
const_cast<SaImmClassNameT>("OpenSafLogCurrentConfig"),
- parent_name_p,
+ &parent_name_p,
attrValues);
if (rc == SA_AIS_ERR_EXIST) {
diff --git a/osaf/services/saf/logsv/lgs/lgs_evt.cc
b/osaf/services/saf/logsv/lgs/lgs_evt.cc
--- a/osaf/services/saf/logsv/lgs/lgs_evt.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_evt.cc
@@ -23,6 +23,7 @@
#include "lgs_mbcsv_v2.h"
#include "lgs_recov.h"
#include "lgs_imm_gcfg.h"
+#include "osaf_extended_name.h"
/* Macro to validate the version */
#define m_LOG_VER_IS_VALID(ver) \
@@ -542,12 +543,13 @@ static uint32_t proc_rda_cb_msg(lgsv_lgs
lgs_process_lga_down_list();
/* Check existing streams */
- stream = log_stream_getnext_by_name(NULL);
+ int num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
if (!stream)
LOG_ER("No streams exist!");
while (stream != NULL) {
- *stream->p_fd = -1; /* Initialize fd */
- stream = log_stream_getnext_by_name(stream->name);
+ *stream->p_fd = -1; /* Initialize fd */
+ stream = log_stream_get_by_id(--num);
}
}
@@ -764,7 +766,7 @@ static uint32_t lgs_ckpt_stream_open(lgs
ckpt_rec_open_ptr->logPath = const_cast<char
*>(logStream->pathName.c_str());
ckpt_rec_open_ptr->logFileCurrent = const_cast<char
*>(logStream->logFileCurrent.c_str());
ckpt_rec_open_ptr->fileFmt = logStream->logFileFormat;
- ckpt_rec_open_ptr->logStreamName = logStream->name;
+ ckpt_rec_open_ptr->logStreamName = const_cast<char
*>(logStream->name.c_str());
ckpt_rec_open_ptr->maxFileSize = logStream->maxLogFileSize;
ckpt_rec_open_ptr->maxLogRecordSize =
logStream->fixedLogRecordSize;
@@ -803,11 +805,13 @@ SaAisErrorT create_new_app_stream(
log_stream_t *stream;
SaBoolT twelveHourModeFlag;
SaUint32T logMaxLogrecsize_conf = 0;
+ SaConstStringT str_name;
+ int num, err = 0;
TRACE_ENTER();
- if (open_sync_param->lstr_name.length > SA_MAX_NAME_LENGTH) {
- TRACE("Name too long");
+ if (lgs_is_extended_name_valid(&open_sync_param->lstr_name) == false) {
+ TRACE("SaNameT is invalid");
rc = SA_AIS_ERR_INVALID_PARAM;
goto done;
}
@@ -863,7 +867,8 @@ SaAisErrorT create_new_app_stream(
}
/* Verify that path and file are unique */
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) {
if ((stream->fileName == open_sync_param->logFileName) &&
(stream->pathName == open_sync_param->logFilePathName)) {
@@ -871,12 +876,13 @@ SaAisErrorT create_new_app_stream(
rc = SA_AIS_ERR_INVALID_PARAM;
goto done;
}
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
/* Verify that the name seems to be a DN */
- if (strncmp("safLgStr=", (char *)open_sync_param->lstr_name.value,
sizeof("safLgStr=") != 0)) {
- TRACE("'%s' is not a valid stream name => invalid param",
open_sync_param->lstr_name.value);
+ str_name = osaf_extended_name_borrow(&open_sync_param->lstr_name);
+ if (strncmp("safLgStr=", str_name, sizeof("safLgStr=") != 0)) {
+ TRACE("'%s' is not a valid stream name => invalid param",
str_name);
rc = SA_AIS_ERR_INVALID_PARAM;
goto done;
}
@@ -891,25 +897,34 @@ SaAisErrorT create_new_app_stream(
goto done;
}
- stream = log_stream_new_1(&open_sync_param->lstr_name,
- open_sync_param->logFileName,
- open_sync_param->logFilePathName,
- open_sync_param->maxLogFileSize,
- open_sync_param->maxLogRecordSize,
- open_sync_param->logFileFullAction,
- open_sync_param->maxFilesRotated,
- open_sync_param->logFileFmt,
- STREAM_TYPE_APPLICATION,
- STREAM_NEW,
- twelveHourModeFlag,
- 0,
- creationFlag);
+ *o_stream = log_stream_new(str_name, STREAM_NEW);
+ if (*o_stream == NULL) {
+ rc = SA_AIS_ERR_NO_MEMORY;
+ goto done;
- if (stream == NULL) {
+ }
+
+ err = lgs_populate_log_stream(
+ open_sync_param->logFileName,
+ open_sync_param->logFilePathName,
+ open_sync_param->maxLogFileSize,
+ open_sync_param->maxLogRecordSize,
+ open_sync_param->logFileFullAction,
+ open_sync_param->maxFilesRotated,
+ open_sync_param->logFileFmt,
+ STREAM_TYPE_APPLICATION,
+ twelveHourModeFlag,
+ 0,
+ *o_stream // output
+ );
+ if (err == -1) {
+ log_stream_delete(o_stream);
rc = SA_AIS_ERR_NO_MEMORY;
goto done;
}
- *o_stream = stream;
+
+ rc = lgs_create_rt_appstream(*o_stream);
+ if (rc != SA_AIS_OK) log_stream_delete(o_stream);
done:
TRACE_LEAVE();
@@ -926,7 +941,7 @@ static SaAisErrorT file_attribute_cmp(lg
{
SaAisErrorT rs = SA_AIS_OK;
- TRACE_ENTER2("Stream: %s", applicationStream->name);
+ TRACE_ENTER2("Stream: %s", applicationStream->name.c_str());
if (open_sync_param->maxLogFileSize !=
applicationStream->maxLogFileSize ||
open_sync_param->maxLogRecordSize !=
applicationStream->fixedLogRecordSize ||
@@ -983,15 +998,14 @@ static uint32_t proc_stream_open_msg(lgs
lgsv_msg_t msg;
lgsv_stream_open_req_t *open_sync_param =
&(evt->info.msg.info.api_info.param.lstr_open_sync);
log_stream_t *logStream;
- char name[SA_MAX_NAME_LENGTH + 1];
+ std::string name;
time_t file_closetime = 0;
int i_rc = 0;
/* Create null-terminated stream name */
- memcpy(name, open_sync_param->lstr_name.value,
open_sync_param->lstr_name.length);
- memset(&name[open_sync_param->lstr_name.length], 0, SA_MAX_NAME_LENGTH
+ 1 - open_sync_param->lstr_name.length);
+ name = osaf_extended_name_borrow(&open_sync_param->lstr_name);
- TRACE_ENTER2("stream '%s', client_id %u", name,
open_sync_param->client_id);
+ TRACE_ENTER2("stream '%s', client_id %u", name.c_str(),
open_sync_param->client_id);
logStream = log_stream_get_by_name(name);
if (logStream != NULL) {
@@ -1036,7 +1050,7 @@ static uint32_t proc_stream_open_msg(lgs
ais_rv = SA_AIS_ERR_NOT_EXIST;
goto snd_rsp;
}
- TRACE("%s Stream %s is recovered",
__FUNCTION__, name);
+ TRACE("%s Stream %s is recovered",
__FUNCTION__, name.c_str());
log_stream_print(logStream); /* TRACE */
lstr_id = logStream->streamId;
goto snd_rsp;
@@ -1112,6 +1126,7 @@ static uint32_t proc_stream_open_msg(lgs
free(open_sync_param->logFileFmt);
free(open_sync_param->logFilePathName);
free(open_sync_param->logFileName);
+ osaf_extended_name_free(&open_sync_param->lstr_name);
TRACE_LEAVE();
return rc;
diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc
b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc
--- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc
@@ -539,17 +539,17 @@ static int check_oldest(char *line, char
int date, time, c, d;
date = time = c = d = 0;
int len = 0;
- char name_format[SA_MAX_NAME_LENGTH];
+ std::string name_format;
char time_stamps[] = "_%d_%d_%d_%d.log";
len = strlen(time_stamps);
len += fname_prefix_size;
- strncpy(name_format, fname_prefix, fname_prefix_size);
- name_format[fname_prefix_size] = '\0';
- TRACE_3("fname: %s", name_format);
- strncat(name_format, time_stamps, SA_MAX_NAME_LENGTH-1);
- if (sscanf(line, name_format, &date, &time, &c, &d) >= 2) {
+ name_format = std::string(fname_prefix);
+ TRACE_3("fname: %s", name_format.c_str());
+
+ name_format = name_format + time_stamps;
+ if (sscanf(line, name_format.c_str(), &date, &time, &c, &d) >= 2) {
TRACE_3("%s: line: arg 1: %d 2: %d 3: %d 4: %d ok",
__FUNCTION__,
date, time, c, d);
if (date < *old_date || *old_date == -1) {
diff --git a/osaf/services/saf/logsv/lgs/lgs_fmt.cc
b/osaf/services/saf/logsv/lgs/lgs_fmt.cc
--- a/osaf/services/saf/logsv/lgs/lgs_fmt.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_fmt.cc
@@ -24,6 +24,7 @@
#include "lgs_fmt.h"
#include "lgs.h"
+#include "osaf_extended_name.h"
/* Number of seconds per an hour/minute */
#define SECOND_PER_HOUR 3600L
@@ -40,19 +41,23 @@
static SaInt32T checkFieldSize(SaStringT inputString, SaUint16T *numOfDigits)
{
SaInt32T result = 0;
- SaInt8T dest[SA_MAX_NAME_LENGTH];
+ std::string dest;
char **endptr = NULL;
+ int maxDigitsNum = std::to_string(SA_LOG_MAX_RECORD_SIZE).size() + 1;
- (void)strcpy(dest, ""); /* Init dest */
*numOfDigits = 0;
+ dest.clear();
/* Build string of characters */
- while ((isdigit(*inputString) != 0) && (*numOfDigits <
SA_MAX_NAME_LENGTH)) {
+ while ((isdigit(*inputString) != 0) && (*numOfDigits < maxDigitsNum)) {
+ char c = *inputString;
+ dest += c;
+ inputString++;
*numOfDigits = *numOfDigits + 1;
- (void)strncat(dest, inputString++, sizeof(SaInt8T));
}
- result = strtol(dest, endptr, 0);
+ result = strtol(dest.c_str(), endptr, 0);
+
return result;
}
@@ -1048,12 +1053,11 @@ static int extractNotificationField(char
fieldSize = checkFieldSize(fmtExpPtr, &fieldSizeOffset);
if (fieldSize == 0) {
characters = snprintf(dest, dest_size, "%s",
-
logRecord->logHeader.ntfHdr.notificationObject->value);
+
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notificationObject));
} else {
- characters = snprintf(dest, dest_size,
- "%*.*s",
- (int) -fieldSize,
- (int) fieldSize,
logRecord->logHeader.ntfHdr.notificationObject->value);
+ characters = snprintf(dest, dest_size, "%*.*s", (int)
-fieldSize,
+ (int) fieldSize,
+
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notificationObject));
}
*fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset;
@@ -1063,13 +1067,12 @@ static int extractNotificationField(char
/* Check field size and trunkate alternative pad with blanks */
fieldSize = checkFieldSize(fmtExpPtr, &fieldSizeOffset);
if (fieldSize == 0) {
- characters = snprintf(dest,
- dest_size, "%s",
logRecord->logHeader.ntfHdr.notifyingObject->value);
+ characters = snprintf(dest, dest_size, "%s",
+
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notifyingObject));
} else {
- characters = snprintf(dest, dest_size,
- "%*.*s",
- (int) -fieldSize,
- (int) fieldSize,
logRecord->logHeader.ntfHdr.notifyingObject->value);
+ characters = snprintf(dest, dest_size, "%*.*s", (int)
-fieldSize,
+ (int) fieldSize,
+
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notifyingObject));
}
*fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset;
@@ -1114,10 +1117,12 @@ static int extractSystemField(char *dest
characters = snprintf(dest, dest_size,
"%*.*s",
(int)-fieldSize,
- (int)fieldSize,
logRecord->logHeader.genericHdr.logSvcUsrName->value);
+ (int)fieldSize,
+
osaf_extended_name_borrow(logRecord->logHeader.genericHdr.logSvcUsrName));
} else {
characters = snprintf(dest, dest_size,
- "%s",
logRecord->logHeader.genericHdr.logSvcUsrName->value);
+ "%s",
+
osaf_extended_name_borrow(logRecord->logHeader.genericHdr.logSvcUsrName));
}
*fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset;
break;
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
@@ -248,7 +248,7 @@ static uint32_t ckpt_stream_config(log_s
ckpt_v2.header.num_ckpt_records = 1;
ckpt_v2.header.data_len = 1;
- ckpt_v2.ckpt_rec.stream_cfg.name = (char *)stream->name;
+ ckpt_v2.ckpt_rec.stream_cfg.name = const_cast<char
*>(stream->name.c_str());
ckpt_v2.ckpt_rec.stream_cfg.fileName = const_cast<char
*>(stream->fileName.c_str());
ckpt_v2.ckpt_rec.stream_cfg.pathName = const_cast<char
*>(stream->pathName.c_str());
ckpt_v2.ckpt_rec.stream_cfg.maxLogFileSize =
stream->maxLogFileSize;
@@ -267,7 +267,7 @@ static uint32_t ckpt_stream_config(log_s
ckpt_v1.header.num_ckpt_records = 1;
ckpt_v1.header.data_len = 1;
- ckpt_v1.ckpt_rec.stream_cfg.name = (char *)stream->name;
+ ckpt_v1.ckpt_rec.stream_cfg.name = const_cast<char
*>(stream->name.c_str());
ckpt_v1.ckpt_rec.stream_cfg.fileName = const_cast<char
*>(stream->fileName.c_str());
ckpt_v1.ckpt_rec.stream_cfg.pathName = const_cast<char
*>(stream->pathName.c_str());
ckpt_v1.ckpt_rec.stream_cfg.maxLogFileSize =
stream->maxLogFileSize;
@@ -389,17 +389,17 @@ static void adminOperationCallback(SaImm
const SaImmAdminOperationParamsT_2 *param = params[0];
log_stream_t *stream;
SaAisErrorT ais_rc = SA_AIS_OK;
-
- TRACE_ENTER2("%s", objectName->value);
+ SaConstStringT objName = osaf_extended_name_borrow(objectName);
+
+ TRACE_ENTER2("%s", objName);
if (lgs_cb->ha_state != SA_AMF_HA_ACTIVE) {
LOG_ER("admin op callback in applier");
goto done;
}
- if ((stream = log_stream_get_by_name((char *)objectName->value)) ==
NULL) {
- report_om_error(immOiHandle, invocation, "Stream %s not found",
- objectName->value);
+ if ((stream = log_stream_get_by_name(objName)) == NULL) {
+ report_om_error(immOiHandle, invocation, "Stream %s not found",
objName);
goto done;
}
@@ -467,12 +467,12 @@ static void adminOperationCallback(SaImm
goto done;
}
- TRACE("Changing severity for stream %s to %u", stream->name,
severityFilter);
+ TRACE("Changing severity for stream %s to %u",
stream->name.c_str(), severityFilter);
stream->severityFilter = severityFilter;
ais_rc = immutil_update_one_rattr(
immOiHandle,
- reinterpret_cast<const char *>(objectName->value),
+ objName,
const_cast<SaImmAttrNameT>("saLogStreamSeverityFilter"),
SA_IMM_ATTR_SAUINT32T,
&stream->severityFilter);
@@ -505,8 +505,9 @@ static SaAisErrorT ccbObjectDeleteCallba
{
SaAisErrorT rc = SA_AIS_OK;
struct CcbUtilCcbData *ccbUtilCcbData;
-
- TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value);
+ SaConstStringT objName = osaf_extended_name_borrow(objectName);
+
+ TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objName);
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -530,9 +531,10 @@ static SaAisErrorT ccbObjectCreateCallba
{
SaAisErrorT rc = SA_AIS_OK;
struct CcbUtilCcbData *ccbUtilCcbData;
+ SaConstStringT parName = osaf_extended_name_borrow(parentName);
TRACE_ENTER2("CCB ID %llu, class '%s', parent '%s'",
- ccbId, className, parentName->value);
+ ccbId, className, parName);
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -565,8 +567,9 @@ static SaAisErrorT ccbObjectModifyCallba
{
SaAisErrorT rc = SA_AIS_OK;
struct CcbUtilCcbData *ccbUtilCcbData;
-
- TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value);
+ SaConstStringT objName = osaf_extended_name_borrow(objectName);
+
+ TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objName);
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -745,8 +748,8 @@ static SaAisErrorT config_ccb_completed_
};
char oi_err_str[256];
-
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
+ SaConstStringT objName = osaf_extended_name_borrow(&opdata->objectName);
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName);
attrMod = opdata->param.modify.attrMods[i++];
while (attrMod != NULL) {
@@ -765,7 +768,7 @@ static SaAisErrorT config_ccb_completed_
(attribute->attrValuesNumber == 0)) {
report_oi_error(immOiHandle, opdata->ccbId,
"deletion of value is not allowed for
attribute %s stream %s",
- attribute->attrName,
opdata->objectName.value);
+ attribute->attrName, objName);
ais_rc = SA_AIS_ERR_BAD_OPERATION;
goto done;
}
@@ -1044,6 +1047,7 @@ bool chk_filepath_stream_exist(
log_stream_t *i_stream = NULL;
std::string i_fileName;
std::string i_pathName;
+ int num;
bool rc = false;
TRACE_ENTER();
@@ -1093,15 +1097,17 @@ bool chk_filepath_stream_exist(
/* Check if any stream has given filename and path */
TRACE("Check if any stream has given filename and path");
- i_stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ i_stream = log_stream_get_by_id(--num);
while (i_stream != NULL) {
- TRACE("Check stream \"%s\"", i_stream->name);
+ TRACE("Check stream \"%s\"", i_stream->name.c_str());
if ((i_stream->fileName == i_fileName) &&
(i_stream->pathName == i_pathName)) {
rc = true;
break;
}
- i_stream = log_stream_getnext_by_name(i_stream->name);
+
+ i_stream = log_stream_get_by_id(--num);
}
TRACE_LEAVE2("rc = %d", rc);
@@ -1317,8 +1323,8 @@ static SaAisErrorT check_attr_validity(S
*/
if (opdata->operationType == CCBUTIL_MODIFY) {
TRACE("Validate for MODIFY");
- stream = log_stream_get_by_name(
- (char *)
opdata->param.modify.objectName->value);
+ SaConstStringT objName =
osaf_extended_name_borrow(opdata->param.modify.objectName);
+ stream = log_stream_get_by_name(objName);
if (stream == NULL) {
/* No stream to modify */
report_oi_error(immOiHandle, opdata->ccbId,
@@ -1687,7 +1693,7 @@ static SaAisErrorT stream_ccb_completed_
{
SaAisErrorT rc;
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
osaf_extended_name_borrow(&opdata->objectName));
rc = check_attr_validity(immOiHandle, opdata);
TRACE_LEAVE2("rc = %u", rc);
return rc;
@@ -1703,9 +1709,9 @@ static SaAisErrorT stream_ccb_completed_
{
SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
-
- const char *name = (char*) opdata->param.delete_.objectName->value;
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
osaf_extended_name_borrow(&opdata->objectName));
+
+ SaConstStringT name =
osaf_extended_name_borrow(opdata->param.delete_.objectName);
log_stream_t *stream = log_stream_get_by_name(name);
if (stream != NULL) {
@@ -1728,8 +1734,7 @@ static SaAisErrorT stream_ccb_completed_
rc = SA_AIS_OK;
} else {
- report_oi_error(immOiHandle, opdata->ccbId,
- "stream %s not found", name);
+ report_oi_error(immOiHandle, opdata->ccbId, "stream %s not
found", name);
}
done:
@@ -1806,7 +1811,7 @@ static SaAisErrorT ccbCompletedCallback(
break;
case CCBUTIL_DELETE:
case CCBUTIL_MODIFY:
- if (!strncmp((char*)opdata->objectName.value,
"safLgStrCfg", 11)) {
+ if
(!strncmp(osaf_extended_name_borrow(&opdata->objectName), "safLgStrCfg", 11)) {
rc = stream_ccb_completed(immOiHandle, opdata);
} else {
rc = config_ccb_completed(immOiHandle, opdata);
@@ -1854,10 +1859,12 @@ void logRootDirectory_filemove(
TRACE_ENTER();
log_stream_t *stream;
std::string current_logfile;
+ int num;
/* Close and rename files at current path
*/
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) {
TRACE("Handling file %s", stream->logFileCurrent.c_str());
@@ -1873,18 +1880,19 @@ void logRootDirectory_filemove(
old_logRootDirectory, stream, current_logfile,
cur_time_in) != 0) {
LOG_ER("Old log files could not be renamed and closed
for stream: %s",
- stream->name);
+ stream->name.c_str());
}
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
/* Create new files at new path
*/
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) {
if (lgs_create_config_file_h(new_logRootDirectory, stream) !=
0) {
LOG_ER("New config file could not be created for
stream: %s",
- stream->name);
+ stream->name.c_str());
}
/* Create the new log file based on updated configuration */
@@ -1894,14 +1902,14 @@ void logRootDirectory_filemove(
if ((*stream->p_fd = log_file_open(new_logRootDirectory,
stream, stream->logFileCurrent, NULL)) == -1) {
LOG_ER("New log file could not be created for stream:
%s",
- stream->name);
+ stream->name.c_str());
}
/* Also update standby current file name
* Used if standby and configured for split file system
*/
stream->stb_logFileCurrent = stream->logFileCurrent;
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
TRACE_LEAVE();
}
@@ -1918,6 +1926,7 @@ void logDataGroupname_fileown(const char
{
TRACE_ENTER();
log_stream_t *stream;
+ int num;
if (new_logDataGroupname == NULL) {
LOG_ER("Data group is NULL");
@@ -1929,10 +1938,11 @@ void logDataGroupname_fileown(const char
/* Not attribute values deletion
* Change ownership of log files to this new group
*/
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) {
lgs_own_log_files_h(stream, new_logDataGroupname);
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
}
TRACE_LEAVE();
@@ -1993,7 +2003,7 @@ static void config_ccb_apply_modify(cons
/* Flag set if any of the mailbox limit values have changed */
bool mailbox_lim_upd = false;
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
osaf_extended_name_borrow(&opdata->objectName));
attrMod = opdata->param.modify.attrMods[i++];
while (attrMod != NULL) {
@@ -2141,7 +2151,7 @@ static SaAisErrorT stream_create_and_con
SaAisErrorT rc = SA_AIS_OK;
*stream = NULL;
int i = 0;
- SaNameT objectName;
+ std::string objectName;
std::string fileName;
std::string pathName;
@@ -2150,16 +2160,15 @@ static SaAisErrorT stream_create_and_con
while (ccb->param.create.attrValues[i] != NULL) {
if (!strncmp(ccb->param.create.attrValues[i]->attrName,
"safLgStrCfg",
sizeof("safLgStrCfg"))) {
- if (ccb->param.create.parentName->length > 0) {
- objectName.length = snprintf((char*)
objectName.value, sizeof(objectName.value),
- "%s,%s", *(const SaStringT*)
ccb->param.create.attrValues[i]->attrValues[0],
-
ccb->param.create.parentName->value);
+ SaConstStringT parentName =
osaf_extended_name_borrow(ccb->param.create.parentName);
+ if (strlen(parentName) > 0) {
+ objectName = std::string(*(const SaStringT*)
ccb->param.create.attrValues[i]->attrValues[0])
+ + "," + parentName ;
} else {
- objectName.length = snprintf((char*)
objectName.value, sizeof(objectName.value),
- "%s", *(const SaStringT*)
ccb->param.create.attrValues[i]->attrValues[0]);
+ objectName = std::string(*(const SaStringT*)
ccb->param.create.attrValues[i]->attrValues[0]);
}
- if ((*stream = log_stream_new_2(&objectName,
STREAM_NEW)) == NULL) {
+ if ((*stream = log_stream_new(objectName, STREAM_NEW))
== NULL) {
rc = SA_AIS_ERR_NO_MEMORY;
goto done;
}
@@ -2203,7 +2212,7 @@ static SaAisErrorT stream_create_and_con
SaBoolT dummy;
char *logFileFormat = *((char **) value);
if
(!lgs_is_valid_format_expression(logFileFormat, (*stream)->streamType, &dummy))
{
- LOG_WA("Invalid logFileFormat for
stream %s, using default", (*stream)->name);
+ LOG_WA("Invalid logFileFormat for
stream %s, using default", (*stream)->name.c_str());
logFileFormat = const_cast<char
*>(static_cast<const char *>(
lgs_cfg_get(LGS_IMM_LOG_STREAM_FILE_FORMAT)));
}
@@ -2236,16 +2245,16 @@ static SaAisErrorT stream_create_and_con
}
/* Update creation timestamp */
- rc = immutil_update_one_rattr(lgs_cb->immOiHandle,
reinterpret_cast<const char *>(objectName.value),
-
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), SA_IMM_ATTR_SATIMET,
- &(*stream)->creationTimeStamp);
+ rc = immutil_update_one_rattr(lgs_cb->immOiHandle, objectName.c_str(),
+
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), SA_IMM_ATTR_SATIMET,
+ &(*stream)->creationTimeStamp);
if (rc != SA_AIS_OK) {
LOG_ER("immutil_update_one_rattr failed %s", saf_error(rc));
osaf_abort(0);
}
done:
- TRACE_LEAVE();
+ TRACE_LEAVE2("rc: %s", saf_error(rc));
return rc;
}
@@ -2254,7 +2263,7 @@ static void stream_ccb_apply_create(cons
SaAisErrorT rc;
log_stream_t *stream;
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
osaf_extended_name_borrow(&opdata->objectName));
if ((rc = stream_create_and_configure1(opdata, &stream)) == SA_AIS_OK) {
log_stream_open_fileinit(stream);
@@ -2276,10 +2285,10 @@ static void stream_ccb_apply_modify(cons
struct timespec curtime_tspec;
std::string fileName;
bool modify = false;
-
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
-
- stream = log_stream_get_by_name((char*)opdata->objectName.value);
+ SaConstStringT objName = osaf_extended_name_borrow(&opdata->objectName);
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName);
+
+ stream = log_stream_get_by_name(objName);
osafassert(stream);
current_logfile_name = stream->logFileCurrent;
@@ -2384,10 +2393,11 @@ static void stream_ccb_apply_delete(cons
struct timespec closetime_tspec;
osaf_clock_gettime(CLOCK_REALTIME, &closetime_tspec);
time_t file_closetime = closetime_tspec.tv_sec;
-
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
opdata->objectName.value);
-
- stream = log_stream_get_by_name((char *) opdata->objectName.value);
+ SaConstStringT objName = osaf_extended_name_borrow(&opdata->objectName);
+
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName);
+
+ stream = log_stream_get_by_name(objName);
/* Checkpoint to standby LOG server */
ckpt_stream_close(stream, file_closetime);
@@ -2448,7 +2458,7 @@ static void ccbApplyCallback(SaImmOiHand
break;
case CCBUTIL_DELETE:
case CCBUTIL_MODIFY:
- if (!strncmp((char*)opdata->objectName.value,
"safLgStrCfg", 11))
+ if
(!strncmp(osaf_extended_name_borrow(&opdata->objectName), "safLgStrCfg", 11))
stream_ccb_apply(opdata);
else
config_ccb_apply(opdata);
@@ -2495,8 +2505,8 @@ static SaAisErrorT rtAttrUpdateCallback(
SaAisErrorT rc = SA_AIS_ERR_FAILED_OPERATION;
SaImmAttrNameT attributeName;
int i = 0;
-
- TRACE_ENTER2("%s", objectName->value);
+ SaConstStringT objName = osaf_extended_name_borrow(objectName);
+ TRACE_ENTER2("%s", objName);
if (lgs_cb->ha_state != SA_AMF_HA_ACTIVE) {
LOG_ER("admin op callback in applier");
@@ -2504,17 +2514,16 @@ static SaAisErrorT rtAttrUpdateCallback(
}
/* Handle configuration runtime object */
- if (strncmp((char *) objectName->value, LGS_CFG_RUNTIME_OBJECT,
- objectName->length) == 0) {
+ if (strncmp(objName, LGS_CFG_RUNTIME_OBJECT, strlen(objName)) == 0) {
/* Handle Runtome configuration object */
conf_runtime_obj_hdl(immOiHandle, attributeNames);
} else {
/* Handle stream object if valid
*/
- log_stream_t *stream = log_stream_get_by_name((char
*)objectName->value);
+ log_stream_t *stream = log_stream_get_by_name(objName);
if (stream == NULL) {
- LOG_ER("%s: stream %s not found", __FUNCTION__,
objectName->value);
+ LOG_ER("%s: stream %s not found", __FUNCTION__,
objName);
goto done;
}
@@ -2523,12 +2532,12 @@ static SaAisErrorT rtAttrUpdateCallback(
rc = SA_AIS_OK;
if (!strcmp(attributeName, "saLogStreamNumOpeners")) {
rc = immutil_update_one_rattr(immOiHandle,
- (char *)objectName->value,
+ objName,
attributeName, SA_IMM_ATTR_SAUINT32T,
&stream->numOpeners);
} else if (!strcmp(attributeName,
"logStreamDiscardedCounter")) {
rc = immutil_update_one_rattr(immOiHandle,
- (char *) objectName->value,
+ objName,
attributeName, SA_IMM_ATTR_SAUINT64T,
&stream->filtered);
} else {
@@ -2562,7 +2571,7 @@ done:
*
* @return SaAisErrorT
*/
-static SaAisErrorT stream_create_and_configure(const char *dn,
+static SaAisErrorT stream_create_and_configure(const std::string &dn,
log_stream_t **in_stream, int stream_id,
SaImmAccessorHandleT accessorHandle)
{
@@ -2586,23 +2595,22 @@ static SaAisErrorT stream_create_and_con
NULL
};
- TRACE_ENTER2("(%s)", dn);
-
- strncpy((char *)objectName.value, dn, SA_MAX_NAME_LENGTH);
- objectName.length = strlen((char *)objectName.value);
-
- *in_stream = stream = log_stream_new_2(&objectName, stream_id);
+ TRACE_ENTER2("(%s)", dn.c_str());
+
+ osaf_extended_name_lend(dn.c_str(), &objectName);
+
+ *in_stream = stream = log_stream_new(dn, stream_id);
if (stream == NULL) {
rc = SA_AIS_ERR_NO_MEMORY;
goto done;
}
- if (strcmp(dn, SA_LOG_STREAM_ALARM) == 0)
+ if (dn == SA_LOG_STREAM_ALARM)
stream->streamType = STREAM_TYPE_ALARM;
- else if (strcmp(dn , SA_LOG_STREAM_NOTIFICATION) == 0)
+ else if (dn == SA_LOG_STREAM_NOTIFICATION)
stream->streamType = STREAM_TYPE_NOTIFICATION;
- else if (strcmp(dn , SA_LOG_STREAM_SYSTEM) == 0)
+ else if (dn == SA_LOG_STREAM_SYSTEM)
stream->streamType = STREAM_TYPE_SYSTEM;
else
stream->streamType = STREAM_TYPE_APPLICATION;
@@ -2612,7 +2620,7 @@ static SaAisErrorT stream_create_and_con
accessorHandle,
&objectName,
attribute_names, &attributes)) != SA_AIS_OK) {
- LOG_ER("Configuration for %s not found: %s", objectName.value,
saf_error(rc));
+ LOG_ER("Configuration for %s not found: %s", dn.c_str(),
saf_error(rc));
rc = SA_AIS_ERR_NOT_EXIST;
goto done;
}
@@ -2651,7 +2659,7 @@ static SaAisErrorT stream_create_and_con
SaBoolT dummy;
char *logFileFormat = *((char **)value);
if (!lgs_is_valid_format_expression(logFileFormat,
stream->streamType, &dummy)) {
- LOG_WA("Invalid logFileFormat for stream %s,
using default", stream->name);
+ LOG_WA("Invalid logFileFormat for stream %s,
using default", stream->name.c_str());
if (stream->streamType ==
STREAM_TYPE_APPLICATION) {
logFileFormat = const_cast<char
*>(static_cast<const char*>(
@@ -2696,7 +2704,7 @@ static SaAisErrorT stream_create_and_con
}
done:
- TRACE_LEAVE();
+ TRACE_LEAVE2("rc: %s", saf_error(rc));
return rc;
}
@@ -2734,7 +2742,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
SaImmAttrValuesT_2 **attributes;
int wellknownStreamId = 0;
int appStreamId = 3;
- int streamId = 0;
+ int streamId = 0, num;
SaNameT objectName;
const char *className = "SaLogStreamConfig";
@@ -2775,9 +2783,9 @@ SaAisErrorT lgs_imm_init_configStreams(l
*
* 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);
+ SaConstStringT name =
osaf_extended_name_borrow(&objectName);
+ streamId = is_well_know_stream(name)?
wellknownStreamId++:appStreamId++;
+ ais_rc = stream_create_and_configure(name, &stream,
streamId, accessorHandle);
if (ais_rc != SA_AIS_OK) {
LOG_WA("stream_create_and_configure failed %d",
ais_rc);
goto done;
@@ -2798,7 +2806,8 @@ SaAisErrorT lgs_imm_init_configStreams(l
osaf_abort(0);
}
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) {
if (cb->scAbsenceAllowed != 0) {
int_rc = log_stream_open_file_restore(stream);
@@ -2817,7 +2826,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
}
ais_rc = immutil_update_one_rattr(
- cb->immOiHandle, stream->name,
+ cb->immOiHandle, stream->name.c_str(),
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"),
SA_IMM_ATTR_SATIMET,
&stream->creationTimeStamp);
@@ -2826,7 +2835,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
osaf_abort(0);
}
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
done:
@@ -2846,7 +2855,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
LOG_NO("%s immutil_saImmOmFinalize() Fail %d",__FUNCTION__,
om_rc);
}
- TRACE_LEAVE();
+ TRACE_LEAVE2("rc: %s", saf_error(ais_rc));
return ais_rc;
}
@@ -2888,7 +2897,7 @@ void lgs_imm_init_OI_handle(SaImmOiHandl
lgs_exit("saImmOiSelectionObjectGet failed",
SA_AMF_COMPONENT_RESTART);
}
- TRACE_LEAVE();
+ TRACE_LEAVE2("rc: %s", saf_error(rc));
}
/**
@@ -2991,8 +3000,8 @@ static SaAisErrorT imm_impl_set_sequence
}
done:
+ TRACE_LEAVE2("rc: %s", saf_error(rc));
return rc;
- TRACE_LEAVE();
}
/**
@@ -3136,13 +3145,10 @@ void lgs_search_stream_objects()
searchParam.searchOneAttr.attrName = const_cast<char
*>("SaImmAttrClassName");
searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
searchParam.searchOneAttr.attrValue = &class_name;
- SaNameT root_name;
- root_name.value[0] = '\0';
- root_name.length = 1;
ais_rc = immutil_saImmOmSearchInitialize_2(
immOmHandle,
- &root_name,
+ NULL,
SA_IMM_SUBTREE,
SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_NO_ATTR,
&searchParam,
@@ -3164,13 +3170,13 @@ void lgs_search_stream_objects()
}
while (ais_rc == SA_AIS_OK) {
- TRACE("\tFound object \"%s\"", reinterpret_cast<char
*>(object_name.value));
+ SaConstStringT objName =
osaf_extended_name_borrow(&object_name);
+ TRACE("\tFound object \"%s\"", objName);
/* Add the string to the list
*/
- rc = log_rtobj_list_add(reinterpret_cast<char
*>(object_name.value));
+ rc = log_rtobj_list_add(objName);
if (rc == -1) {
- TRACE("%s Could not add %s to list Fail",
- __FUNCTION__, reinterpret_cast<char
*>(object_name.value));
+ TRACE("%s Could not add %s to list Fail", __FUNCTION__,
objName);
}
/* Get next object */
@@ -3199,33 +3205,29 @@ done_fin_Om:
}
done:
-
- TRACE_LEAVE();
+ TRACE_LEAVE2("rc: %s", saf_error(ais_rc));
}
-void lgs_delete_one_stream_object(char *name_str)
+void lgs_delete_one_stream_object(const std::string &name_str)
{
SaAisErrorT ais_rc = SA_AIS_OK;
SaNameT object_name;
- if (name_str == NULL) {
+ if (name_str.empty() == true) {
TRACE("%s No object name given", __FUNCTION__);
return;
}
/* Copy name to a SaNameT */
- (void) strncpy(reinterpret_cast<char *>(object_name.value),
- name_str, SA_MAX_NAME_LENGTH);
- object_name.length = strlen(name_str) + 1;
+ osaf_extended_name_lend(name_str.c_str(), &object_name);
/* and delete the object */
ais_rc = immutil_saImmOiRtObjectDelete(lgs_cb->immOiHandle,
&object_name);
if (ais_rc == SA_AIS_OK) {
- TRACE("%s Object \"%s\" deleted", __FUNCTION__,
- reinterpret_cast<char *>(object_name.value));
+ TRACE("%s Object \"%s\" deleted", __FUNCTION__,
name_str.c_str());
} else {
LOG_WA("%s saImmOiRtObjectDelete for \"%s\" FAILED %d",
- __FUNCTION__, reinterpret_cast<char
*>(object_name.value), ais_rc);
+ __FUNCTION__, name_str.c_str(), ais_rc);
}
}
@@ -3261,19 +3263,14 @@ void lgs_cleanup_abandoned_streams()
*/
if (name_str != NULL) {
/* Copy name to a SaNameT */
- (void) strncpy(reinterpret_cast<char
*>(object_name.value),
- name_str, SA_MAX_NAME_LENGTH);
- object_name.length = strlen(name_str) + 1;
+ osaf_extended_name_lend(name_str, &object_name);
/* and delete the object */
- ais_rc =
immutil_saImmOiRtObjectDelete(lgs_cb->immOiHandle,
- &object_name);
+ ais_rc =
immutil_saImmOiRtObjectDelete(lgs_cb->immOiHandle, &object_name);
if (ais_rc == SA_AIS_OK) {
- TRACE("\tObject \"%s\" deleted",
- reinterpret_cast<char
*>(object_name.value));
+ TRACE("\tObject \"%s\" deleted", name_str);
} else {
LOG_WA("%s saImmOiRtObjectDelete for \"%s\"
FAILED %d",
- __FUNCTION__,
- reinterpret_cast<char
*>(object_name.value), ais_rc);
+ __FUNCTION__, name_str, ais_rc);
}
} else {
/* Should never happen! */
@@ -3297,8 +3294,9 @@ void lgs_cleanup_abandoned_streams()
* @param immOmHandle[out]
* @return -1 on error
*/
-int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out, char
*object_name_in,
- SaImmHandleT *immOmHandle)
+int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out,
+ const std::string &object_name_in,
+ SaImmHandleT *immOmHandle)
{
int rc = 0;
SaAisErrorT ais_rc = SA_AIS_OK;
@@ -3317,10 +3315,10 @@ int lgs_get_streamobj_attr(SaImmAttrValu
NULL
};
- TRACE_ENTER2("object_name_in \"%s\"", object_name_in);
+ TRACE_ENTER2("object_name_in \"%s\"", object_name_in.c_str());
SaNameT object_name;
- if (object_name_in == NULL) {
+ if (object_name_in.empty() == true) {
TRACE("%s No object name given (NULL)", __FUNCTION__);
rc = -1;
goto done;
@@ -3345,9 +3343,7 @@ int lgs_get_streamobj_attr(SaImmAttrValu
goto done;
}
- strncpy(reinterpret_cast<char *>(object_name.value),
- object_name_in, SA_MAX_NAME_LENGTH);
- object_name.length = strlen(reinterpret_cast<char
*>(object_name.value)) + 1;
+ osaf_extended_name_lend(object_name_in.c_str(), &object_name);
ais_rc = immutil_saImmOmAccessorGet_2(accessorHandle, &object_name,
attribute_names, attrib_out);
@@ -3421,12 +3417,10 @@ SaUint32T *lgs_get_scAbsenceAllowed_attr
const_cast<char *>("scAbsenceAllowed"),
NULL
};
- char object_name_str[] = "opensafImm=opensafImm,safApp=safImmService";
+ std::string object_name_str =
"opensafImm=opensafImm,safApp=safImmService";
SaNameT object_name;
- strncpy(reinterpret_cast<char *>(object_name.value),
- object_name_str, SA_MAX_NAME_LENGTH);
- object_name.length = strlen(reinterpret_cast<char
*>(object_name.value)) + 1;
+ osaf_extended_name_lend(object_name_str.c_str(), &object_name);
/* Default restore handling shall be disabled. Is enabled if the
* scAbsenceAllowed attribute is not empty
diff --git a/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc
b/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc
--- a/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc
@@ -30,7 +30,7 @@
#include "immutil.h"
#include "osaf_time.h"
#include "osaf_poll.h"
-
+#include "osaf_extended_name.h"
/*
* Implements an IMM applier for the OpensafConfig class.
* Used for detecting changes of opensafNetworkName attribute.
@@ -362,7 +362,7 @@ static SaAisErrorT ccbObjectModifyCallba
SaAisErrorT rc = SA_AIS_OK;
struct CcbUtilCcbData *ccbUtilCcbData;
- TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value);
+ TRACE_ENTER2("CCB ID %llu, '%s'", ccbId,
osaf_extended_name_borrow(objectName));
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -414,6 +414,7 @@ static void ccbApplyCallback(SaImmOiHand
const SaImmAttrModificationT_2 *attrMod;
char *value_str = NULL;
int i = 0;
+ SaConstStringT objName;
TRACE_ENTER2("CCB ID %llu", ccbId);
@@ -432,10 +433,9 @@ static void ccbApplyCallback(SaImmOiHand
goto done;
}
- if (strncmp(reinterpret_cast<char *>(opdata->objectName.value),
- "opensafConfigId", sizeof("opensafConfigId") - 1) != 0) {
- TRACE("Object \"%s\" not a OpensafConfig object",
- reinterpret_cast<char *>(opdata->objectName.value));
+ objName = osaf_extended_name_borrow(&opdata->objectName);
+ if (strncmp(objName, "opensafConfigId", sizeof("opensafConfigId") - 1)
!= 0) {
+ TRACE("Object \"%s\" not a OpensafConfig object", objName);
goto done;
}
diff --git a/osaf/services/saf/logsv/lgs/lgs_main.cc
b/osaf/services/saf/logsv/lgs/lgs_main.cc
--- a/osaf/services/saf/logsv/lgs/lgs_main.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_main.cc
@@ -481,7 +481,12 @@ int main(int argc, char *argv[])
const time_t CLEAN_TIMEOUT = 600; /* 10 min */
daemonize(argc, argv);
-
+
+ if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0 ) {
+ LOG_ER("Failed to set SA_ENABLE_EXTENDED_NAMES (%s)",
strerror(errno));
+ goto done;
+ }
+
if (log_initialize() != NCSCC_RC_SUCCESS) {
LOG_ER("log_initialize failed");
goto done;
diff --git a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc
b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc
--- a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc
@@ -268,6 +268,8 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c
{
TRACE_ENTER();
NCS_MBCSV_ARG mbcsv_arg;
+ int num;
+
memset(&mbcsv_arg, '\0', sizeof(NCS_MBCSV_ARG));
/* Set the mbcsv args */
@@ -289,7 +291,8 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c
*/
log_stream_t *stream;
if (lgs_is_split_file_system()) {
- stream = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ stream = log_stream_get_by_id(--num);
while (stream != NULL) { /* Iterate over all streams */
if (ha_state == SA_AMF_HA_ACTIVE) {
stream->logFileCurrent =
stream->stb_logFileCurrent;
@@ -302,7 +305,7 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c
*stream->p_fd = -1; /* Reopen files */
}
- stream = log_stream_getnext_by_name(stream->name);
+ stream = log_stream_get_by_id(--num);
}
}
@@ -598,7 +601,7 @@ uint32_t lgs_ckpt_stream_open_set(log_st
stream_open->logPath = const_cast<char *>(logStream->pathName.c_str());
stream_open->logFileCurrent = const_cast<char
*>(logStream->logFileCurrent.c_str());
stream_open->fileFmt = logStream->logFileFormat;
- stream_open->logStreamName = logStream->name;
+ stream_open->logStreamName = const_cast<char
*>(logStream->name.c_str());
stream_open->maxFileSize = logStream->maxLogFileSize;
stream_open->maxLogRecordSize = logStream->fixedLogRecordSize;
stream_open->logFileFullAction = logStream->logFullAction;
@@ -625,6 +628,7 @@ static uint32_t edu_enc_streams(lgs_cb_t
uint32_t rc = NCSCC_RC_SUCCESS, num_rec = 0;
uint8_t *pheader = NULL;
lgsv_ckpt_header_t ckpt_hdr;
+ int num;
/* Prepare reg. structure to encode */
ckpt_stream_rec = static_cast<lgs_ckpt_stream_open_t
*>(malloc(sizeof(lgs_ckpt_stream_open_t)));
@@ -641,8 +645,9 @@ static uint32_t edu_enc_streams(lgs_cb_t
return (rc = EDU_ERR_MEM_FAIL);
}
ncs_enc_claim_space(uba, sizeof(lgsv_ckpt_header_t));
- log_stream_rec = log_stream_getnext_by_name(NULL);
+ num = get_number_of_streams();
+ log_stream_rec = log_stream_get_by_id(--num);
/* Walk through the reg list and encode record by record */
while (log_stream_rec != NULL) {
lgs_ckpt_stream_open_set(log_stream_rec, ckpt_stream_rec);
@@ -656,7 +661,7 @@ static uint32_t edu_enc_streams(lgs_cb_t
return rc;
}
++num_rec;
- log_stream_rec =
log_stream_getnext_by_name(log_stream_rec->name);
+ log_stream_rec = log_stream_get_by_id(--num);
} /* End while RegRec */
/* Encode RegHeader */
@@ -1581,8 +1586,8 @@ static void insert_localmsg_in_stream(lo
/* Construct logSvcUsrName for log service */
SaNameT logSvcUsrName;
- sprintf((char *)logSvcUsrName.value, "%s", "safApp=safLogService");
- logSvcUsrName.length = strlen((char *)logSvcUsrName.value);
+ SaConstStringT tmpSvcName = "safApp=safLogService";
+ osaf_extended_name_lend(tmpSvcName, &logSvcUsrName);
/* Create a log header corresponding to type of stream */
if ((stream->streamType == STREAM_TYPE_ALARM) ||
@@ -1834,7 +1839,7 @@ static uint32_t ckpt_proc_close_stream(l
goto done;
}
- TRACE("close stream %s, id: %u", stream->name, stream->streamId);
+ TRACE("close stream %s, id: %u", stream->name.c_str(),
stream->streamId);
if ((stream->numOpeners > 0) || (clientId < 0)){
/* No clients to remove if no openers or if closing a stream
opened
@@ -1868,7 +1873,7 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t
{
lgs_ckpt_stream_open_t *param;
log_stream_t *stream;
- int pos = 0;
+ int pos = 0, err = 0;
TRACE_ENTER();
@@ -1898,30 +1903,37 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t
*/
stream->numOpeners = param->numOpeners;
} else {
- SaNameT name;
+ TRACE("\tNew stream %s, id %u", param->logStreamName,
param->streamId);
- TRACE("\tNew stream %s, id %u", param->logStreamName,
param->streamId);
- strcpy((char *)name.value, param->logStreamName);
- name.length = strlen(param->logStreamName);
+ SaAisErrorT rc = SA_AIS_OK;
+ stream = log_stream_new(param->logStreamName, param->streamId);
+ if (stream == NULL) {
+ LOG_ER("Failed to create log stream %s",
param->logStreamName);
+ goto done;
- stream = log_stream_new_1(&name,
- param->logFile,
- param->logPath,
- param->maxFileSize,
- param->maxLogRecordSize,
- param->logFileFullAction,
- param->maxFilesRotated,
- param->fileFmt,
- param->streamType,
- param->streamId,
- SA_FALSE, // FIX sync or calculate?
- param->logRecordId,
- 0);
+ }
+ err = lgs_populate_log_stream(
+ param->logFile,
+ param->logPath,
+ param->maxFileSize,
+ param->maxLogRecordSize,
+ param->logFileFullAction,
+ param->maxFilesRotated,
+ param->fileFmt,
+ param->streamType,
+ SA_FALSE, // FIX sync or calculate?
+ param->logRecordId,
+ stream // output
+ );
- if (stream == NULL) {
- /* Do not allow standby to get out of sync */
- LOG_ER("%s - Failed to create stream '%s'",
__FUNCTION__,
- param->logStreamName);
+ if (err == -1) {
+ log_stream_delete(&stream);
+ goto done;
+ }
+
+ rc = lgs_create_rt_appstream(stream);
+ if (rc != SA_AIS_OK) {
+ log_stream_delete(&stream);
goto done;
}
@@ -2133,7 +2145,7 @@ static uint32_t ckpt_proc_cfg_stream(lgs
goto done;
}
- TRACE("config stream %s, id: %u", stream->name, stream->streamId);
+ TRACE("config stream %s, id: %u", stream->name.c_str(),
stream->streamId);
stream->act_last_close_timestamp = closetime; /* Not used if ver 1 */
stream->fileName = fileName;
stream->maxLogFileSize = maxLogFileSize;
diff --git a/osaf/services/saf/logsv/lgs/lgs_mds.cc
b/osaf/services/saf/logsv/lgs/lgs_mds.cc
--- a/osaf/services/saf/logsv/lgs/lgs_mds.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_mds.cc
@@ -19,6 +19,7 @@
#include "lgs.h"
#include "osaf_time.h"
+#include "osaf_extended_name.h"
#define LGS_SVC_PVT_SUBPART_VERSION 1
#define LGS_WRT_LGA_SUBPART_VER_AT_MIN_MSG_FMT 1
@@ -129,6 +130,7 @@ static uint32_t dec_lstr_open_sync_msg(N
uint32_t rc = NCSCC_RC_SUCCESS;
lgsv_stream_open_req_t *param =
&msg->info.api_info.param.lstr_open_sync;
uint8_t local_data[256];
+ char *str_name = NULL;
TRACE_ENTER();
// To make it safe when using free()
@@ -143,17 +145,28 @@ static uint32_t dec_lstr_open_sync_msg(N
/* log stream name length */
p8 = ncs_dec_flatten_space(uba, local_data, 2);
- param->lstr_name.length = ncs_decode_16bit(&p8);
+ size_t length = ncs_decode_16bit(&p8);
ncs_dec_skip_space(uba, 2);
- if (param->lstr_name.length >= SA_MAX_NAME_LENGTH) {
+ if (length >= kOsafMaxDnLength) {
TRACE("%s - lstr_name too long",__FUNCTION__);
rc = NCSCC_RC_FAILURE;
goto done;
}
/* log stream name */
- ncs_decode_n_octets_from_uba(uba, param->lstr_name.value,
(uint32_t)param->lstr_name.length);
+ str_name = static_cast<char *> (calloc(1, length + 1));
+ if (str_name == NULL) {
+ LOG_ER("Fail to allocated memory - str_name");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ ncs_decode_n_octets_from_uba(uba,
+ reinterpret_cast<uint8_t *>(str_name),
+ static_cast<uint32_t>(length));
+ osaf_extended_name_clear(¶m->lstr_name);
+ /* This allocated memory must be freed in proc_stream_open_msg @lgs_evt
*/
+ osaf_extended_name_alloc(str_name, ¶m->lstr_name);
/* log file name */
p8 = ncs_dec_flatten_space(uba, local_data, 2);
@@ -238,6 +251,8 @@ done_err:
free(param->logFileFmt);
done:
+ free(str_name);
+ str_name = NULL;
TRACE_8("LGSV_STREAM_OPEN_REQ");
return rc;
}
@@ -271,6 +286,156 @@ static uint32_t dec_lstr_close_msg(NCS_U
return rc;
}
+static uint32_t dec_write_ntf_log_header(NCS_UBAID *uba, SaLogNtfLogHeaderT
*const ntfLogH)
+{
+ uint8_t *p8;
+ uint8_t local_data[1024];
+ size_t notificationL, notifyingL;
+ uint32_t rc = NCSCC_RC_SUCCESS;
+ char *notificationObj = NULL;
+ char *notifyingObj = NULL;
+
+ ntfLogH->notificationObject = NULL;
+ ntfLogH->notifyingObject = NULL;
+ ntfLogH->notificationClassId = NULL;
+
+ p8 = ncs_dec_flatten_space(uba, local_data, 14);
+ ntfLogH->notificationId = ncs_decode_64bit(&p8);
+ ntfLogH->eventType =
static_cast<SaNtfEventTypeT>(ncs_decode_32bit(&p8));
+
+ ntfLogH->notificationObject = static_cast<SaNameT
*>(malloc(sizeof(SaNameT) + 1));
+ if (ntfLogH->notificationObject == NULL) {
+ LOG_WA("malloc FAILED");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+
+ notificationL = ncs_decode_16bit(&p8);
+ if (kOsafMaxDnLength <= notificationL) {
+ LOG_WA("notificationObject length is so long (max: %d)",
kOsafMaxDnLength);
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ ncs_dec_skip_space(uba, 14);
+
+ notificationObj = static_cast<char *> (calloc(1, notificationL + 1));
+ if (notificationObj == NULL) {
+ LOG_WA("Fail to allocated memory - notificationObj");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ ncs_decode_n_octets_from_uba(uba,
+ reinterpret_cast<uint8_t
*>(notificationObj),
+ static_cast<uint32_t>(notificationL));
+ osaf_extended_name_clear(ntfLogH->notificationObject);
+ osaf_extended_name_alloc(notificationObj, ntfLogH->notificationObject);
+
+ ntfLogH->notifyingObject = static_cast<SaNameT
*>(malloc(sizeof(SaNameT) + 1));
+ if (ntfLogH->notifyingObject == NULL) {
+ LOG_WA("malloc FAILED");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+
+ p8 = ncs_dec_flatten_space(uba, local_data, 2);
+ notifyingL = ncs_decode_16bit(&p8);
+ ncs_dec_skip_space(uba, 2);
+
+ if (kOsafMaxDnLength <= notifyingL) {
+ LOG_WA("notifyingObject is so long (max: %d)",
kOsafMaxDnLength);
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ notifyingObj = static_cast<char *> (calloc(1, notifyingL + 1));
+ if (notifyingObj == NULL) {
+ LOG_WA("Fail to allocated memory - notifyingObj");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ ncs_decode_n_octets_from_uba(uba,
+ reinterpret_cast<uint8_t *>(notifyingObj),
+ static_cast<uint32_t>(notifyingL));
+ osaf_extended_name_clear(ntfLogH->notifyingObject);
+ osaf_extended_name_alloc(notifyingObj, ntfLogH->notifyingObject);
+
+ ntfLogH->notificationClassId = static_cast<SaNtfClassIdT
*>(malloc(sizeof(SaNtfClassIdT)));
+ if (ntfLogH->notificationClassId == NULL) {
+ LOG_WA("malloc FAILED");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ p8 = ncs_dec_flatten_space(uba, local_data, 16);
+ ntfLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
+ ntfLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
+ ntfLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
+ ntfLogH->eventTime = ncs_decode_64bit(&p8);
+ ncs_dec_skip_space(uba, 16);
+
+done:
+ free(notificationObj);
+ free(notifyingObj);
+ TRACE("%s - rc = %d", __func__, rc);
+ return rc;
+}
+
+static uint32_t dec_write_gen_log_header(NCS_UBAID *uba,
SaLogGenericLogHeaderT *const genLogH)
+{
+ uint8_t *p8;
+ uint8_t local_data[1024];
+ size_t svcLength;
+ uint32_t rc = NCSCC_RC_SUCCESS;
+ char *logSvcUsrName = NULL;
+
+ genLogH->notificationClassId = NULL;
+ genLogH->logSvcUsrName = NULL;
+
+ genLogH->notificationClassId = static_cast<SaNtfClassIdT
*>(malloc(sizeof(SaNtfClassIdT)));
+ if (genLogH->notificationClassId == NULL) {
+ LOG_WA("malloc FAILED");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+
+ p8 = ncs_dec_flatten_space(uba, local_data, 10);
+ genLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
+ genLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
+ genLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
+
+ svcLength = ncs_decode_16bit(&p8);
+ if (kOsafMaxDnLength <= svcLength) {
+ LOG_WA("logSvcUsrName too big (max: %d)", kOsafMaxDnLength);
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ logSvcUsrName = static_cast<char *>(malloc(svcLength + 1));
+ if (logSvcUsrName == NULL) {
+ LOG_WA("malloc FAILED");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ genLogH->logSvcUsrName = static_cast<SaNameT *>(malloc(sizeof(SaNameT)
+ 1));
+ if (genLogH->logSvcUsrName == NULL) {
+ LOG_WA("malloc FAILED");
+ rc = NCSCC_RC_FAILURE;
+ goto done;
+ }
+ ncs_dec_skip_space(uba, 10);
+ ncs_decode_n_octets_from_uba(uba,
+ reinterpret_cast<uint8_t *>(logSvcUsrName),
+ static_cast<uint32_t>(svcLength));
+ osaf_extended_name_clear(const_cast<SaNameT *>(genLogH->logSvcUsrName));
+ osaf_extended_name_alloc(logSvcUsrName, const_cast<SaNameT
*>(genLogH->logSvcUsrName));
+
+ p8 = ncs_dec_flatten_space(uba, local_data, 2);
+ genLogH->logSeverity = ncs_decode_16bit(&p8);
+ ncs_dec_skip_space(uba, 2);
+
+done:
+ free(logSvcUsrName);
+ TRACE("%s - rc = %d", __func__, rc);
+ return rc;
+}
+
/****************************************************************************
Name : dec_write_log_async_msg
@@ -294,7 +459,6 @@ static uint32_t dec_write_log_async_msg(
* Note that more pointers has to be initiated in the allocation
sequence
* below.
*/
- SaNameT *logSvcUsrName = NULL;
SaLogNtfLogHeaderT *ntfLogH = NULL;
SaLogGenericLogHeaderT *genLogH = NULL;
param->logRecord = NULL;
@@ -330,109 +494,14 @@ static uint32_t dec_write_log_async_msg(
switch (param->logRecord->logHdrType) {
case SA_LOG_NTF_HEADER:
ntfLogH = ¶m->logRecord->logHeader.ntfHdr;
- /* Initiate log ntf header pointers */
- ntfLogH->notificationObject = NULL;
- ntfLogH->notifyingObject = NULL;
- ntfLogH->notificationClassId = NULL;
-
- p8 = ncs_dec_flatten_space(uba, local_data, 14);
- ntfLogH->notificationId = ncs_decode_64bit(&p8);
- ntfLogH->eventType =
static_cast<SaNtfEventTypeT>(ncs_decode_32bit(&p8));
-
- ntfLogH->notificationObject = static_cast<SaNameT
*>(malloc(sizeof(SaNameT) + 1));
- if (!ntfLogH->notificationObject) {
- LOG_WA("malloc FAILED");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
-
- ntfLogH->notificationObject->length = ncs_decode_16bit(&p8);
- if (SA_MAX_NAME_LENGTH <= ntfLogH->notificationObject->length) {
- TRACE("notificationObject to big");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
- ncs_dec_skip_space(uba, 14);
-
- ncs_decode_n_octets_from_uba(uba,
-
ntfLogH->notificationObject->value, ntfLogH->notificationObject->length);
-
ntfLogH->notificationObject->value[ntfLogH->notificationObject->length] = '\0';
-
- ntfLogH->notifyingObject = static_cast<SaNameT
*>(malloc(sizeof(SaNameT) + 1));
- if (!ntfLogH->notifyingObject) {
- LOG_WA("malloc FAILED");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
- p8 = ncs_dec_flatten_space(uba, local_data, 2);
- ntfLogH->notifyingObject->length = ncs_decode_16bit(&p8);
- ncs_dec_skip_space(uba, 2);
-
- if (SA_MAX_NAME_LENGTH <= ntfLogH->notifyingObject->length) {
- TRACE("notifyingObject to big");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
-
- ncs_decode_n_octets_from_uba(uba,
ntfLogH->notifyingObject->value, ntfLogH->notifyingObject->length);
-
ntfLogH->notifyingObject->value[ntfLogH->notifyingObject->length] = '\0';
-
- ntfLogH->notificationClassId = static_cast<SaNtfClassIdT
*>(malloc(sizeof(SaNtfClassIdT)));
- if (!ntfLogH->notificationClassId) {
- LOG_WA("malloc FAILED");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
- p8 = ncs_dec_flatten_space(uba, local_data, 16);
- ntfLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
- ntfLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
- ntfLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
- ntfLogH->eventTime = ncs_decode_64bit(&p8);
- ncs_dec_skip_space(uba, 16);
+ rc = dec_write_ntf_log_header(uba, ntfLogH);
+ if (rc != NCSCC_RC_SUCCESS) goto err_done;
break;
case SA_LOG_GENERIC_HEADER:
genLogH = ¶m->logRecord->logHeader.genericHdr;
- /* Initiate general header pointers */
- genLogH->notificationClassId = NULL;
-
- genLogH->notificationClassId = static_cast<SaNtfClassIdT
*>(malloc(sizeof(SaNtfClassIdT)));
- if (!genLogH->notificationClassId) {
- LOG_WA("malloc FAILED");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
- p8 = ncs_dec_flatten_space(uba, local_data, 10);
- genLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
- genLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
- genLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
-
- logSvcUsrName = static_cast<SaNameT *>(malloc(sizeof(SaNameT) +
1));
- if (!logSvcUsrName) {
- LOG_WA("malloc FAILED");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
-
- /*
- ** A const value in genLogHeader is fucking up...
- ** Extra instance used.
- */
- logSvcUsrName->length = ncs_decode_16bit(&p8);
-
- if (SA_MAX_NAME_LENGTH <= logSvcUsrName->length) {
- LOG_WA("logSvcUsrName too big");
- rc = NCSCC_RC_FAILURE;
- goto err_done;
- }
- ncs_dec_skip_space(uba, 10);
-
- ncs_decode_n_octets_from_uba(uba, logSvcUsrName->value,
logSvcUsrName->length);
- logSvcUsrName->value[logSvcUsrName->length] = '\0';
- genLogH->logSvcUsrName = logSvcUsrName;
- p8 = ncs_dec_flatten_space(uba, local_data, 2);
- genLogH->logSeverity = ncs_decode_16bit(&p8);
- ncs_dec_skip_space(uba, 2);
+ rc = dec_write_gen_log_header(uba, genLogH);
+ if (rc != NCSCC_RC_SUCCESS) goto err_done;
break;
default:
@@ -467,7 +536,7 @@ static uint32_t dec_write_log_async_msg(
param->logRecord->logBuffer->logBuf,
(uint32_t)param->logRecord->logBuffer->logBufSize);
}
-
+
/************ end saLogRecord decode ****************/
TRACE_8("LGSV_WRITE_LOG_ASYNC_REQ");
return rc;
@@ -483,24 +552,29 @@ static uint32_t dec_write_log_async_msg(
free(param->logRecord->logBuffer);
}
if (ntfLogH != NULL) { /* ¶m->logRecord->logHeader.ntfHdr */
- if (ntfLogH->notificationObject != NULL)
+ if (ntfLogH->notificationObject != NULL) {
+
osaf_extended_name_free(ntfLogH->notificationObject);
free(ntfLogH->notificationObject);
- if (ntfLogH->notifyingObject != NULL)
+ }
+ if (ntfLogH->notifyingObject != NULL) {
+
osaf_extended_name_free(ntfLogH->notifyingObject);
free(ntfLogH->notifyingObject);
+ }
if (ntfLogH->notificationClassId != NULL)
free(ntfLogH->notificationClassId);
}
if (genLogH != NULL) { /*
¶m->logRecord->logHeader.genericHdr */
if (genLogH->notificationClassId != NULL)
free(genLogH->notificationClassId);
+ if (genLogH->logSvcUsrName != NULL) {
+ osaf_extended_name_free(const_cast<SaNameT
*>(genLogH->logSvcUsrName));
+ free(const_cast<SaNameT
*>(genLogH->logSvcUsrName));
+
+ }
}
-
+
free(param->logRecord);
}
-
- if (logSvcUsrName != NULL)
- free(logSvcUsrName);
-
/************ end saLogRecord decode ****************/
TRACE_8("LGSV_WRITE_LOG_ASYNC_REQ (error)");
return rc;
diff --git a/osaf/services/saf/logsv/lgs/lgs_recov.cc
b/osaf/services/saf/logsv/lgs/lgs_recov.cc
--- a/osaf/services/saf/logsv/lgs/lgs_recov.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_recov.cc
@@ -93,7 +93,7 @@ void log_rtobj_list_free()
* @param dn_str[in] '\0' terminated string containing a dn
* @return -1 on error
*/
-int log_rtobj_list_add(char *dn_str)
+int log_rtobj_list_add(const std::string &dn_str)
{
char *str_ptr = NULL;
size_t len = 0;
@@ -116,8 +116,8 @@ int log_rtobj_list_add(char *dn_str)
}
/* Save dn string */
- len = strlen(dn_str) + 1; /* Including '\0' */
- if (len > SA_MAX_NAME_LENGTH) {
+ len = dn_str.size() + 1; /* Including '\0' */
+ if (len > kOsafMaxDnLength) {
/* Should never happen */
LOG_WA("%s\tToo long dn string!",__FUNCTION__);
rc = -1;
@@ -131,7 +131,7 @@ int log_rtobj_list_add(char *dn_str)
goto done;
}
- strcpy(str_ptr, dn_str);
+ strcpy(str_ptr, dn_str.c_str());
/* Add dn to list */
rtobj_list[rtobj_cnt] = str_ptr;
@@ -158,12 +158,12 @@ int log_rtobj_list_no()
* @param dn_str[in] '\0' terminated string with dn to find
* @return Position of found name or -1 if name not found
*/
-int log_rtobj_list_find(char *dn_str)
+int log_rtobj_list_find(const std::string &dn_str)
{
uint32_t i = 0;
int pos = -1;
- TRACE_ENTER2("dn_str \"%s\"", dn_str);
+ TRACE_ENTER2("dn_str \"%s\"", dn_str.c_str());
if (rtobj_list == NULL) {
TRACE("\t No rtobj_list exist");
@@ -173,7 +173,7 @@ int log_rtobj_list_find(char *dn_str)
for (i = 0; i < rtobj_list_len; i++) {
if (rtobj_list[i] == NULL)
continue;
- if (strcmp(rtobj_list[i], dn_str) == 0) {
+ if (strcmp(rtobj_list[i], dn_str.c_str()) == 0) {
/* Found! */
pos = (int) i;
break;
@@ -339,7 +339,7 @@ static void lgs_remove_stream(uint32_t c
* @return -1 on error
*/
int lgs_restore_one_app_stream(
- char *stream_name, uint32_t client_id,
+ const std::string &stream_name, uint32_t client_id,
log_stream_t **o_stream)
{
int int_rc = 0;
@@ -365,31 +365,27 @@ int lgs_restore_one_app_stream(
// Make it safe for free
par_out.curFileName = NULL;
- TRACE_ENTER2("object_name \"%s\", client_id=%d", stream_name,
client_id);
+ TRACE_ENTER2("object_name \"%s\", client_id=%d", stream_name.c_str(),
client_id);
memset(&open_stream_param, 0, sizeof(open_stream_param));
/* Check and save stream file name */
- if (stream_name == NULL) {
+ if (stream_name.empty() == true) {
TRACE("%s: No object name <NULL>", __FUNCTION__);
rc_out = -1;
goto done;
}
- n = snprintf(reinterpret_cast<char
*>(open_stream_param.lstr_name.value),
- SA_MAX_NAME_LENGTH, "%s", stream_name);
-
- open_stream_param.lstr_name.length = strlen(stream_name) + 1;
- if (n >= SA_MAX_NAME_LENGTH) {
- TRACE("Log stream name \"%s\" is truncated",
- open_stream_param.lstr_name.value);
+ if (stream_name.size() >= kOsafMaxDnLength) {
+ TRACE("Log stream name \"%s\" is truncated",
stream_name.c_str());
rc_out = -1;
goto done;
}
+ osaf_extended_name_lend(stream_name.c_str(),
&open_stream_param.lstr_name);
/* Check if in found objects list */
list_pos = log_rtobj_list_find(stream_name);
if (list_pos == -1) {
- TRACE("%s: No stream \"%s\" found to restore", __FUNCTION__,
stream_name);
+ TRACE("%s: No stream \"%s\" found to restore", __FUNCTION__,
stream_name.c_str());
rc_out = -1;
goto done;
}
@@ -726,7 +722,7 @@ int log_stream_open_file_restore(log_str
*/
if (par_out.curFileName == NULL) {
/* There is no current log file. Consider as logsv starts from
scratch */
- TRACE("\t Create new cfg/logfile for stream (%s)",
stream->name);
+ TRACE("\t Create new cfg/logfile for stream (%s)",
stream->name.c_str());
log_stream_open_fileinit(stream);
stream->creationTimeStamp = lgs_get_SaTime();
goto done;
@@ -774,7 +770,7 @@ done:
* @param stream_name[in] The name of the stream
* @return -1 on error
*/
-int log_close_rtstream_files(char *stream_name)
+int log_close_rtstream_files(const std::string &stream_name)
{
int int_rc = 0;
int rc_out = 0;
@@ -793,10 +789,10 @@ int log_close_rtstream_files(char *strea
// Make it safe for free
par_out.curFileName = NULL;
- TRACE_ENTER2("object_name \"%s\"", stream_name);
+ TRACE_ENTER2("object_name \"%s\"", stream_name.c_str());
/* Check and save stream file name */
- if (stream_name == NULL) {
+ if (stream_name.empty() == true) {
TRACE("%s: No object name <NULL>", __FUNCTION__);
rc_out = -1;
goto done;
@@ -878,7 +874,7 @@ int log_close_rtstream_files(char *strea
current_time, LGS_LOG_FILE_EXT, emptyStr);
if (int_rc == -1) {
LOG_WA("Failed to rename log file (%s) for stream (%s)",
- par_out.curFileName, stream_name);
+ par_out.curFileName, stream_name.c_str());
}
int_rc = lgs_file_rename_h(rootPath, pathName_bk, fileName,
@@ -886,7 +882,7 @@ int log_close_rtstream_files(char *strea
if (int_rc == -1) {
LOG_WA("Failed to rename configuration file (%s) for stream
(%s)",
- fileName.c_str(), stream_name);
+ fileName.c_str(), stream_name.c_str());
}
done_free_attr:
diff --git a/osaf/services/saf/logsv/lgs/lgs_recov.h
b/osaf/services/saf/logsv/lgs/lgs_recov.h
--- a/osaf/services/saf/logsv/lgs/lgs_recov.h
+++ b/osaf/services/saf/logsv/lgs/lgs_recov.h
@@ -20,19 +20,19 @@
#include "lgs.h"
-int log_rtobj_list_add(char *dn_str);
+int log_rtobj_list_add(const std::string &dn_str);
int log_rtobj_list_no();
-int log_rtobj_list_find(char *stream_name);
+int log_rtobj_list_find(const std::string &stream_name);
int log_rtobj_list_getnamepos();
char *log_rtobj_list_getname(int pos);
void log_rtobj_list_erase_one_pos(int pos);
void log_rtobj_list_free();
int lgs_restore_one_app_stream(
- char *stream_name,
+ const std::string &stream_name,
uint32_t client_id,
log_stream_t **o_stream
);
int log_stream_open_file_restore(log_stream_t *log_stream);
-int log_close_rtstream_files(char *stream_name);
+int log_close_rtstream_files(const std::string &stream_name);
#endif /* LGS_STATE_H */
diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc
b/osaf/services/saf/logsv/lgs/lgs_stream.cc
--- a/osaf/services/saf/logsv/lgs/lgs_stream.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc
@@ -31,11 +31,10 @@
#include "lgs_file.h"
#include "lgs_filehdl.h"
#include "osaf_time.h"
+#include "immutil.h"
#define DEFAULT_NUM_APP_LOG_STREAMS 64
-static NCS_PATRICIA_TREE stream_dn_tree;
-
static log_stream_t **stream_array;
/* We have at least the 3 well known streams. */
static unsigned int stream_array_size = 3;
@@ -104,6 +103,17 @@ done:
}
/**
+ * Get current number of openning streams
+ *
+ * @param: none
+ * @return current number of opening streams
+ */
+unsigned int get_number_of_streams()
+{
+ return numb_of_streams;
+}
+
+/**
* Close with retry at EINTR
*
* @param fd [in]
@@ -260,48 +270,6 @@ static int rotate_if_needed(log_stream_t
return rc;
}
-static uint32_t log_stream_add(NCS_PATRICIA_NODE *node, const char *key)
-{
- uint32_t rc = NCSCC_RC_SUCCESS;
-
- node->key_info = (uint8_t *)key;
-
- if ( NULL == ncs_patricia_tree_get(&stream_dn_tree,node->key_info)){
- rc = ncs_patricia_tree_add(&stream_dn_tree, node);
- if (rc != NCSCC_RC_SUCCESS) {
- LOG_WA("ncs_patricia_tree_add FAILED for '%s' %u", key,
rc);
- node->key_info = NULL;
- goto done;
- }
- }
-
- done:
- return rc;
-}
-
-static uint32_t log_stream_remove(const char *key)
-{
- uint32_t rc = NCSCC_RC_SUCCESS;
- log_stream_t *stream;
-
- stream = reinterpret_cast<log_stream_t
*>(ncs_patricia_tree_get(&stream_dn_tree, (uint8_t *)key));
- if (stream == NULL) {
- TRACE_2("ncs_patricia_tree_get FAILED");
- rc = NCSCC_RC_FAILURE;
- goto done;
- }
-
- if (ncs_patricia_tree_get(&stream_dn_tree,stream->pat_node.key_info)){
- if ((rc = ncs_patricia_tree_del(&stream_dn_tree,
&stream->pat_node)) != NCSCC_RC_SUCCESS) {
- LOG_WA("ncs_patricia_tree_del FAILED for '%s'
%u",key,rc);
- goto done;
- }
- }
-
- done:
- return rc;
-}
-
/**
* Initiate the files belonging to a stream
*
@@ -357,35 +325,11 @@ done:
TRACE_LEAVE();
}
-log_stream_t *log_stream_get_by_name(const char *name)
-{
- char nname[SA_MAX_NAME_LENGTH + 1];
-
- /* Create null-terminated stream name */
- strcpy(nname, name);
- memset(&nname[strlen(name)], 0, SA_MAX_NAME_LENGTH + 1 - strlen(name));
-
- return reinterpret_cast<log_stream_t
*>(ncs_patricia_tree_get(&stream_dn_tree, (uint8_t *)nname));
-}
-
-log_stream_t *log_stream_getnext_by_name(const char *name)
-{
- char nname[SA_MAX_NAME_LENGTH + 1];
-
- if (name != NULL) {
- /* Create SA_MAX_NAME_LENGTH stream name */
- strcpy(nname, name);
- memset(&nname[strlen(name)], 0, SA_MAX_NAME_LENGTH + 1 -
strlen(name));
- return reinterpret_cast<log_stream_t
*>(ncs_patricia_tree_getnext(&stream_dn_tree, (uint8_t *)nname));
- } else
- return reinterpret_cast<log_stream_t
*>(ncs_patricia_tree_getnext(&stream_dn_tree, NULL));
-}
-
void log_stream_print(log_stream_t *stream)
{
osafassert(stream != NULL);
- TRACE_2("******** Stream %s ********", stream->name);
+ TRACE_2("******** Stream %s ********", stream->name.c_str());
TRACE_2(" fileName: %s", stream->fileName.c_str());
TRACE_2(" pathName: %s", stream->pathName.c_str());
TRACE_2(" maxLogFileSize: %llu", stream->maxLogFileSize);
@@ -418,9 +362,6 @@ void log_free_stream_resources(log_strea
if (stream->streamId != 0)
lgs_stream_array_remove(stream->streamId);
- if (stream->pat_node.key_info != NULL)
- log_stream_remove(stream->name);
-
if (stream->logFileFormat != NULL)
free(stream->logFileFormat);
@@ -442,20 +383,19 @@ void log_stream_delete(log_stream_t **s)
osafassert(s != NULL && *s != NULL);
stream = *s;
- TRACE_ENTER2("%s", stream->name);
+ TRACE_ENTER2("%s", stream->name.c_str());
if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) {
if (stream->streamType == STREAM_TYPE_APPLICATION) {
SaAisErrorT rv;
TRACE("Stream is closed, I am HA active so remove IMM
object");
SaNameT objectName;
- strcpy((char *)objectName.value, stream->name);
- objectName.length = strlen((char *)objectName.value);
+ osaf_extended_name_lend(stream->name.c_str(),
&objectName);
rv = saImmOiRtObjectDelete(lgs_cb->immOiHandle,
&objectName);
if (rv != SA_AIS_OK) {
/* no retry; avoid blocking LOG service #1886 */
LOG_WA("saImmOiRtObjectDelete returned %u for
%s",
- rv, stream->name);
+ rv, stream->name.c_str());
}
}
}
@@ -463,9 +403,6 @@ void log_stream_delete(log_stream_t **s)
if (stream->streamId != 0)
lgs_stream_array_remove(stream->streamId);
- if (stream->pat_node.key_info != NULL)
- log_stream_remove(stream->name);
-
if (stream->logFileFormat != NULL)
free(stream->logFileFormat);
@@ -491,33 +428,7 @@ static void init_log_stream_fd(log_strea
*stream->p_fd = -1;
}
-/**
- * Create a new stream object. If HA state active, create the
- * correspronding IMM runtime object.
- *
- * Note: log_stream_new() is replaced by this function.
- * The new function is doing the same as the old but the possibility
- * to create a stream without creating a corresponding runtime object
- * is added. See creationFlag parameter
- *
- * Stream attributes[in]:
- * @param name
- * @param filename
- * @param pathname
- * @param maxLogFileSize
- * @param fixedLogRecordSize
- * @param logFullAction
- * @param maxFilesRotated
- * @param logFileFormat
- * @param streamType
- * @param stream_id
- * @param twelveHourModeFlag
- * @param logRecordId
- *
- * @return log_stream_t*
- */
-log_stream_t *log_stream_new_1(
- SaNameT *dn,
+int lgs_populate_log_stream(
const std::string &filename,
const std::string &pathname,
SaUint64T maxLogFileSize,
@@ -526,76 +437,51 @@ log_stream_t *log_stream_new_1(
SaUint32T maxFilesRotated,
const char *logFileFormat,
logStreamTypeT streamType,
- int stream_id,
SaBoolT twelveHourModeFlag,
uint32_t logRecordId,
- int creationFlag
+ log_stream_t *const o_stream
)
{
- int rc;
- log_stream_t *stream = NULL;
+ int rc = 0;
- osafassert(dn != NULL);
- TRACE_ENTER2("%s, l: %u", dn->value, dn->length);
+ o_stream->fileName = filename;
+ o_stream->pathName = pathname;
+ o_stream->maxLogFileSize = maxLogFileSize;
+ o_stream->fixedLogRecordSize = fixedLogRecordSize;
+ o_stream->haProperty = SA_TRUE;
+ o_stream->logFullAction = logFullAction;
+ o_stream->maxFilesRotated = maxFilesRotated;
+ o_stream->creationTimeStamp = lgs_get_SaTime();
+ o_stream->severityFilter = 0x7f; /* by default all levels are
allowed */
+ o_stream->streamType = streamType;
+ o_stream->twelveHourModeFlag = twelveHourModeFlag;
+ o_stream->logRecordId = logRecordId;
+ o_stream->stb_logRecordId = 0;
- if (lgs_relative_path_check_ts(pathname)) {
- goto done;
+ o_stream->logFileFormat = strdup(logFileFormat);
+ if (o_stream->logFileFormat == NULL) {
+ LOG_WA("Failed to allocate memory for logFileFormat");
+ rc = -1;
}
- stream = new (std::nothrow) log_stream_t();
- if (stream == NULL) {
- LOG_WA("log_stream_new calloc FAILED");
- goto done;
- }
- memcpy(stream->name, dn->value, dn->length);
- stream->name[SA_MAX_NAME_LENGTH] = '\0';
- stream->fileName = filename;
- stream->pathName = pathname;
- stream->maxLogFileSize = maxLogFileSize;
- stream->fixedLogRecordSize = fixedLogRecordSize;
- stream->haProperty = SA_TRUE;
- stream->logFullAction = logFullAction;
- stream->streamId = stream_id;
- stream->logFileFormat = strdup(logFileFormat);
- if (stream->logFileFormat == NULL) {
- log_stream_delete(&stream);
- goto done;
- }
- stream->maxFilesRotated = maxFilesRotated;
- stream->creationTimeStamp = lgs_get_SaTime();
- stream->severityFilter = 0x7f; /* by default all levels are allowed */
- stream->streamType = streamType;
- stream->twelveHourModeFlag = twelveHourModeFlag;
- stream->logRecordId = logRecordId;
- stream->stb_logRecordId = 0;
-
- /* Initiate local or shared stream file descriptor dependant on shared
or
- * split file system
- */
- init_log_stream_fd(stream);
+ return rc;
+}
- /* Add stream to tree */
- if (log_stream_add(&stream->pat_node, stream->name) !=
NCSCC_RC_SUCCESS) {
- log_stream_delete(&stream);
- goto done;
- }
+/**
+ * Create a new rt app stream object.
+ *
+ * @param rt runtimem app stream
+ * @return SaAisErrorT
+ */
+SaAisErrorT lgs_create_rt_appstream(log_stream_t *const rt)
+{
+ SaAisErrorT rc = SA_AIS_OK;
+ TRACE_ENTER2("%s, l: %lu", rt->name.c_str(), rt->name.size());
- /* Add stream to array */
- if (stream->streamId == kInvalidId)
- rc = lgs_stream_array_insert_new(stream, &stream->streamId);
- else
- rc = lgs_stream_array_insert(stream, stream->streamId);
-
- if (rc < 0) {
- LOG_WA("Add stream to array FAILED");
- log_stream_delete(&stream);
- goto done;
- }
-
- /* Create IMM runtime object for stream (if ACTIVE) */
+ /* Create IMM runtime object for rt (if ACTIVE) */
if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) {
- char *dndup = strdup(stream->name);
- char *parent_name = strchr(stream->name, ',');
+ char *dndup = strdup(rt->name.c_str());
+ char *parent_name = strchr(const_cast<char
*>(rt->name.c_str()), ',');
char *rdnstr;
SaNameT parent, *parentName = NULL;
@@ -603,10 +489,9 @@ log_stream_t *log_stream_new_1(
rdnstr = strtok(dndup, ",");
parent_name++; /* FIX, vulnerable for malformed DNs */
parentName = &parent;
- strcpy((char *)parent.value, parent_name);
- parent.length = strlen((char *)parent.value);
+ osaf_extended_name_lend(parent_name, &parent);
} else
- rdnstr = stream->name;
+ rdnstr = const_cast<char *>(rt->name.c_str());
void *arr1[] = { &rdnstr };
const SaImmAttrValuesT_2 attr_safLgStr = {
@@ -615,7 +500,7 @@ log_stream_t *log_stream_new_1(
.attrValuesNumber = 1,
.attrValues = arr1
};
- char *str2 = const_cast<char *>(stream->fileName.c_str());
+ char *str2 = const_cast<char *>(rt->fileName.c_str());
void *arr2[] = { &str2 };
const SaImmAttrValuesT_2 attr_safLogStreamFileName = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamFileName"),
@@ -623,7 +508,7 @@ log_stream_t *log_stream_new_1(
.attrValuesNumber = 1,
.attrValues = arr2
};
- char *str3 = const_cast<char *>(stream->pathName.c_str());
+ char *str3 = const_cast<char *>(rt->pathName.c_str());
void *arr3[] = { &str3 };
const SaImmAttrValuesT_2 attr_safLogStreamPathName = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamPathName"),
@@ -631,42 +516,42 @@ log_stream_t *log_stream_new_1(
.attrValuesNumber = 1,
.attrValues = arr3
};
- void *arr4[] = { &stream->maxLogFileSize };
+ void *arr4[] = { &rt->maxLogFileSize };
const SaImmAttrValuesT_2 attr_saLogStreamMaxLogFileSize = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamMaxLogFileSize"),
.attrValueType = SA_IMM_ATTR_SAUINT64T,
.attrValuesNumber = 1,
.attrValues = arr4
};
- void *arr5[] = { &stream->fixedLogRecordSize };
+ void *arr5[] = { &rt->fixedLogRecordSize };
const SaImmAttrValuesT_2 attr_saLogStreamFixedLogRecordSize = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamFixedLogRecordSize"),
.attrValueType = SA_IMM_ATTR_SAUINT32T,
.attrValuesNumber = 1,
.attrValues = arr5
};
- void *arr6[] = { &stream->haProperty };
+ void *arr6[] = { &rt->haProperty };
const SaImmAttrValuesT_2 attr_saLogStreamHaProperty = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamHaProperty"),
.attrValueType = SA_IMM_ATTR_SAUINT32T,
.attrValuesNumber = 1,
.attrValues = arr6
};
- void *arr7[] = { &stream->logFullAction };
+ void *arr7[] = { &rt->logFullAction };
const SaImmAttrValuesT_2 attr_saLogStreamLogFullAction = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamLogFullAction"),
.attrValueType = SA_IMM_ATTR_SAUINT32T,
.attrValuesNumber = 1,
.attrValues = arr7
};
- void *arr8[] = { &stream->maxFilesRotated };
+ void *arr8[] = { &rt->maxFilesRotated };
const SaImmAttrValuesT_2 attr_saLogStreamMaxFilesRotated = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamMaxFilesRotated"),
.attrValueType = SA_IMM_ATTR_SAUINT32T,
.attrValuesNumber = 1,
.attrValues = arr8
};
- char *str9 = stream->logFileFormat;
+ char *str9 = rt->logFileFormat;
void *arr9[] = { &str9 };
const SaImmAttrValuesT_2 attr_saLogStreamLogFileFormat = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamLogFileFormat"),
@@ -674,14 +559,14 @@ log_stream_t *log_stream_new_1(
.attrValuesNumber = 1,
.attrValues = arr9
};
- void *arr10[] = { &stream->severityFilter };
+ void *arr10[] = { &rt->severityFilter };
const SaImmAttrValuesT_2 attr_saLogStreamSeverityFilter = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamSeverityFilter"),
.attrValueType = SA_IMM_ATTR_SAUINT32T,
.attrValuesNumber = 1,
.attrValues = arr10
};
- void *arr11[] = { &stream->creationTimeStamp };
+ void *arr11[] = { &rt->creationTimeStamp };
const SaImmAttrValuesT_2 attr_saLogStreamCreationTimestamp = {
.attrName =
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"),
.attrValueType = SA_IMM_ATTR_SATIMET,
@@ -703,26 +588,26 @@ log_stream_t *log_stream_new_1(
NULL
};
- /* parentName needs to be configurable? */
{
- SaAisErrorT rv;
-
- rv = saImmOiRtObjectCreate_2(lgs_cb->immOiHandle,
+ /**
+ * Have to have retry for Rt creation.
+ * Rt update could consider removing retry to avoid
blocking
+ */
+ rc =
immutil_saImmOiRtObjectCreate_2(lgs_cb->immOiHandle,
const_cast<SaImmClassNameT>("SaLogStream"),
parentName, attrValues);
free(dndup);
- if (rv != SA_AIS_OK) {
- /* no retry; avoid blocking LOG service #1886 */
+ if (rc != SA_AIS_OK) {
LOG_WA("saImmOiRtObjectCreate_2 returned %u for
%s, parent %s",
- rv, stream->name, parent_name);
+ rc, rt->name.c_str(), parent_name);
+
}
}
}
- done:
- TRACE_LEAVE();
- return stream;
+ TRACE_LEAVE2("rc: %s", saf_error(rc));
+ return rc;
}
/**
@@ -732,21 +617,19 @@ log_stream_t *log_stream_new_1(
*
* @return log_stream_t*
*/
-log_stream_t *log_stream_new_2(SaNameT *name, int stream_id)
+log_stream_t *log_stream_new(const std::string &name, int stream_id)
{
- int rc;
+ int rc = 0;
log_stream_t *stream = NULL;
- osafassert(name != NULL);
- TRACE_ENTER2("%s, l: %u", name->value, (unsigned int)name->length);
+ TRACE_ENTER2("%s, l: %lu", name.c_str(), name.size());
stream = new (std::nothrow) log_stream_t();
if (stream == NULL) {
LOG_WA("calloc FAILED");
goto done;
}
- memcpy(stream->name, name->value, name->length);
- stream->name[SA_MAX_NAME_LENGTH] = '\0';
+ stream->name = name;
stream->streamId = stream_id;
stream->creationTimeStamp = lgs_get_SaTime();
stream->severityFilter = 0x7f; /* by default all levels are allowed */
@@ -756,12 +639,6 @@ log_stream_t *log_stream_new_2(SaNameT *
*/
init_log_stream_fd(stream);
- /* Add stream to tree */
- if (log_stream_add(&stream->pat_node, stream->name) !=
NCSCC_RC_SUCCESS) {
- log_stream_delete(&stream);
- goto done;
- }
-
/* Add stream to array */
if (stream->streamId == kInvalidId)
rc = lgs_stream_array_insert_new(stream, &stream->streamId);
@@ -774,7 +651,7 @@ log_stream_t *log_stream_new_2(SaNameT *
}
done:
- TRACE_LEAVE();
+ TRACE_LEAVE2("rc: %d", rc);
return stream;
}
@@ -834,7 +711,7 @@ int log_file_open(
*/
void log_stream_open_fileinit(log_stream_t *stream)
{
- TRACE_ENTER2("%s, numOpeners=%u", stream->name, stream->numOpeners);
+ TRACE_ENTER2("%s, numOpeners=%u", stream->name.c_str(),
stream->numOpeners);
osafassert(stream != NULL);
/* first time open? */
@@ -882,7 +759,7 @@ void log_stream_close(log_stream_t **s,
lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY));
osafassert(stream != NULL);
- TRACE_ENTER2("%s", stream->name);
+ TRACE_ENTER2("%s", stream->name.c_str());
osafassert(stream->numOpeners > 0);
stream->numOpeners--;
@@ -979,7 +856,7 @@ int log_stream_file_close(log_stream_t *
int errno_ret;
osafassert(stream != NULL);
- TRACE_ENTER2("%s", stream->name);
+ TRACE_ENTER2("%s", stream->name.c_str());
osafassert(stream->numOpeners > 0);
@@ -1254,7 +1131,7 @@ int log_stream_write_h(log_stream_t *str
int write_errno=0;
osafassert(stream != NULL && buf != NULL);
- TRACE_ENTER2("%s", stream->name);
+ TRACE_ENTER2("%s", stream->name.c_str());
/* Open files on demand e.g. on new active after fail/switch-over. This
* enables LOG to cope with temporary file system problems. */
@@ -1266,7 +1143,7 @@ int log_stream_write_h(log_stream_t *str
if (*stream->p_fd == -1) {
TRACE("%s - Initiating stream files \"%s\" Failed",
__FUNCTION__,
- stream->name);
+ stream->name.c_str());
} else {
TRACE("%s - stream files initiated", __FUNCTION__);
}
@@ -1371,6 +1248,26 @@ log_stream_t *log_stream_get_by_id(uint3
}
/**
+ * Get the stream from database stream_array by its name (dn)
+ *
+ * @param name stream name (dn)
+ * @ret pointer to log_stream_t
+ */
+log_stream_t *log_stream_get_by_name(const std::string &name)
+{
+ log_stream_t *tmp = NULL;
+ uint32_t i = 0;
+
+ for (i = 0; i < stream_array_size; i++) {
+ tmp = stream_array[i];
+ if (tmp != NULL && name == tmp->name) return tmp;
+ }
+
+ return NULL;
+
+}
+
+/**
* Insert stream into array at specified position.
* @param stream
* @param id
@@ -1466,13 +1363,12 @@ void log_stream_id_print()
TRACE(" Current number of streams: %u", numb_of_streams);
for (i = 0; i < stream_array_size; i++) {
if (stream_array[i] != NULL)
- TRACE(" Id %u - %s", i, stream_array[i]->name);
+ TRACE(" Id %u - %s", i,
stream_array[i]->name.c_str());
}
}
uint32_t log_stream_init()
{
- NCS_PATRICIA_PARAMS param;
SaUint32T value;
/* Get configuration of how many application streams we should allow. */
@@ -1486,11 +1382,7 @@ uint32_t log_stream_init()
return NCSCC_RC_FAILURE;
}
- memset(¶m, 0, sizeof(NCS_PATRICIA_PARAMS));
-
- param.key_size = SA_MAX_NAME_LENGTH;
-
- return ncs_patricia_tree_init(&stream_dn_tree, ¶m);
+ return NCSCC_RC_SUCCESS;
}
/**
@@ -1519,7 +1411,7 @@ int log_stream_config_change(bool create
char *current_time = lgs_get_time(cur_time_in);
std::string emptyStr = "";
- TRACE_ENTER2("%s", stream->name);
+ TRACE_ENTER2("%s", stream->name.c_str());
/* Peer sync needed due to change in logFileCurrent */
@@ -1527,7 +1419,7 @@ int log_stream_config_change(bool create
/* lgs has not yet recieved any stream operation request after
this swtchover/failover.
* stream shall be opened on-request after a switchover,
failover
*/
- TRACE("log file of the stream: %s does not exist",stream->name);
+ TRACE("log file of the stream: %s does not exist",
stream->name.c_str());
} else {
/* close the existing log file, and only when there is a valid
fd */
diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.h
b/osaf/services/saf/logsv/lgs/lgs_stream.h
--- a/osaf/services/saf/logsv/lgs/lgs_stream.h
+++ b/osaf/services/saf/logsv/lgs/lgs_stream.h
@@ -24,6 +24,7 @@
#include <limits.h>
#include "lgs_fmt.h"
+#include "osaf_extended_name.h"
#define LGS_LOG_FILE_EXT ".log"
#define LGS_LOG_FILE_CONFIG_EXT ".cfg"
@@ -34,10 +35,8 @@
* attributes like file descriptor.
*/
typedef struct log_stream {
- NCS_PATRICIA_NODE pat_node;
-
/* --- Corresponds to IMM Class SaLogStream/SaLogStreamConfig --- */
- char name[SA_MAX_NAME_LENGTH + 1]; /* add for null termination */
+ std::string name;
std::string fileName;
std::string pathName;
SaUint64T maxLogFileSize;
@@ -82,8 +81,7 @@ extern uint32_t log_stream_init();
extern void log_stream_delete(log_stream_t **s);
#define STREAM_NEW -1
-extern log_stream_t *log_stream_new_1(
- SaNameT *name,
+extern int lgs_populate_log_stream(
const std::string &filename,
const std::string &pathname,
SaUint64T maxLogFileSize,
@@ -92,13 +90,13 @@ extern log_stream_t *log_stream_new_1(
SaUint32T maxFilesRotated,
const char *logFileFormat,
logStreamTypeT streamType,
- int stream_id,
SaBoolT twelveHourModeFlag,
uint32_t logRecordId,
- int creationFlag
+ log_stream_t *const o_stream
);
-extern log_stream_t *log_stream_new_2(SaNameT *name, int stream_id);
+extern SaAisErrorT lgs_create_rt_appstream(log_stream_t *const rt);
+extern log_stream_t *log_stream_new(const std::string &name, int stream_id);
extern void log_stream_open_fileinit(log_stream_t *stream);
extern void log_initiate_stream_files(log_stream_t *stream);
@@ -120,11 +118,11 @@ extern int log_file_open(const std::stri
int *errno_save);
/* Accessor functions */
-extern log_stream_t *log_stream_get_by_name(const char *name);
-extern log_stream_t *log_stream_getnext_by_name(const char *name);
extern void log_stream_print(log_stream_t *stream);
extern log_stream_t *log_stream_get_by_id(uint32_t id);
extern bool check_max_stream();
void log_free_stream_resources(log_stream_t *stream);
+unsigned int get_number_of_streams();
+extern log_stream_t *log_stream_get_by_name(const std::string &name);
#endif
diff --git a/osaf/services/saf/logsv/lgs/lgs_util.cc
b/osaf/services/saf/logsv/lgs/lgs_util.cc
--- a/osaf/services/saf/logsv/lgs/lgs_util.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_util.cc
@@ -420,11 +420,14 @@ void lgs_send_write_log_ack(uint32_t cli
*/
void lgs_free_write_log(const lgsv_write_log_async_req_t *param)
{
+ TRACE_ENTER();
+
if (param->logRecord->logHdrType == SA_LOG_GENERIC_HEADER) {
SaLogGenericLogHeaderT *genLogH =
¶m->logRecord->logHeader.genericHdr;
free(param->logRecord->logBuffer->logBuf);
free(param->logRecord->logBuffer);
free(genLogH->notificationClassId);
+ osaf_extended_name_free(const_cast<SaNameT
*>(genLogH->logSvcUsrName));
free((void *)genLogH->logSvcUsrName);
free(param->logRecord);
} else {
@@ -432,10 +435,14 @@ void lgs_free_write_log(const lgsv_write
free(param->logRecord->logBuffer->logBuf);
free(param->logRecord->logBuffer);
free(ntfLogH->notificationClassId);
+ osaf_extended_name_free(ntfLogH->notifyingObject);
free(ntfLogH->notifyingObject);
+ osaf_extended_name_free(ntfLogH->notificationObject);
free(ntfLogH->notificationObject);
free(param->logRecord);
}
+
+ TRACE_LEAVE();
}
/**
@@ -593,7 +600,7 @@ int lgs_own_log_files_h(log_stream_t *st
std::string dir_path;
olfbgh_t *data_in = static_cast<olfbgh_t *>(malloc(sizeof(olfbgh_t)));
- TRACE_ENTER2("stream %s",stream->name);
+ TRACE_ENTER2("stream %s", stream->name.c_str());
/* Set in parameter dir_path */
const std::string logsv_root_dir = static_cast<const char
*>(lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY));
@@ -834,3 +841,19 @@ bool lgs_is_valid_pathlength(const std::
return ((rootlen + pathlen + filelen + LOG_TAIL_MAX) < PATH_MAX);
}
+
+/**
+ * Check if the name is valid or not.
+ */
+bool lgs_is_extended_name_valid(const SaNameT* name)
+{
+
+ if (name == NULL) return false;
+ if (osaf_is_extended_name_valid(name) == false) return false;
+
+ SaConstStringT str = osaf_extended_name_borrow(name);
+ if (strlen(str) >= kOsafMaxDnLength) return false;
+
+ return true;
+
+}
diff --git a/osaf/services/saf/logsv/lgs/lgs_util.h
b/osaf/services/saf/logsv/lgs/lgs_util.h
--- a/osaf/services/saf/logsv/lgs/lgs_util.h
+++ b/osaf/services/saf/logsv/lgs/lgs_util.h
@@ -81,4 +81,6 @@ bool lgs_is_valid_pathlength(const std::
int lgs_init_timer(time_t timeout_s);
void lgs_close_timer(int ufd);
+bool lgs_is_extended_name_valid(const SaNameT* name);
+
#endif /* ifndef __LGS_UTIL_H */
------------------------------------------------------------------------------
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