# 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 5def3d965b4cd295b3c5029993060e8fa4f25d18
# 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_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
@@ -3165,6 +3165,8 @@ void lgs_clean_stream_objects(void)
 	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  */
@@ -3188,6 +3190,13 @@ void lgs_clean_stream_objects(void)
 		/* Get found name */
 		name_str = log_rtobj_list_getname(pos);
 
+		logStream = log_stream_get_by_name(name_str);
+		if (logStream != NULL) {
+			log_stream_close(&logStream, &file_closetime);
+		} else {
+			LOG_WA("Close the recovery log stream failed");
+		}
+
 		/* Delete the object if in object list. Note this is an Oi operation
 		 * Remove name from list
 		 */
