Skip to content

Commit

Permalink
fix: Deep copy ImportTask.segmentsInfo to prevent data race (milvus-i…
Browse files Browse the repository at this point in the history
…o#34090)

See also milvus-io#34089

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
  • Loading branch information
congqixia authored and yellow-shine committed Jul 2, 2024
1 parent 0b6c6ab commit 62f71c6
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 10 deletions.
10 changes: 7 additions & 3 deletions internal/datanode/importv2/task_import.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"time"

"github.com/cockroachdb/errors"
"github.com/golang/protobuf/proto"
"github.com/samber/lo"
"go.uber.org/zap"

Expand All @@ -36,6 +35,7 @@ import (
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/util/conc"
"github.com/milvus-io/milvus/pkg/util/paramtable"
"github.com/milvus-io/milvus/pkg/util/typeutil"
)

type ImportTask struct {
Expand Down Expand Up @@ -107,11 +107,15 @@ func (t *ImportTask) GetSegmentsInfo() []*datapb.ImportSegmentInfo {

func (t *ImportTask) Clone() Task {
ctx, cancel := context.WithCancel(t.ctx)
infos := make(map[int64]*datapb.ImportSegmentInfo)
for id, info := range t.segmentsInfo {
infos[id] = typeutil.Clone(info)
}
return &ImportTask{
ImportTaskV2: proto.Clone(t.ImportTaskV2).(*datapb.ImportTaskV2),
ImportTaskV2: typeutil.Clone(t.ImportTaskV2),
ctx: ctx,
cancel: cancel,
segmentsInfo: t.segmentsInfo,
segmentsInfo: infos,
req: t.req,
metaCaches: t.metaCaches,
}
Expand Down
9 changes: 6 additions & 3 deletions internal/datanode/importv2/task_l0_import.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"time"

"github.com/cockroachdb/errors"
"github.com/golang/protobuf/proto"
"github.com/samber/lo"
"go.uber.org/zap"

Expand Down Expand Up @@ -104,11 +103,15 @@ func (t *L0ImportTask) GetSegmentsInfo() []*datapb.ImportSegmentInfo {

func (t *L0ImportTask) Clone() Task {
ctx, cancel := context.WithCancel(t.ctx)
infos := make(map[int64]*datapb.ImportSegmentInfo)
for id, info := range t.segmentsInfo {
infos[id] = typeutil.Clone(info)
}
return &L0ImportTask{
ImportTaskV2: proto.Clone(t.ImportTaskV2).(*datapb.ImportTaskV2),
ImportTaskV2: typeutil.Clone(t.ImportTaskV2),
ctx: ctx,
cancel: cancel,
segmentsInfo: t.segmentsInfo,
segmentsInfo: infos,
req: t.req,
metaCaches: t.metaCaches,
}
Expand Down
3 changes: 1 addition & 2 deletions internal/datanode/importv2/task_l0_preimport.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"time"

"github.com/cockroachdb/errors"
"github.com/golang/protobuf/proto"
"github.com/samber/lo"
"go.uber.org/zap"

Expand Down Expand Up @@ -102,7 +101,7 @@ func (t *L0PreImportTask) Cancel() {
func (t *L0PreImportTask) Clone() Task {
ctx, cancel := context.WithCancel(t.ctx)
return &L0PreImportTask{
PreImportTask: proto.Clone(t.PreImportTask).(*datapb.PreImportTask),
PreImportTask: typeutil.Clone(t.PreImportTask),
ctx: ctx,
cancel: cancel,
partitionIDs: t.GetPartitionIDs(),
Expand Down
4 changes: 2 additions & 2 deletions internal/datanode/importv2/task_preimport.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"time"

"github.com/cockroachdb/errors"
"github.com/golang/protobuf/proto"
"github.com/samber/lo"
"go.uber.org/zap"

Expand All @@ -36,6 +35,7 @@ import (
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/util/conc"
"github.com/milvus-io/milvus/pkg/util/paramtable"
"github.com/milvus-io/milvus/pkg/util/typeutil"
)

type PreImportTask struct {
Expand Down Expand Up @@ -108,7 +108,7 @@ func (p *PreImportTask) Cancel() {
func (p *PreImportTask) Clone() Task {
ctx, cancel := context.WithCancel(p.ctx)
return &PreImportTask{
PreImportTask: proto.Clone(p.PreImportTask).(*datapb.PreImportTask),
PreImportTask: typeutil.Clone(p.PreImportTask),
ctx: ctx,
cancel: cancel,
partitionIDs: p.GetPartitionIDs(),
Expand Down

0 comments on commit 62f71c6

Please sign in to comment.