@@ -204,6 +204,17 @@ func (server *RPCServer) Stop() {
204204 server .listener = nil
205205}
206206
207+ func toGrpcErrorIfNeeded (code codes.Code , err error ) error {
208+ if err == nil {
209+ return err
210+ }
211+ _ , ok := status .FromError (err )
212+ if ok {
213+ return err
214+ }
215+ return status .Error (code , err .Error ())
216+ }
217+
207218/* Implementation of gRPC methods start here. */
208219
209220// Ping handles ping request.
@@ -271,7 +282,7 @@ func (server *RPCServer) SubmitTask(
271282 shellTask := task .NewShellTaskWithUser ("RemoteCommand" , username , cmd [0 ], cmd [1 :])
272283 err := task .GetTaskManager ().Submit (ctx , taskID , shellTask )
273284 if err != nil {
274- return res , status . Error (codes .Internal , err . Error () )
285+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
275286 }
276287 return res , nil
277288 }
@@ -282,14 +293,14 @@ func (server *RPCServer) SubmitTask(
282293 err := util .ConvertType (preflightCheckInput , & preflightCheckParam )
283294 if err != nil {
284295 util .FileLogger ().Errorf (ctx , "Error in preflight input conversion - %s" , err .Error ())
285- return res , status . Error (codes .InvalidArgument , err . Error () )
296+ return res , toGrpcErrorIfNeeded (codes .InvalidArgument , err )
286297 }
287298 preflightCheckHandler := task .NewPreflightCheckHandler (preflightCheckParam )
288299 err = task .GetTaskManager ().
289300 Submit (ctx , taskID , preflightCheckHandler )
290301 if err != nil {
291302 util .FileLogger ().Errorf (ctx , "Error in running preflight check - %s" , err .Error ())
292- return res , status . Error (codes .Internal , err . Error () )
303+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
293304 }
294305 return res , nil
295306 }
@@ -299,7 +310,7 @@ func (server *RPCServer) SubmitTask(
299310 err := task .GetTaskManager ().Submit (ctx , taskID , downloadSoftwareHandler )
300311 if err != nil {
301312 util .FileLogger ().Errorf (ctx , "Error in running download software - %s" , err .Error ())
302- return res , status . Error (codes .Internal , err . Error () )
313+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
303314 }
304315 res .TaskId = taskID
305316 return res , nil
@@ -310,7 +321,7 @@ func (server *RPCServer) SubmitTask(
310321 err := task .GetTaskManager ().Submit (ctx , taskID , installSoftwareHandler )
311322 if err != nil {
312323 util .FileLogger ().Errorf (ctx , "Error in running install software - %s" , err .Error ())
313- return res , status . Error (codes .Internal , err . Error () )
324+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
314325 }
315326 res .TaskId = taskID
316327 return res , nil
@@ -322,7 +333,7 @@ func (server *RPCServer) SubmitTask(
322333 err := task .GetTaskManager ().Submit (ctx , taskID , serverControlHandler )
323334 if err != nil {
324335 util .FileLogger ().Errorf (ctx , "Error in running server control - %s" , err .Error ())
325- return res , status . Error (codes .Internal , err . Error () )
336+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
326337 }
327338 res .TaskId = taskID
328339 return res , nil
@@ -339,7 +350,7 @@ func (server *RPCServer) SubmitTask(
339350 if err2 != nil {
340351 util .FileLogger ().
341352 Errorf (ctx , "Error in running configure handler - %s" , err2 .Error ())
342- return res , status . Error (codes .Internal , err2 . Error () )
353+ return res , toGrpcErrorIfNeeded (codes .Internal , err2 )
343354 }
344355 res .TaskId = taskID
345356 return res , nil
@@ -357,7 +368,7 @@ func (server *RPCServer) SubmitTask(
357368 err := task .GetTaskManager ().Submit (ctx , taskID , serverGFlagsHandler )
358369 if err != nil {
359370 util .FileLogger ().Errorf (ctx , "Error in running server gflags - %s" , err .Error ())
360- return res , status . Error (codes .Internal , err . Error () )
371+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
361372 }
362373 res .TaskId = taskID
363374 return res , nil
@@ -368,7 +379,7 @@ func (server *RPCServer) SubmitTask(
368379 err := task .GetTaskManager ().Submit (ctx , taskID , installYbcHandler )
369380 if err != nil {
370381 util .FileLogger ().Errorf (ctx , "Error in running install ybc - %s" , err .Error ())
371- return res , status . Error (codes .Internal , err . Error () )
382+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
372383 }
373384 res .TaskId = taskID
374385 return res , nil
@@ -379,7 +390,7 @@ func (server *RPCServer) SubmitTask(
379390 err := task .GetTaskManager ().Submit (ctx , taskID , configureServerHandler )
380391 if err != nil {
381392 util .FileLogger ().Errorf (ctx , "Error in running configure server - %s" , err .Error ())
382- return res , status . Error (codes .Internal , err . Error () )
393+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
383394 }
384395 res .TaskId = taskID
385396 return res , nil
@@ -394,7 +405,7 @@ func (server *RPCServer) SubmitTask(
394405 if err != nil {
395406 util .FileLogger ().
396407 Errorf (ctx , "Error in running install otel collector - %s" , err .Error ())
397- return res , status . Error (codes .Internal , err . Error () )
408+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
398409 }
399410 res .TaskId = taskID
400411 return res , nil
@@ -409,7 +420,7 @@ func (server *RPCServer) SubmitTask(
409420 if err != nil {
410421 util .FileLogger ().
411422 Errorf (ctx , "Error in running setup cGroup - %s" , err .Error ())
412- return res , status . Error (codes .Internal , err . Error () )
423+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
413424 }
414425 res .TaskId = taskID
415426 return res , nil
@@ -424,12 +435,12 @@ func (server *RPCServer) SubmitTask(
424435 if err != nil {
425436 util .FileLogger ().
426437 Errorf (ctx , "Error in running destroy server - %s" , err .Error ())
427- return res , status . Error (codes .Internal , err . Error () )
438+ return res , toGrpcErrorIfNeeded (codes .Internal , err )
428439 }
429440 res .TaskId = taskID
430441 return res , nil
431442 }
432- return res , status . Error (codes .Unimplemented , "Unknown task" )
443+ return res , toGrpcErrorIfNeeded (codes .Unimplemented , errors . New ( "Unknown task" ) )
433444}
434445
435446// DescribeTask describes a submitted task.
@@ -475,7 +486,7 @@ func (server *RPCServer) DescribeTask(
475486 return nil
476487 })
477488 if err != nil && err != io .EOF {
478- return status . Error (codes .Internal , err . Error () )
489+ return toGrpcErrorIfNeeded (codes .Internal , err )
479490 }
480491 return nil
481492}
@@ -487,7 +498,7 @@ func (server *RPCServer) AbortTask(
487498) (* pb.AbortTaskResponse , error ) {
488499 taskID , err := task .GetTaskManager ().Abort (ctx , req .GetTaskId ())
489500 if err != nil {
490- return nil , status . Error (codes .Internal , err . Error () )
501+ return nil , toGrpcErrorIfNeeded (codes .Internal , err )
491502 }
492503 return & pb.AbortTaskResponse {TaskId : taskID }, nil
493504}
@@ -498,15 +509,15 @@ func (server *RPCServer) UploadFile(stream pb.NodeAgent_UploadFileServer) error
498509 req , err := stream .Recv ()
499510 if err != nil {
500511 util .FileLogger ().Errorf (ctx , "Error in receiving file info - %s" , err .Error ())
501- return status . Error (codes .Internal , err . Error () )
512+ return toGrpcErrorIfNeeded (codes .Internal , err )
502513 }
503514 fileInfo := req .GetFileInfo ()
504515 filename := fileInfo .GetFilename ()
505516 username := req .GetUser ()
506517 chmod := req .GetChmod ()
507518 userDetail , err := util .UserInfo (username )
508519 if err != nil {
509- return status . Error (codes .Internal , err . Error () )
520+ return toGrpcErrorIfNeeded (codes .Internal , err )
510521 }
511522 util .FileLogger ().Debugf (ctx , "Using user: %s, uid: %d, gid: %d" ,
512523 userDetail .User .Username , userDetail .UserID , userDetail .GroupID )
@@ -524,22 +535,22 @@ func (server *RPCServer) UploadFile(stream pb.NodeAgent_UploadFileServer) error
524535 if err != nil {
525536 util .FileLogger ().Errorf (
526537 ctx , "Error in deleting existing file %s - %s" , filename , err .Error ())
527- return status . Error (codes .Internal , err . Error () )
538+ return toGrpcErrorIfNeeded (codes .Internal , err )
528539 }
529540 util .FileLogger ().Infof (ctx , "Setting file permission for %s to %o" , filename , chmod )
530541 }
531542 file , err := os .OpenFile (filename , os .O_TRUNC | os .O_RDWR | os .O_CREATE , fs .FileMode (chmod ))
532543 if err != nil {
533544 util .FileLogger ().Errorf (ctx , "Error in creating file %s - %s" , filename , err .Error ())
534- return status . Error (codes .Internal , err . Error () )
545+ return toGrpcErrorIfNeeded (codes .Internal , err )
535546 }
536547 defer file .Close ()
537548 if ! userDetail .IsCurrent {
538549 err = file .Chown (int (userDetail .UserID ), int (userDetail .GroupID ))
539550 if err != nil {
540551 util .FileLogger ().
541552 Errorf (ctx , "Error in changing file owner %s - %s" , filename , err .Error ())
542- return status . Error (codes .Internal , err . Error () )
553+ return toGrpcErrorIfNeeded (codes .Internal , err )
543554 }
544555 }
545556 // Flushes 4K bytes by default.
@@ -553,26 +564,26 @@ func (server *RPCServer) UploadFile(stream pb.NodeAgent_UploadFileServer) error
553564 }
554565 util .FileLogger ().
555566 Errorf (ctx , "Error in flushing data to file %s - %s" , filename , err .Error ())
556- return status . Error (codes .Internal , err . Error () )
567+ return toGrpcErrorIfNeeded (codes .Internal , err )
557568 }
558569 if err != nil {
559570 util .FileLogger ().Errorf (ctx , "Error in reading from stream - %s" , err .Error ())
560- return status . Error (codes .Internal , err . Error () )
571+ return toGrpcErrorIfNeeded (codes .Internal , err )
561572 }
562573 chunk := req .GetChunkData ()
563574 size := len (chunk )
564575 util .FileLogger ().Debugf (ctx , "Received a chunk with size: %d" , size )
565576 _ , err = writer .Write (chunk )
566577 if err != nil {
567578 util .FileLogger ().Errorf (ctx , "Error in writing to file %s - %s" , filename , err .Error ())
568- return status . Error (codes .Internal , err . Error () )
579+ return toGrpcErrorIfNeeded (codes .Internal , err )
569580 }
570581 }
571582 res := & pb.UploadFileResponse {}
572583 err = stream .SendAndClose (res )
573584 if err != nil {
574585 util .FileLogger ().Errorf (ctx , "Error in sending response - %s" , err .Error ())
575- return status . Error (codes .Internal , err . Error () )
586+ return toGrpcErrorIfNeeded (codes .Internal , err )
576587 }
577588 return nil
578589}
@@ -589,7 +600,7 @@ func (server *RPCServer) DownloadFile(
589600 username := in .GetUser ()
590601 userDetail , err := util .UserInfo (username )
591602 if err != nil {
592- return status . Error (codes .Internal , err . Error () )
603+ return toGrpcErrorIfNeeded (codes .Internal , err )
593604 }
594605 util .FileLogger ().Debugf (ctx , "Using user: %s, uid: %d, gid: %d" ,
595606 userDetail .User .Username , userDetail .UserID , userDetail .GroupID )
@@ -598,7 +609,7 @@ func (server *RPCServer) DownloadFile(
598609 file , err := os .Open (filename )
599610 if err != nil {
600611 util .FileLogger ().Errorf (ctx , "Error in opening file %s - %s" , filename , err .Error ())
601- return status . Error (codes .Internal , err . Error () )
612+ return toGrpcErrorIfNeeded (codes .Internal , err )
602613 }
603614 defer file .Close ()
604615 // Reads 4K bytes by default.
@@ -610,13 +621,13 @@ func (server *RPCServer) DownloadFile(
610621 }
611622 if err != nil {
612623 util .FileLogger ().Errorf (ctx , "Error in reading file %s - %s" , filename , err .Error ())
613- return status . Error (codes .Internal , err . Error () )
624+ return toGrpcErrorIfNeeded (codes .Internal , err )
614625 }
615626 res .ChunkData = res .ChunkData [:n ]
616627 err = stream .Send (res )
617628 if err != nil {
618629 util .FileLogger ().Errorf (ctx , "Error in sending file %s - %s" , filename , err .Error ())
619- return status . Error (codes .Internal , err . Error () )
630+ return toGrpcErrorIfNeeded (codes .Internal , err )
620631 }
621632 }
622633 return nil
0 commit comments