diff --git a/core/reader/replicate_channel_manager.go b/core/reader/replicate_channel_manager.go
index b48588a..891ed80 100644
--- a/core/reader/replicate_channel_manager.go
+++ b/core/reader/replicate_channel_manager.go
@@ -573,6 +573,9 @@ func (r *replicateChannelManager) AddPartition(ctx context.Context, dbInfo *mode
 func (r *replicateChannelManager) StopReadCollection(ctx context.Context, info *pb.CollectionInfo) error {
 	for _, channel := range info.GetPhysicalChannelNames() {
 		handler := r.stopReadChannel(channel, info.ID)
+		if handler == nil {
+			continue
+		}
 		handler.Close()
 	}
 	r.collectionLock.Lock()
diff --git a/server/cdc_impl.go b/server/cdc_impl.go
index caa2b9a..e9369cd 100644
--- a/server/cdc_impl.go
+++ b/server/cdc_impl.go
@@ -1248,6 +1248,9 @@ func (e *MetaCDC) Delete(req *request.DeleteRequest) (*request.DeleteResponse, e
 	_, ok := e.cdcTasks.data[req.TaskID]
 	e.cdcTasks.RUnlock()
 	if !ok {
+		if req.IgnoreNotFound {
+			return &request.DeleteResponse{}, nil
+		}
 		return nil, servererror.NewClientError("not found the task, task_id: " + req.TaskID)
 	}
 
diff --git a/server/model/request/delete.go b/server/model/request/delete.go
index 9bb4244..fe7a7ca 100644
--- a/server/model/request/delete.go
+++ b/server/model/request/delete.go
@@ -20,7 +20,8 @@ package request
 
 //go:generate easytags $GOFILE json,mapstructure
 type DeleteRequest struct {
-	TaskID string `json:"task_id" mapstructure:"task_id"`
+	TaskID         string `json:"task_id" mapstructure:"task_id"`
+	IgnoreNotFound bool   `json:"ignore_not_found" mapstructure:"ignore_not_found"`
 }
 
 type DeleteResponse struct{}