Skip to content

[bug] Data Race of ContainerExecConfig happens when calling exec start and inspect #2667

@allencloud

Description

@allencloud

Ⅰ. Issue Description

When I was finishing the integration test adding in pr #2612, I found a data race there in struct ContainerExecConfig instance operation.

time="2019-01-15T03:58:40.718772986Z" level=debug msg="Calling GET /v1.24/exec/9b41ab4c7f76152d6daaa562683b187641185ead1618e14ded486c8094a4fedb/json, client @" 
time="2019-01-15T03:58:40.720238616Z" level=info msg="Calling POST /v1.24/exec/9b41ab4c7f76152d6daaa562683b187641185ead1618e14ded486c8094a4fedb/start, client @" 
time="2019-01-15T03:58:40.720548015Z" level=info msg="start exec 9b41ab4c7f76152d6daaa562683b187641185ead1618e14ded486c8094a4fedb, upgrade: true, body: {}" 
time="2019-01-15T03:58:40.72230116Z" level=debug msg="Calling GET /v1.24/exec/9b41ab4c7f76152d6daaa562683b187641185ead1618e14ded486c8094a4fedb/json, client @" 
==================
WARNING: DATA RACE
Write at 0x00c421554c98 by goroutine 228:
  github.com/alibaba/pouch/daemon/mgr.(*ContainerManager).StartExec()
      /home/travis/gopath/src/github.com/alibaba/pouch/daemon/mgr/container_exec.go:75 +0x1648
  github.com/alibaba/pouch/apis/server.(*Server).startContainerExec()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/exec_bridge.go:105 +0x763
  github.com/alibaba/pouch/apis/server.(*Server).(github.com/alibaba/pouch/apis/server.startContainerExec)-fm()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/router.go:51 +0x7a
  github.com/alibaba/pouch/apis/server.filter.func1()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/router.go:209 +0x54a
  net/http.HandlerFunc.ServeHTTP()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:1947 +0x51
  github.com/alibaba/pouch/vendor/github.com/gorilla/mux.(*Router).ServeHTTP()
      /home/travis/gopath/src/github.com/alibaba/pouch/vendor/github.com/gorilla/mux/mux.go:133 +0x176
  net/http.serverHandler.ServeHTTP()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:2697 +0xb9
  net/http.(*conn).serve()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:1830 +0x7dc
Previous read at 0x00c421554c98 by goroutine 226:
  github.com/alibaba/pouch/daemon/mgr.(*ContainerManager).InspectExec()
      /home/travis/gopath/src/github.com/alibaba/pouch/daemon/mgr/container_exec.go:181 +0x1ed
  github.com/alibaba/pouch/apis/server.(*Server).getExecInfo()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/exec_bridge.go:119 +0x113
  github.com/alibaba/pouch/apis/server.(*Server).(github.com/alibaba/pouch/apis/server.getExecInfo)-fm()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/router.go:50 +0x7a
  github.com/alibaba/pouch/apis/server.filter.func1()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/router.go:209 +0x54a
  net/http.HandlerFunc.ServeHTTP()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:1947 +0x51
  github.com/alibaba/pouch/vendor/github.com/gorilla/mux.(*Router).ServeHTTP()
      /home/travis/gopath/src/github.com/alibaba/pouch/vendor/github.com/gorilla/mux/mux.go:133 +0x176
  net/http.serverHandler.ServeHTTP()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:2697 +0xb9
  net/http.(*conn).serve()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:1830 +0x7dc
Goroutine 228 (running) created at:
  net/http.(*Server).Serve()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:2798 +0x364
  github.com/alibaba/pouch/apis/server.(*Server).Start.func2()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/server.go:81 +0x29d
Goroutine 226 (running) created at:
  net/http.(*Server).Serve()
      /home/travis/.gimme/versions/go1.10.4.linux.amd64/src/net/http/server.go:2798 +0x364
  github.com/alibaba/pouch/apis/server.(*Server).Start.func2()
      /home/travis/gopath/src/github.com/alibaba/pouch/apis/server/server.go:81 +0x29d
==================

Ⅱ. Describe what happened

Data Race of ContainerExecConfig when calling exec start and inspect

Ⅲ. Describe what you expected to happen

no data race in the pouchd's log about containerExecConfig

Ⅳ. How to reproduce it (as minimally and precisely as possible)

none

Ⅴ. Anything else we need to know?

none

Ⅵ. Environment:

  • pouch version (use pouch version): master branch.
  • OS (e.g. from /etc/os-release): travisCI os ubuntu 16.04
  • Kernel (e.g. uname -a):
  • Install tools:
  • Others:

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugThis is bug report for project

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions