Skip to content

storagev2的uplog存在data race问题 #174

@zhangzqs

Description

@zhangzqs
WARNING: DATA RACE
Read at 0x00c008b4a420 by goroutine 40162:
  reflect.Value.Uint()
      /home/zzq/opt/go1.24/src/reflect/value.go:2454 +0x333
  reflect.Value.IsZero()
      /home/zzq/opt/go1.24/src/reflect/value.go:1582 +0x260
  encoding/json.isEmptyValue()
      /home/zzq/opt/go1.24/src/encoding/json/encode.go:327 +0x85
  encoding/json.structEncoder.encode()
      /home/zzq/opt/go1.24/src/encoding/json/encode.go:715 +0x175
  encoding/json.structEncoder.encode-fm()
      <autogenerated>:1 +0xe4
  encoding/json.ptrEncoder.encode()
      /home/zzq/opt/go1.24/src/encoding/json/encode.go:899 +0x3d1
  encoding/json.ptrEncoder.encode-fm()
      <autogenerated>:1 +0x84
  encoding/json.(*encodeState).reflectValue()
      /home/zzq/opt/go1.24/src/encoding/json/encode.go:333 +0x83
  encoding/json.(*encodeState).marshal()
      /home/zzq/opt/go1.24/src/encoding/json/encode.go:309 +0xea
  encoding/json.Marshal()
      /home/zzq/opt/go1.24/src/encoding/json/encode.go:175 +0x12b
  github.com/qiniu/go-sdk/v7/internal/uplog.(*RequestUplog).Intercept()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/uplog/request_uplog.go:218 +0x1c04
  github.com/qiniu/go-sdk/v7/internal/clientv2.(*client).Do.func2()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/clientv2/client.go:92 +0x54
  github.com/qiniu/go-sdk/v7/internal/clientv2.(*simpleRetryInterceptor).callHandler()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/clientv2/interceptor_retry_simple.go:171 +0x87
  github.com/qiniu/go-sdk/v7/internal/clientv2.(*simpleRetryInterceptor).Intercept()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/clientv2/interceptor_retry_simple.go:111 +0x516
  github.com/qiniu/go-sdk/v7/internal/clientv2.(*client).Do.func2()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/clientv2/client.go:92 +0x54
  github.com/qiniu/go-sdk/v7/internal/clientv2.(*hostsRetryInterceptor).Intercept()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/clientv2/interceptor_retry_hosts.go:84 +0x22d
  github.com/qiniu/go-sdk/v7/internal/clientv2.(*client).Do.func2()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/clientv2/client.go:92 +0x54
  github.com/qiniu/go-sdk/v7/internal/clientv2.(*client).Do()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/clientv2/client.go:96 +0x1c1
  github.com/qiniu/go-sdk/v7/storagev2/http_client.(*Client).Do()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/http_client/http_client.go:275 +0x4c1
  github.com/qiniu/go-sdk/v7/storagev2/http_client.(*Client).DoAndAcceptJSON()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/http_client/http_client.go:280 +0x55
  github.com/qiniu/go-sdk/v7/storagev2/apis.(*Storage).PostObject()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/apis/api_post_object.go:148 +0x11aa
  github.com/qiniu/go-sdk/v7/storagev2/uploader.formUploader.uploadToRegion()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/uploaders.go:160 +0x3ba
  github.com/qiniu/go-sdk/v7/storagev2/uploader.formUploader.upload.func1()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/uploaders.go:132 +0x10b
  github.com/qiniu/go-sdk/v7/storagev2/uploader.forEachRegion()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/uploaders.go:453 +0x1ed
  github.com/qiniu/go-sdk/v7/storagev2/uploader.formUploader.upload()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/uploaders.go:131 +0x1ba
  github.com/qiniu/go-sdk/v7/storagev2/uploader.formUploader.UploadFile()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/uploaders.go:87 +0x417
  io.Copy()
      /home/zzq/opt/go1.24/src/io/io.go:388 +0x1b3
  github.com/qiniu/go-sdk/v7/storagev2/uploader.crc32FromReadSeeker()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/uploaders.go:339 +0x102
  github.com/qiniu/go-sdk/v7/storagev2/uploader.formUploader.UploadFile()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/uploaders.go:82 +0x364
  github.com/qiniu/go-sdk/v7/storagev2/uploader.(*formUploader).UploadFile()
      <autogenerated>:1 +0xbb
  github.com/qiniu/go-sdk/v7/storagev2/uploader.(*UploadManager).UploadFile()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/upload_manager.go:215 +0x357
  github.com/qiniu/go-sdk/v7/storagev2/uploader.(*UploadManager).UploadDirectory.func3.1()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/upload_manager.go:162 +0x4fa
  golang.org/x/sync/errgroup.(*Group).Go.func1()
      /home/zzq/go/pkg/mod/golang.org/x/sync@v0.17.0/errgroup/errgroup.go:93 +0x91

