[VOL-5494] error handling for reboot-device and reset transcient state for deletedeviceforce

Change-Id: I61537fb578373d30a57ea9b124796d0edcb3fe7e
Signed-off-by: Akash Reddy Kankanala <akash.kankanala@radisys.com>
diff --git a/VERSION b/VERSION
index b332c7e..ddaac1b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.6.26
+3.6.27
diff --git a/rw_core/core/device/agent.go b/rw_core/core/device/agent.go
index 3bbebbc..2f5e278 100755
--- a/rw_core/core/device/agent.go
+++ b/rw_core/core/device/agent.go
@@ -659,16 +659,14 @@
 	}
 	subCtx, cancel := context.WithTimeout(coreutils.WithAllMetadataFromContext(ctx), agent.rpcTimeout)
 	requestStatus.Code = common.OperationResp_OPERATION_IN_PROGRESS
-	go func() {
-		defer cancel()
-		_, err := client.RebootDevice(subCtx, device)
-		if err == nil {
-			agent.onSuccess(subCtx, nil, nil, true)
-		} else {
-			agent.onFailure(subCtx, err, nil, nil, true)
-		}
-	}()
-	return nil
+	_, err = client.RebootDevice(subCtx, device)
+	if err == nil {
+		agent.onSuccess(subCtx, nil, nil, true)
+	} else {
+		agent.onFailure(subCtx, err, nil, nil, true)
+	}
+	cancel()
+	return err
 }
 
 func (agent *Agent) deleteDeviceForce(ctx context.Context) error {
@@ -722,6 +720,11 @@
 	// Update device
 	if err = agent.updateDeviceWithTransientStateAndReleaseLock(ctx, device,
 		core.DeviceTransientState_FORCE_DELETING, previousDeviceTransientState); err != nil {
+		ctx1, cancel1 := context.WithTimeout(context.Background(), agent.rpcTimeout)               // incase of ctx cancellation, updatetranscientstate will fail , so creating a new context for updating
+		if err1 := agent.updateTransientState(ctx1, core.DeviceTransientState_NONE); err1 != nil { // reset the device transient state if the transition handlers fail, so the next retry can go through
+			logger.Errorf(ctx, "failed-to-reset-transient-state-to-none: %s", err1)
+		}
+		cancel1()
 		return err
 	}
 	return nil