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/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);
}
}