Previous write at 0x00c008b4a420 by goroutine 40257:
  github.com/qiniu/go-sdk/v7/internal/uplog.(*RequestUplog).Intercept.func7()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/uplog/request_uplog.go:154 +0x104
  net.(*sysDialer).dialSingle.func1()
      /home/zzq/opt/go1.24/src/net/dial.go:711 +0xda
  runtime.deferreturn()
      /home/zzq/opt/go1.24/src/runtime/panic.go:610 +0x5d
  net.(*sysDialer).dialSerial()
      /home/zzq/opt/go1.24/src/net/dial.go:686 +0x291
  net.(*sysDialer).dialParallel()
      /home/zzq/opt/go1.24/src/net/dial.go:587 +0x652
  net.(*Dialer).DialContext()
      /home/zzq/opt/go1.24/src/net/dial.go:578 +0xc51
  github.com/qiniu/go-sdk/v7/internal/dialer.dialContextSync()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/dialer/dialer.go:84 +0x1a8
  github.com/qiniu/go-sdk/v7/internal/dialer.dialContextAsync.func1()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/dialer/dialer.go:90 +0x174

Goroutine 40162 (running) created at:
  golang.org/x/sync/errgroup.(*Group).Go()
      /home/zzq/go/pkg/mod/golang.org/x/sync@v0.17.0/errgroup/errgroup.go:78 +0x124
  github.com/qiniu/go-sdk/v7/storagev2/uploader.(*UploadManager).UploadDirectory.func3()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/upload_manager.go:141 +0x32e
  path/filepath.walk()
      /home/zzq/opt/go1.24/src/path/filepath/path.go:345 +0x14d
  path/filepath.walk()
      /home/zzq/opt/go1.24/src/path/filepath/path.go:369 +0x379
  path/filepath.Walk()
      /home/zzq/opt/go1.24/src/path/filepath/path.go:427 +0x7b
  github.com/qiniu/go-sdk/v7/storagev2/uploader.(*UploadManager).UploadDirectory()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/storagev2/uploader/upload_manager.go:137 +0x5b0
  github.com/qbox/las/internal/rfsjob/service.(*KodoUploader).Upload()
      /home/zzq/code/repo/qbox/las/internal/rfsjob/service/kodo_uploader.go:185 +0x8a7
  github.com/qbox/las/internal/rfsjob/service.testKodoUploader_Retry()
      /home/zzq/code/repo/qbox/las/internal/rfsjob/service/kodo_uploader_test.go:218 +0xa6a
  github.com/qbox/las/internal/rfsjob/service.TestKodoUploader_SimpleUpload.func1()
      /home/zzq/code/repo/qbox/las/internal/rfsjob/service/kodo_uploader_test.go:166 +0x84

Goroutine 40257 (finished) created at:
  github.com/qiniu/go-sdk/v7/internal/dialer.dialContextAsync()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/dialer/dialer.go:88 +0x227
  github.com/qiniu/go-sdk/v7/internal/dialer.DialContext()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/internal/dialer/dialer.go:48 +0x464
  github.com/qiniu/go-sdk/v7/client.defaultDialFunc()
      /home/zzq/go/pkg/mod/github.com/qiniu/go-sdk/v7@v7.25.4/client/dialer.go:36 +0x309
  net/http.(*Transport).dial()
      /home/zzq/opt/go1.24/src/net/http/transport.go:1278 +0xe6
  net/http.(*Transport).dialConn()
      /home/zzq/opt/go1.24/src/net/http/transport.go:1780 +0xd64
  net/http.(*Transport).dialConnFor()
      /home/zzq/opt/go1.24/src/net/http/transport.go:1615 +0x11d
  net/http.(*Transport).startDialConnForLocked.func1()
      /home/zzq/opt/go1.24/src/net/http/transport.go:1597 +0x3c
==================

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions