VOL-253: grpc-c was crashed if we configured wrong VOLTHA IP address
Fix for grpc-c crash, dying gas alarm, kpis and packet data
Change-Id: I172e64afa0f9e9c1492f4871b6fa7ae3152065cd
diff --git a/device_simulator/client.c.patch b/device_simulator/client.c.patch
index 7de4dd1..c77a281 100644
--- a/device_simulator/client.c.patch
+++ b/device_simulator/client.c.patch
@@ -35,3 +35,15 @@
context = gc_client_prepare_ops(client, mdarray, 1, input, NULL,
client_streaming, server_streaming, NULL,
+***************
+--- grpc-c_orig/lib/client.c 2017-09-19 21:08:29.506546198 +0530
++++ grpc-c/lib/client.c 2017-09-19 21:10:52.137702783 +0530
+@@ -967,7 +967,6 @@
+
+ if (*output == NULL) {
+ grpc_c_context_free(context);
+- gpr_log(GPR_ERROR, "No output to return");
+ rc = GRPC_C_FAIL;
+ goto cleanup;
+ }
+
diff --git a/device_simulator/voltha_bal_driver.c b/device_simulator/voltha_bal_driver.c
index afdb73e..2d59e0e 100755
--- a/device_simulator/voltha_bal_driver.c
+++ b/device_simulator/voltha_bal_driver.c
@@ -51,7 +51,7 @@
{
BalHeartbeat *bal_hb;
BalErr bal_err;
-
+ int ret_val;
/*
* Read incoming message into set_cfg
*/
@@ -69,11 +69,18 @@
/*
* Write reply back to the client
*/
- if (!context->gcc_stream->write(context, &bal_err, 0)) {
- } else {
- printf("Failed to write\n");
- exit(1);
- }
+ ret_val = context->gcc_stream->write(context, &bal_err, 0);
+ if (ret_val != GRPC_C_WRITE_OK) {
+ if(ret_val == GRPC_C_WRITE_PENDING) {
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
+ }
+ else {
+ printf("Failed to write %d \n", ret_val);
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
+ }
+ }
grpc_c_status_t status;
status.gcs_code = 0;
@@ -97,6 +104,8 @@
{
BalReboot *read_device;
BalErr bal_err;
+ int ret_val;
+
/*
* Read incoming message into get_cfg
*/
@@ -122,10 +131,17 @@
/*
* Write reply back to the client
*/
- if (!context->gcc_stream->write(context, &bal_err, 0)) {
- } else {
- printf("Bal Server - Reboot Failed to write\n");
- exit(1);
+ ret_val = context->gcc_stream->write(context, &bal_err, 0);
+ if (ret_val != GRPC_C_WRITE_OK) {
+ if(ret_val == GRPC_C_WRITE_PENDING) {
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
+ }
+ else {
+ printf("Failed to write %d \n", ret_val);
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
+ }
}
grpc_c_status_t status;
@@ -146,6 +162,7 @@
void bal__bal_cfg_stat_get_cb(grpc_c_context_t *context)
{
BalInterfaceKey *read_stats;
+ int ret_val;
/*
* Read incoming message into get_cfg
@@ -180,8 +197,18 @@
if (!context->gcc_stream->write(context, &get_stats, 0)) {
printf("Successfully Written Stats\n");
} else {
- printf("Stats Failed to write\n");
- exit(1);
+ if (ret_val != GRPC_C_WRITE_OK) {
+ if(ret_val == GRPC_C_WRITE_PENDING) {
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
+ }
+ else {
+ printf("Failed to write %d \n", ret_val);
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
+ }
+ }
+
}
grpc_c_status_t status;
@@ -195,8 +222,8 @@
exit(1);
}
- sleep(1);
printf("============ Returning from Stats Function============\n");
+ sleep(1);
}
/*
@@ -249,13 +276,13 @@
ret_val = context->gcc_stream->write(context, &bal_err, 0);
if (ret_val != GRPC_C_WRITE_OK) {
if(ret_val == GRPC_C_WRITE_PENDING) {
- printf("write is pending, sleep for 10 sec %d \n", ret_val);
- sleep(10);
+ printf("write(%d) is pending, sleep for 5 sec \n", ret_val);
+ sleep(5);
}
else {
printf("Failed to write %d \n", ret_val);
- printf("write is pending, sleep for 10 sec: %d\n", ret_val);
- sleep(10);
+ printf("write(%d) is pending, sleep for 5 sec \n", ret_val);
+ sleep(5);
}
}
@@ -338,7 +365,7 @@
break;
default:
{
- ("\n*****************************************************\n");
+ printf("\n*****************************************************\n");
printf("Dest type invalid\n");
printf("*****************************************************\n");
}
@@ -348,7 +375,7 @@
break;
default:
{
- ("\n*****************************************************\n");
+ printf("\n*****************************************************\n");
printf("Received Invalid msg type === %d \n", set_cfg->hdr->obj_type);
printf("*****************************************************\n");
pthread_mutex_unlock(&lock);
@@ -431,7 +458,7 @@
*/
- ("\n*****************************************************\n");
+ printf("\n*****************************************************\n");
printf("Received API Init msg\n");
printf("*****************************************************\n");
@@ -445,13 +472,13 @@
ret_val = context->gcc_stream->write(context, &bal_err, 0);
if (ret_val != GRPC_C_WRITE_OK) {
if(ret_val == GRPC_C_WRITE_PENDING) {
- printf("write is pending, sleep for 10 sec %d \n", ret_val);
- sleep(10);
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
}
else {
printf("Failed to write %d \n", ret_val);
- printf("write is pending, sleep for 10 sec: %d\n", ret_val);
- sleep(10);
+ printf("write(%d) is pending, sleep for 5 sec\n", ret_val);
+ sleep(5);
}
}