From 0eaf429c4eb558ccc1c49509ac6fb970f62bc59f Mon Sep 17 00:00:00 2001 From: Jim Ma Date: Tue, 15 Aug 2023 23:05:17 +0800 Subject: [PATCH] chore: skip export to exist file (#2637) Signed-off-by: Jim Ma --- client/daemon/rpcserver/rpcserver.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/client/daemon/rpcserver/rpcserver.go b/client/daemon/rpcserver/rpcserver.go index 5e58a0237..5bfc2773e 100644 --- a/client/daemon/rpcserver/rpcserver.go +++ b/client/daemon/rpcserver/rpcserver.go @@ -930,6 +930,16 @@ func (s *server) ImportTask(ctx context.Context, req *dfdaemonv1.ImportTaskReque } func (s *server) ExportTask(ctx context.Context, req *dfdaemonv1.ExportTaskRequest) (*emptypb.Empty, error) { + _, err := os.Stat(req.Output) + if err == nil { + // we did not export file to exist file + // TODO add white list folders to write files + return nil, dferrors.New(commonv1.Code_BadRequest, "output file is already exist") + } + // check other stat errors, only os.ErrNotExist is okay + if !os.IsNotExist(err) { + return nil, dferrors.New(commonv1.Code_ClientError, err.Error()) + } s.Keep() taskID := idgen.TaskIDV1(req.Url, req.UrlMeta) log := logger.With("function", "ExportTask", "URL", req.Url, "Tag", req.UrlMeta.Tag, "taskID", taskID, "destination", req.Output) @@ -947,7 +957,7 @@ func (s *server) ExportTask(ctx context.Context, req *dfdaemonv1.ExportTaskReque return new(emptypb.Empty), s.exportFromPeers(ctx, log, req) } - err := s.exportFromLocal(ctx, req, task.PeerID) + err = s.exportFromLocal(ctx, req, task.PeerID) if err != nil { log.Errorf("export from local failed: %s", err) return nil, err