# HG changeset patch
# User Vu Minh Nguyen <vu.m.nguyen@dektech.com.au>
# Date 1456307399 -25200
#      Wed Feb 24 16:49:59 2016 +0700
# Node ID 7988d8d180ea5390b7f4edcec5464e3b22ffb677
# Parent  2a2bbe27821b90e47bab5db9e82a2c267390288c
log: add support for cloud resilience feature [#1179]

Fix code regarding review comments.

diff --git a/osaf/libs/agents/saf/lga/lga_api.c b/osaf/libs/agents/saf/lga/lga_api.c
--- a/osaf/libs/agents/saf/lga/lga_api.c
+++ b/osaf/libs/agents/saf/lga/lga_api.c
@@ -1291,14 +1291,6 @@ SaAisErrorT saLogStreamClose(SaLogStream
 		goto done_give_hdl_stream;
 	}
 
-	if (lga_state == LGA_NO_SERVER) {
-		/* We have no server and cannot write. The client may try again
-		 */
-		TRACE("%s No server", __FUNCTION__);
-		ais_rc = SA_AIS_ERR_TRY_AGAIN;
-		goto done_give_hdl_stream;
-	}
-
 	if (lga_state == LGA_RECOVERY2) {
 		/* Auto recovery is ongoing. We have to wait for it to finish.
 		 * The client may try again
@@ -1316,6 +1308,15 @@ SaAisErrorT saLogStreamClose(SaLogStream
 		goto done_give_hdl_stream;
 	}
 
+	if (lga_state == LGA_NO_SERVER) {
+		/* No server is available. Remove the stream from client database.
+		 * Server side will manage to release resources of this stream when up.
+		 */
+		TRACE("%s No server", __FUNCTION__);
+		ais_rc = SA_AIS_OK;
+		goto rmv_stream;
+	}
+
 	if (lga_state == LGA_RECOVERY1) {
 		/* We are in recovery 1 state.
 		 * Recover client and execute the request
@@ -1367,6 +1368,7 @@ SaAisErrorT saLogStreamClose(SaLogStream
 	} else
 		ais_rc = SA_AIS_ERR_NO_RESOURCES;
 
+rmv_stream:
 	if (ais_rc == SA_AIS_OK) {
 		pthread_mutex_lock(&lga_cb.cb_lock);
 
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
@@ -377,7 +377,7 @@ static uint32_t proc_lga_updn_mds_msg(lg
 		break;
 
 	case LGSV_LGS_EVT_LGA_DOWN:
-		TRACE("%s: LGSV_LGS_EVT_LGA_DOWN mds_dest = %" PRIu64,
+		TRACE("%s: LGSV_LGS_EVT_LGA_DOWN mds_dest = %" PRIx64,
 		      __FUNCTION__, evt->fr_dest);
 		if ((lgs_cb->ha_state == SA_AMF_HA_ACTIVE) || (lgs_cb->ha_state == SA_AMF_HA_QUIESCED)) {
 		/* Remove this LGA entry from our processing lists */
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
@@ -3161,10 +3161,10 @@ void lgs_delete_one_stream_object(char *
  */
 void lgs_clean_stream_objects(void)
 {
-	SaAisErrorT ais_rc = SA_AIS_OK;
 	int pos = 0;
 	char *name_str;
-	SaNameT object_name;
+	log_stream_t *logStream;
+	time_t file_closetime = 0;
 
 	TRACE_ENTER();
 	/* Check if there are any objects to delete. If not do nothing  */
@@ -3173,44 +3173,18 @@ void lgs_clean_stream_objects(void)
 		return;
 	}
 
-	/* Save immutil settings and reconfigure */
-	struct ImmutilWrapperProfile tmp_immutilWrapperProfile;
-	tmp_immutilWrapperProfile.errorsAreFatal = immutilWrapperProfile.errorsAreFatal;
-	tmp_immutilWrapperProfile.nTries = immutilWrapperProfile.nTries;
-	tmp_immutilWrapperProfile.retryInterval = immutilWrapperProfile.retryInterval;
-
-	immutilWrapperProfile.errorsAreFatal = 0;
-	immutilWrapperProfile.nTries = 500;
-	immutilWrapperProfile.retryInterval = 1000;
-
 	pos = log_rtobj_list_getnamepos();
 	while (pos != -1) {
 		/* Get found name */
 		name_str = log_rtobj_list_getname(pos);
 
-		/* Delete the object if in object list. Note this is an Oi operation
-		 * Remove name from list
-		 */
-		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;
-			/* and delete the object */
-			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));
-			} else {
-				LOG_WA("%s saImmOiRtObjectDelete for \"%s\" FAILED %d",
-				       __FUNCTION__,
-				       reinterpret_cast<char *>(object_name.value), ais_rc);
-			}
+		logStream = log_stream_get_by_name(name_str);
+		if (logStream != NULL) {
+			log_stream_close(&logStream, &file_closetime);
 		} else {
-			/* Should never happen! */
-			TRACE("%s\tFound name has NULL pointer!", __FUNCTION__);
+			LOG_WA("Close the recovery log stream failed");
 		}
+
 		/* Remove deleted object name from list */
 		log_rtobj_list_erase_one_pos(pos);
 
@@ -3218,11 +3192,6 @@ void lgs_clean_stream_objects(void)
 		pos = log_rtobj_list_getnamepos();
 	}
 
-	/* Restore immutil settings */
-	immutilWrapperProfile.errorsAreFatal = tmp_immutilWrapperProfile.errorsAreFatal;
-	immutilWrapperProfile.nTries = tmp_immutilWrapperProfile.nTries;
-	immutilWrapperProfile.retryInterval = tmp_immutilWrapperProfile.retryInterval;
-
 	TRACE_LEAVE();
 }
 
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
@@ -410,7 +410,7 @@ void lgs_send_write_log_ack(uint32_t cli
 
 	rc = ncsmds_api(&mds_info);
 	if (rc != NCSCC_RC_SUCCESS)
-		LOG_NO("Failed (%u) to send of WRITE ack to: %" PRIu64, rc, mds_dest);
+		LOG_NO("Failed (%u) to send of WRITE ack to: %" PRIx64, rc, mds_dest);
 
 	TRACE_LEAVE();
 }
