gin-gonic / gin

Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.
https://gin-gonic.com/
MIT License
78.27k stars 7.99k forks source link

fatal error: concurrent map writes #3387

Open zouzehe opened 1 year ago

zouzehe commented 1 year ago

Description

Very randomly, I got my Gin application fatal error

How to reproduce

func (api ChaptersApi) Report(ctx *gin.Context) {
    records, body, err := tool.InputDataDecode(ctx, tool.AppChapters, api.log)
    if err != nil {
        api.log.Errorf("Chapters Response Body Error: InputDataDecode Error: %+v. body(%+v)", err, body)
        response.Response(ctx, err.Error())
        return
    }

    _, err = api.uc.ChaptersReport(ctx, records)
    if err != nil {
        header := ctx.Request.Header
        msg := fmt.Sprintf("Chapters Response Body Error: %+v,%+v", err, header)
        api.log.Errorf(msg)
        response.Response(ctx, err.Error())
        return
    }
    response.Response(ctx, "ok")
}

// Response
func Response(c *gin.Context, msg string) {
    response := GetResponseBody(msg)
    payload, _ := json.Marshal(response)
    platform := tool.GetHeaderByName(c, "platform")
    respMsg := ""
    if platform == "ios" {
        respMsg, _ = tool.EncodeB64ForIos(string(payload))
    } else {
        respMsg, _ = tool.EncodeB64ForAndroid(string(payload))
    }

    c.Data(response.HttpStatus, "text/html; charset=utf-8", []byte(respMsg))
}

Expectations

no fatal error

Actual result

fatal error: concurrent map writes

goroutine 4906802 [running]:
runtime.throw(0x1496b9b, 0x15)
    /usr/local/go/src/runtime/panic.go:1117 +0x72 fp=0xc00087dbd8 sp=0xc00087dba8 pc=0x43a272
runtime.mapassign_faststr(0x13f9900, 0xc0001f8a20, 0x148cf9a, 0xc, 0x1f2bc40)
    /usr/local/go/src/runtime/map_faststr.go:291 +0x3d8 fp=0xc00087dc40 sp=0xc00087dbd8 pc=0x416518
github.com/gin-gonic/gin/render.writeContentType(0x7f7ac39194a0, 0xc0006a6b00, 0xc00077a110, 0x1, 0x1)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/render/render.go:38 +0xaa fp=0xc00087dc80 sp=0xc00087dc40 pc=0xcac26a
github.com/gin-gonic/gin/render.Data.WriteContentType(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/render/data.go:24
github.com/gin-gonic/gin/render.Data.Render(0x149a80c, 0x18, 0xc0007aa440, 0x38, 0x40, 0x7f7ac39194a0, 0xc0006a6b00, 0x28, 0xc00087dd60)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/render/data.go:17 +0xaa fp=0xc00087dcf0 sp=0xc00087dc80 pc=0xca9e0a
github.com/gin-gonic/gin/render.(*Data).Render(0xc0001f8270, 0x7f7ac39194a0, 0xc0006a6b00, 0x7f7ac39194a0, 0xc0006a6b00)
    <autogenerated>:1 +0x91 fp=0xc00087dd70 sp=0xc00087dcf0 pc=0xcacdf1
github.com/gin-gonic/gin.(*Context).Render(0xc0006a6b00, 0xc8, 0x16569b8, 0xc0001f8270)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:913 +0x149 fp=0xc00087ddb0 sp=0xc00087dd70 pc=0xcb3349
github.com/gin-gonic/gin.(*Context).Data(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:1003
    /data/web/internal/pkg/response/response.go:58 +0x205 fp=0xc00087de80 sp=0xc00087ddb0 pc=0xcd0965
    /data/web/internal/nexus/api/v1/chapters.go:42 +0x38f fp=0xc00087df68 sp=0xc00087de80 pc=0xcd0e2f
    /data/web/internal/nexus/api/v1/chapters.go:24 +0x46 fp=0xc00087df90 sp=0xc00087df68 pc=0xcd27a6
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1.1(0xc0035908a0, 0xc0006a6b00, 0xc00002a600)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:61 +0x68 fp=0xc00087dfc8 sp=0xc00087df90 pc=0x119d988
runtime.goexit()
    /usr/local/go/src/runtime/asm_amd64.s:1371 +0x1 fp=0xc00087dfd0 sp=0xc00087dfc8 pc=0x4744a1
created by gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:55 +0x334

goroutine 1 [semacquire, 39 minutes]:
sync.runtime_Semacquire(0xc0000bdbd0)
    /usr/local/go/src/runtime/sema.go:56 +0x45
sync.(*WaitGroup).Wait(0xc0000bdbc8)
    /usr/local/go/src/sync/waitgroup.go:130 +0x65
golang.org/x/sync/errgroup.(*Group).Wait(0xc0000bdbc0, 0xc00029da10, 0x3)
    /go/pkg/mod/golang.org/x/sync@v0.0.0-20220722155255-886fb9371eb4/errgroup/errgroup.go:53 +0x31
gitlab.stardustgod.com/infra/public-core-component/pkg/app.(*App).Run(0xc0001ef170, 0x16446c0, 0xc0005e00a0)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/app/app.go:84 +0x369
main.main()
    /data/web/cmd/nexus-server/main.go:131 +0x2c5

goroutine 26 [chan receive, 39 minutes]:
github.com/nacos-group/nacos-sdk-go/common/security.(*AuthClient).AutoRefresh.func1(0xc000542480)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/common/security/security_proxy.go:81 +0x8b
created by github.com/nacos-group/nacos-sdk-go/common/security.(*AuthClient).AutoRefresh
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/common/security/security_proxy.go:76 +0x50

goroutine 84 [chan receive, 39 minutes]:
gitlab.stardustgod.com/infra/public-core-component/pkg/config/nacos.(*nacos).Watch.func2(0xc000266880, 0xc0005e2000, 0xc0005e2060)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/config/nacos/config.go:245 +0x88
created by gitlab.stardustgod.com/infra/public-core-component/pkg/config/nacos.(*nacos).Watch
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/config/nacos/config.go:243 +0x1ce

goroutine 86 [chan receive]:
github.com/alibaba/sentinel-golang/core/log/metric.writeTaskLoop()
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/log/metric/aggregator.go:80 +0x2a6
github.com/alibaba/sentinel-golang/util.RunWithRecover(0x14f84a0)
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/util/auto_recover.go:28 +0x49
created by github.com/alibaba/sentinel-golang/core/log/metric.InitTask.func1
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/log/metric/aggregator.go:59 +0xcf

goroutine 85 [chan receive, 39 minutes]:
main.loadConfig.func1(0x165c678, 0xc000563220, 0xc000010650, 0xc0005e2000)
    /data/web/cmd/nexus-server/main.go:71 +0x38
created by main.loadConfig
    /data/web/cmd/nexus-server/main.go:69 +0x554

goroutine 145 [IO wait]:
internal/poll.runtime_pollWait(0x7f7ac426a860, 0x72, 0x0)
    /usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0003a1d18, 0x72, 0x0, 0x0, 0x1487ab1)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Accept(0xc0003a1d00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /usr/local/go/src/internal/poll/fd_unix.go:401 +0x212
net.(*netFD).accept(0xc0003a1d00, 0x203000, 0xc0005f2ca0, 0x18)
    /usr/local/go/src/net/fd_unix.go:172 +0x45
net.(*TCPListener).accept(0xc0003a57d0, 0x0, 0xc0005f2c70, 0x474607)
    /usr/local/go/src/net/tcpsock_posix.go:139 +0x32
net.(*TCPListener).AcceptTCP(0xc0003a57d0, 0x0, 0xc0005f2c98, 0x47173b)
    /usr/local/go/src/net/tcpsock.go:248 +0x65
github.com/fvbock/endless.(*endlessListener).Accept(0xc0005fbe60, 0xc0005f2d10, 0x18, 0xc000001b00, 0x72249b)
    /go/pkg/mod/github.com/fvbock/endless@v0.0.0-20170109170031-447134032cb6/endless.go:490 +0x46
net/http.(*Server).Serve(0xc0003b4b40, 0x165baa8, 0xc0005fbe60, 0x0, 0x0)
    /usr/local/go/src/net/http/server.go:2961 +0x285
github.com/fvbock/endless.(*endlessServer).Serve(0xc0003b4b40, 0x0, 0x0)
    /go/pkg/mod/github.com/fvbock/endless@v0.0.0-20170109170031-447134032cb6/endless.go:195 +0x128
github.com/fvbock/endless.(*endlessServer).ListenAndServe(0xc0003b4b40, 0xffffffffffffffff, 0x0)
    /go/pkg/mod/github.com/fvbock/endless@v0.0.0-20170109170031-447134032cb6/endless.go:229 +0x1b7
gitlab.stardustgod.com/infra/public-core-component/pkg/app.(*App).Run.func2(0x0, 0x0)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/app/app.go:67 +0x4b
golang.org/x/sync/errgroup.(*Group).Go.func1(0xc0000bdbc0, 0xc0003a57b8)
    /go/pkg/mod/golang.org/x/sync@v0.0.0-20220722155255-886fb9371eb4/errgroup/errgroup.go:75 +0x53
created by golang.org/x/sync/errgroup.(*Group).Go
    /go/pkg/mod/golang.org/x/sync@v0.0.0-20220722155255-886fb9371eb4/errgroup/errgroup.go:72 +0x71

goroutine 48 [chan receive]:
github.com/nacos-group/nacos-sdk-go/clients/config_client.(*ConfigClient).delayScheduler(0xc0002684e0, 0xc00024acd0, 0x989680, 0x1484985, 0x4, 0xc000563290)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/clients/config_client/config_client.go:355 +0x3d
created by github.com/nacos-group/nacos-sdk-go/clients/config_client.NewConfigClient
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/clients/config_client/config_client.go:82 +0x36a

goroutine 213 [runnable]:
github.com/segmentio/kafka-go/protocol.makeArray(0x167b5a8, 0x12600a0, 0x2, 0x4, 0xc0002bd810, 0x4a555c)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/reflect.go:86 +0x89
github.com/segmentio/kafka-go/protocol.(*decoder).decodeArray(0xc002cd2a80, 0x1248fe0, 0xc000272468, 0x197, 0x167b5a8, 0x12600a0, 0x14f91f0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:108 +0x66
github.com/segmentio/kafka-go/protocol.arrayDecodeFuncOf.func2(0xc002cd2a80, 0x1248fe0, 0xc000272468, 0x197)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:441 +0x65
github.com/segmentio/kafka-go/protocol.structDecodeFuncOf.func2(0xc002cd2a80, 0x13d2000, 0xc000272458, 0x199)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:410 +0x105
github.com/segmentio/kafka-go/protocol.(*decoder).decodeArray(0xc002cd2a80, 0x1246b20, 0xc0001d1120, 0x197, 0x167b5a8, 0x13d2000, 0xc0004a7d60)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:110 +0xe6
github.com/segmentio/kafka-go/protocol.arrayDecodeFuncOf.func2(0xc002cd2a80, 0x1246b20, 0xc0001d1120, 0x197)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:441 +0x65
github.com/segmentio/kafka-go/protocol.structDecodeFuncOf.func2(0xc002cd2a80, 0x13b1b80, 0xc0001d1100, 0x199)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:410 +0x105
github.com/segmentio/kafka-go/protocol.(*decoder).decodeArray(0xc002cd2a80, 0x1246b60, 0xc001607598, 0x197, 0x167b5a8, 0x13b1b80, 0xc0004a7da0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:110 +0xe6
github.com/segmentio/kafka-go/protocol.arrayDecodeFuncOf.func2(0xc002cd2a80, 0x1246b60, 0xc001607598, 0x197)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:441 +0x65
github.com/segmentio/kafka-go/protocol.structDecodeFuncOf.func2(0xc002cd2a80, 0x13c1f80, 0xc001607560, 0x199)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/decode.go:410 +0x105
github.com/segmentio/kafka-go/protocol.ReadResponse(0x7f7ac3f7cf60, 0xc0000bca80, 0xc000070003, 0x7f7ac3f7cf60, 0xc0000bca80, 0x1645900, 0xc0000d42a0, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/response.go:76 +0x4d2
github.com/segmentio/kafka-go/protocol.RoundTrip(0x1655900, 0xc0000bca80, 0x30d000d0007, 0x0, 0x0, 0x16459c0, 0xc0000d42a0, 0x5757a9, 0xc0000aa580, 0xc0d10f775688f6fd, ...)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/roundtrip.go:15 +0x186
github.com/segmentio/kafka-go/protocol.(*Conn).RoundTrip(0xc0000bca80, 0x16459c0, 0xc0000d42a0, 0x1ef8520, 0x0, 0x0, 0xc000f25010)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/protocol/conn.go:94 +0x1c5
github.com/segmentio/kafka-go.(*conn).roundTrip(0xc00024aaa0, 0x1661860, 0xc0016074a0, 0xc0000bca80, 0x16459c0, 0xc0000d42a0, 0x0, 0x0, 0x0, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:1271 +0xfe
github.com/segmentio/kafka-go.(*conn).run(0xc00024aaa0, 0xc0000bca80, 0xc00010a8a0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:1247 +0x14b
created by github.com/segmentio/kafka-go.(*connGroup).connect
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:1224 +0x9a5

goroutine 69 [IO wait]:
internal/poll.runtime_pollWait(0x7f7ac426aeb8, 0x72, 0xffffffffffffffff)
    /usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00056e498, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc00056e480, 0xc0005e8000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/internal/poll/fd_unix.go:166 +0x1d5
net.(*netFD).Read(0xc00056e480, 0xc0005e8000, 0x1000, 0x1000, 0xc0005f3e88, 0xc0005f3d18, 0x2)
    /usr/local/go/src/net/fd_posix.go:55 +0x4f
net.(*conn).Read(0xc000560290, 0xc0005e8000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:183 +0x91
net/http.(*persistConn).Read(0xc0002b07e0, 0xc0005e8000, 0x1000, 0x1000, 0xc0005f3dc4, 0x2, 0x2)
    /usr/local/go/src/net/http/transport.go:1922 +0x77
bufio.(*Reader).fill(0xc0005de060)
    /usr/local/go/src/bufio/bufio.go:101 +0x108
bufio.(*Reader).Peek(0xc0005de060, 0x1, 0x0, 0x1, 0x1, 0x1, 0x0)
    /usr/local/go/src/bufio/bufio.go:139 +0x4f
net/http.(*persistConn).readLoop(0xc0002b07e0)
    /usr/local/go/src/net/http/transport.go:2083 +0x1a8
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:1743 +0xc77

goroutine 70 [select]:
net/http.(*persistConn).writeLoop(0xc0002b07e0)
    /usr/local/go/src/net/http/transport.go:2382 +0xf7
created by net/http.(*Transport).dialConn
    /usr/local/go/src/net/http/transport.go:1744 +0xc9c

goroutine 87 [select]:
github.com/alibaba/sentinel-golang/core/log/metric.InitTask.func1.1()
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/log/metric/aggregator.go:64 +0x9c
github.com/alibaba/sentinel-golang/util.RunWithRecover(0xc0005e67b0)
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/util/auto_recover.go:28 +0x49
created by github.com/alibaba/sentinel-golang/core/log/metric.InitTask.func1
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/log/metric/aggregator.go:62 +0x150

goroutine 88 [select]:
github.com/alibaba/sentinel-golang/core/system_metric.InitLoadCollector.func1.1()
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/system_metric/sys_metric_stat.go:212 +0x9c
github.com/alibaba/sentinel-golang/util.RunWithRecover(0xc0005e67e0)
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/util/auto_recover.go:28 +0x49
created by github.com/alibaba/sentinel-golang/core/system_metric.InitLoadCollector.func1
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/system_metric/sys_metric_stat.go:210 +0xb0

goroutine 89 [select]:
github.com/alibaba/sentinel-golang/core/system_metric.InitCpuCollector.func1.1()
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/system_metric/sys_metric_stat.go:160 +0x9c
github.com/alibaba/sentinel-golang/util.RunWithRecover(0xc0005e6930)
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/util/auto_recover.go:28 +0x49
created by github.com/alibaba/sentinel-golang/core/system_metric.InitCpuCollector.func1
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/system_metric/sys_metric_stat.go:158 +0xb0

goroutine 90 [select]:
github.com/alibaba/sentinel-golang/core/system_metric.InitMemoryCollector.func1.1()
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/system_metric/sys_metric_stat.go:102 +0x9c
github.com/alibaba/sentinel-golang/util.RunWithRecover(0xc0005e6960)
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/util/auto_recover.go:28 +0x49
created by github.com/alibaba/sentinel-golang/core/system_metric.InitMemoryCollector.func1
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/core/system_metric/sys_metric_stat.go:100 +0xb0

goroutine 91 [sleep]:
time.Sleep(0xf4240)
    /usr/local/go/src/runtime/time.go:193 +0xd2
github.com/alibaba/sentinel-golang/util.StartTimeTicker.func1()
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/util/time_ticker.go:32 +0x6c
created by github.com/alibaba/sentinel-golang/util.StartTimeTicker
    /go/pkg/mod/github.com/alibaba/sentinel-golang@v1.0.4/util/time_ticker.go:28 +0xa5

goroutine 97 [select]:
github.com/go-redis/redis/v8/internal/pool.(*ConnPool).reaper(0xc0005f40a0, 0xdf8475800)
    /go/pkg/mod/github.com/go-redis/redis/v8@v8.10.0/internal/pool/pool.go:455 +0xd7
created by github.com/go-redis/redis/v8/internal/pool.NewConnPool
    /go/pkg/mod/github.com/go-redis/redis/v8@v8.10.0/internal/pool/pool.go:110 +0x1fc

goroutine 98 [select, 39 minutes]:
database/sql.(*DB).connectionOpener(0xc0004f08f0, 0x16617f0, 0xc0000bc980)
    /usr/local/go/src/database/sql/sql.go:1133 +0xb5
created by database/sql.OpenDB
    /usr/local/go/src/database/sql/sql.go:740 +0x12a

goroutine 75 [select, 39 minutes]:
github.com/go-sql-driver/mysql.(*mysqlConn).startWatcher.func1(0xc000418300, 0xc00040cb40, 0xc000216240)
    /go/pkg/mod/github.com/go-sql-driver/mysql@v1.6.0/connection.go:614 +0xa5
created by github.com/go-sql-driver/mysql.(*mysqlConn).startWatcher
    /go/pkg/mod/github.com/go-sql-driver/mysql@v1.6.0/connection.go:611 +0xbe

goroutine 30 [select]:
net/http.(*persistConn).roundTrip(0xc0002b07e0, 0xc000fea0c0, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/http/transport.go:2610 +0x765
net/http.(*Transport).roundTrip(0x1ee9860, 0xc0006a6500, 0x143ec20, 0x201, 0xc0006a6500)
    /usr/local/go/src/net/http/transport.go:592 +0xacb
net/http.(*Transport).RoundTrip(0x1ee9860, 0xc0006a6500, 0x1ee9860, 0xc0d10f77e5435956, 0x22d71d7c2ae)
    /usr/local/go/src/net/http/roundtrip.go:17 +0x35
net/http.send(0xc0006a6400, 0x1646740, 0x1ee9860, 0xc0d10f77e5435956, 0x22d71d7c2ae, 0x1ef8520, 0xc000208158, 0xc0d10f77e5435956, 0x1, 0x0)
    /usr/local/go/src/net/http/client.go:251 +0x454
net/http.(*Client).send(0xc001624480, 0xc0006a6400, 0xc0d10f77e5435956, 0x22d71d7c2ae, 0x1ef8520, 0xc000208158, 0x0, 0x1, 0xc001624510)
    /usr/local/go/src/net/http/client.go:175 +0xff
net/http.(*Client).do(0xc001624480, 0xc0006a6400, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/http/client.go:717 +0x45f
net/http.(*Client).Do(...)
    /usr/local/go/src/net/http/client.go:585
github.com/nacos-group/nacos-sdk-go/common/http_agent.post(0xc00009a0a0, 0x49, 0xc001624450, 0x80e8, 0xc001624300, 0x12c7dc0, 0xc001624300, 0x148c529)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/common/http_agent/post.go:37 +0x15d
github.com/nacos-group/nacos-sdk-go/common/http_agent.(*HttpAgent).Post(...)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/common/http_agent/http_agent.go:95
github.com/nacos-group/nacos-sdk-go/common/http_agent.(*HttpAgent).Request(0x1f29da0, 0x14842fd, 0x4, 0xc00009a0a0, 0x49, 0xc001624450, 0x80e8, 0xc001624300, 0x49, 0xc000497550, ...)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/common/http_agent/http_agent.go:79 +0x445
github.com/nacos-group/nacos-sdk-go/common/nacos_server.(*NacosServer).callConfigServer(0xc000137600, 0x14986bf, 0x17, 0xc001624300, 0xc001624330, 0x14842fd, 0x4, 0xc0003c2000, 0x2c, 0x1485e1c, ...)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/common/nacos_server/nacos_server.go:116 +0xaa7
github.com/nacos-group/nacos-sdk-go/common/nacos_server.(*NacosServer).ReqConfigApi(0xc000137600, 0x14986bf, 0x17, 0xc001624300, 0xc001624330, 0x14842fd, 0x4, 0x80e8, 0xb5000000013fa080, 0x1, ...)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/common/nacos_server/nacos_server.go:190 +0x205
github.com/nacos-group/nacos-sdk-go/clients/config_client.(*ConfigProxy).ListenConfig(0xc000268518, 0xc001624300, 0x1491e00, 0xc000048090, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/clients/config_client/config_proxy.go:184 +0x2aa
github.com/nacos-group/nacos-sdk-go/clients/config_client.(*ConfigClient).longPulling.func1(0xc00007f7a0, 0x0)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/clients/config_client/config_client.go:421 +0x511
github.com/nacos-group/nacos-sdk-go/clients/config_client.(*ConfigClient).delayScheduler(0xc0002684e0, 0xc00024a0f0, 0x989680, 0x14a98d2, 0x1, 0xc00022e030)
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/clients/config_client/config_client.go:357 +0x47
created by github.com/nacos-group/nacos-sdk-go/clients/config_client.(*ConfigClient).listenConfigExecutor.func1
    /go/pkg/mod/github.com/nacos-group/nacos-sdk-go@v1.0.9/clients/config_client/config_client.go:373 +0x1cb

goroutine 2423 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc0039bab10, 0x318)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0039bab00)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc000f25b78, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc000f25b60)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc700, 0xc002871f00)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 178 [chan receive, 39 minutes]:
github.com/fvbock/endless.(*endlessServer).handleSignals(0xc0003b4b40)
    /go/pkg/mod/github.com/fvbock/endless@v0.0.0-20170109170031-447134032cb6/endless.go:326 +0xef
created by github.com/fvbock/endless.(*endlessServer).ListenAndServe
    /go/pkg/mod/github.com/fvbock/endless@v0.0.0-20170109170031-447134032cb6/endless.go:213 +0x54

goroutine 144 [chan receive, 39 minutes]:
gitlab.stardustgod.com/infra/public-core-component/pkg/app.(*App).Run.func1(0x0, 0x0)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/app/app.go:60 +0x5d
golang.org/x/sync/errgroup.(*Group).Go.func1(0xc0000bdbc0, 0xc0005fbe40)
    /go/pkg/mod/golang.org/x/sync@v0.0.0-20220722155255-886fb9371eb4/errgroup/errgroup.go:75 +0x53
created by golang.org/x/sync/errgroup.(*Group).Go
    /go/pkg/mod/golang.org/x/sync@v0.0.0-20220722155255-886fb9371eb4/errgroup/errgroup.go:72 +0x71

goroutine 4906842 [select]:
github.com/segmentio/kafka-go.(*partitionWriter).awaitBatch(0xc000207380, 0xc0003ecbd0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1044 +0x76
github.com/segmentio/kafka-go.(*partitionWriter).newWriteBatch.func1()
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1036 +0x33
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc600, 0xc0005e6af8)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 58 [select, 39 minutes]:
gitlab.stardustgod.com/infra/public-core-component/pkg/app.(*App).Run.func3(0x0, 0x0)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/app/app.go:76 +0xb5
golang.org/x/sync/errgroup.(*Group).Go.func1(0xc0000bdbc0, 0xc00029da10)
    /go/pkg/mod/golang.org/x/sync@v0.0.0-20220722155255-886fb9371eb4/errgroup/errgroup.go:75 +0x53
created by golang.org/x/sync/errgroup.(*Group).Go
    /go/pkg/mod/golang.org/x/sync@v0.0.0-20220722155255-886fb9371eb4/errgroup/errgroup.go:72 +0x71

goroutine 57 [syscall, 39 minutes]:
os/signal.signal_recv(0x4744a6)
    /usr/local/go/src/runtime/sigqueue.go:168 +0xa5
os/signal.loop()
    /usr/local/go/src/os/signal/signal_unix.go:23 +0x25
created by os/signal.Notify.func1.1
    /usr/local/go/src/os/signal/signal.go:151 +0x45

goroutine 2658 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000feba10, 0x2f4c)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000feba00)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc001960678, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc001960660)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc300, 0xc0008c1180)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906809 [select]:
github.com/segmentio/kafka-go.(*Writer).WriteMessages(0xc0001dc100, 0x1661828, 0xc000044078, 0xc00055ae10, 0x1, 0x1, 0x0, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:659 +0x96b
    /data/web/internal/nexus/data/data_transform.go:254 +0x16a5
    /data/web/internal/nexus/biz/common.go:36
    /data/web/internal/nexus/api/v1/chapters.go:32 +0x1f1
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1.1(0xc00496a720, 0xc0006a6c00, 0xc0005e2720)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:61 +0x68
created by gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:55 +0x334

goroutine 227 [select]:
github.com/segmentio/kafka-go.async.await(0xc001607200, 0x1661860, 0xc0016074a0, 0x1661860, 0xc0016074a0, 0xc00077ad60, 0x2)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:873 +0xb3
github.com/segmentio/kafka-go.(*connPool).discover(0xc0000fe240, 0x16617f0, 0xc00055cd40, 0xc0002441e0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:606 +0x533
created by github.com/segmentio/kafka-go.(*Transport).grabPool
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:254 +0x4cd

goroutine 1533 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc001e76890, 0x628)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc001e76880)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc001c93638, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc001c93620)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc600, 0xc002282020)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 6723 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000e3b3d0, 0x31c)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000e3b3c0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc001145398, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc001145380)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc700, 0xc0032bfde0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 239 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055d9d0, 0x13e2d)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055d9c0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0005df6f8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0005df6e0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc0002186d0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906791 [IO wait]:
internal/poll.runtime_pollWait(0x7f7ac4004c28, 0x72, 0xffffffffffffffff)
    /usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc0003a0098, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc0003a0080, 0xc0039ec2b1, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/internal/poll/fd_unix.go:166 +0x1d5
net.(*netFD).Read(0xc0003a0080, 0xc0039ec2b1, 0x1, 0x1, 0x4, 0xc00048cf08, 0x44e9df)
    /usr/local/go/src/net/fd_posix.go:55 +0x4f
net.(*conn).Read(0xc0002081c8, 0xc0039ec2b1, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:183 +0x91
net/http.(*connReader).backgroundRead(0xc0039ec2a0)
    /usr/local/go/src/net/http/server.go:672 +0x58
created by net/http.(*connReader).startBackgroundRead
    /usr/local/go/src/net/http/server.go:668 +0xd5

goroutine 241 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055da10, 0x13e0d)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055da00)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0005df7b8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0005df7a0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000218890)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 243 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055da50, 0xc000013e3e)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055da40)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0005df878, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0005df860)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc0002188c0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906792 [select]:
gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1(0xc0009cc100)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:66 +0x3df
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
    /data/web/internal/pkg/middleware/sentinel.go:105 +0x122
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
    /data/web/internal/pkg/middleware/logger.go:45 +0xb8
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
    /data/web/internal/pkg/middleware/recovery.go:50 +0x70
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc00040e1a0, 0xc0009cc100)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/gin.go:489 +0x2aa
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc00040e1a0, 0x165cbb8, 0xc0006de0e0, 0xc0009cc000)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/gin.go:445 +0x15c
net/http.serverHandler.ServeHTTP(0xc0003b4b40, 0x165cbb8, 0xc0006de0e0, 0xc0009cc000)
    /usr/local/go/src/net/http/server.go:2867 +0xa3
net/http.(*conn).serve(0xc000012c80, 0x1661898, 0xc002cd2040)
    /usr/local/go/src/net/http/server.go:1932 +0x8cd
created by net/http.(*Server).Serve
    /usr/local/go/src/net/http/server.go:2993 +0x39b

goroutine 245 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055da90, 0x13ed0)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055da80)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0005df938, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0005df920)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000218910)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 247 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055dad0, 0x13e21)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055dac0)
    /usr/local/go/src/sync/cond.go:56 +0x99
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906777 [select]:
github.com/segmentio/kafka-go.(*Writer).WriteMessages(0xc0001dc100, 0x1661828, 0xc000044078, 0xc00052e120, 0x1, 0x1, 0x0, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:659 +0x96b
    /data/web/internal/nexus/data/data_transform.go:254 +0x16a5
    /data/web/internal/nexus/biz/common.go:36
    /data/web/internal/nexus/api/v1/chapters.go:32 +0x1f1
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1.1(0xc000f24a80, 0xc0009ccf00, 0xc000244540)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:61 +0x68
created by gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:55 +0x334

goroutine 4906837 [IO wait]:
internal/poll.runtime_pollWait(0x7f7ac38d52a0, 0x72, 0xffffffffffffffff)
    /usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000168518, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc000168500, 0xc0001df6c1, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/internal/poll/fd_unix.go:166 +0x1d5
net.(*netFD).Read(0xc000168500, 0xc0001df6c1, 0x1, 0x1, 0xc0004bcca0, 0x16565f0, 0xc0005c7770)
    /usr/local/go/src/net/fd_posix.go:55 +0x4f
net.(*conn).Read(0xc000560280, 0xc0001df6c1, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:183 +0x91
net/http.(*connReader).backgroundRead(0xc0001df6b0)
    /usr/local/go/src/net/http/server.go:672 +0x58
created by net/http.(*connReader).startBackgroundRead
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0005df9f8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0005df9e0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000218b30)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 249 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055dd90, 0x13e8d)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055dd80)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc000206018, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc000206000)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000218c70)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 251 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055ddd0, 0x13e23)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055ddc0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0002060d8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0002060c0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000218c90)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 3240 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00047f9d0, 0x2f1c)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00047f9c0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc001960df8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc001960de0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc300, 0xc00133bbc0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 253 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00055de10, 0x13e8b)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc00055de00)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc000206918, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc000206900)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000218cb0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 1324563 [sync.Cond.Wait, 6 minutes]:
sync.runtime_notifyListWait(0xc003d0ab10, 0x3)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
    /usr/local/go/src/net/http/server.go:668 +0xd5

goroutine 641 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000b390d0, 0x608)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000b390c0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc000c3d1b8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc000c3d1a0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc600, 0xc00073ba20)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906840 [IO wait]:
internal/poll.runtime_pollWait(0x7f7ac389ae88, 0x72, 0xffffffffffffffff)
    /usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc000168618, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc000168600, 0xc0001dfc31, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/internal/poll/fd_unix.go:166 +0x1d5
net.(*netFD).Read(0xc000168600, 0xc0001dfc31, 0x1, 0x1, 0xc002cfaf60, 0x16565f0, 0xc0005c4f70)
    /usr/local/go/src/net/fd_posix.go:55 +0x4f
net.(*conn).Read(0xc000560338, 0xc0001dfc31, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:183 +0x91
net/http.(*connReader).backgroundRead(0xc0001dfc20)
    /usr/local/go/src/net/http/server.go:672 +0x58
created by net/http.(*connReader).startBackgroundRead
    /usr/local/go/src/net/http/server.go:668 +0xd5

goroutine 3297 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc0007af710, 0x1087)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0007af700)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc002cd11b8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc002cd11a0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc400, 0xc00135fb20)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 727 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000223cd0, 0x62d)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000223cc0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc000207398, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc000207380)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc600, 0xc0005ffa90)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 3647 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc004a6e450, 0x319)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc004a6e440)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc004b82678, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc004b82660)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc700, 0xc004aaf050)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 13100 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc002b72450, 0x317)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc002b72440)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc001c463d8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc001c463c0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc700, 0xc0004522e0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906835 [select]:
gitlab.stardustgod.com/infra/public-core-component/pkg/timeout/gin.Timeout.func1(0xc0006a7000)
    /go/pkg/mod/gitlab.stardustgod.com/infra/public-core-component@v0.0.0-20220407095715-36316d365e74/pkg/timeout/gin/timeout.go:66 +0x3df
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
    /data/web/internal/pkg/middleware/sentinel.go:105 +0x122
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
    /data/web/internal/pkg/middleware/logger.go:45 +0xb8
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
    /data/web/internal/pkg/middleware/recovery.go:50 +0x70
github.com/gin-gonic/gin.(*Context).Next(...)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/context.go:165
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc00040e1a0, 0xc0006a7000)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/gin.go:489 +0x2aa
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc00040e1a0, 0x165cbb8, 0xc0000ee460, 0xc0006a6f00)
    /go/pkg/mod/github.com/gin-gonic/gin@v1.7.2/gin.go:445 +0x15c
net/http.serverHandler.ServeHTTP(0xc0003b4b40, 0x165cbb8, 0xc0000ee460, 0xc0006a6f00)
    /usr/local/go/src/net/http/server.go:2867 +0xa3
net/http.(*conn).serve(0xc00058a280, 0x1661898, 0xc001e76400)
    /usr/local/go/src/net/http/server.go:1932 +0x8cd
created by net/http.(*Server).Serve
    /usr/local/go/src/net/http/server.go:2993 +0x39b

goroutine 4906800 [select]:
github.com/segmentio/kafka-go.(*partitionWriter).awaitBatch(0xc000206000, 0xc000348620)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1044 +0x76
github.com/segmentio/kafka-go.(*partitionWriter).newWriteBatch.func1()
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1036 +0x33
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000020f78)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4505594 [chan receive]:
github.com/segmentio/kafka-go.(*conn).run(0xc000553a40, 0xc001f12700, 0xc0005e25a0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:1246 +0xa5
created by github.com/segmentio/kafka-go.(*connGroup).connect
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:1224 +0x9a5

goroutine 4906834 [select]:
github.com/segmentio/kafka-go.(*partitionWriter).awaitBatch(0xc000206d20, 0xc0003ec930)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1044 +0x76
github.com/segmentio/kafka-go.(*partitionWriter).newWriteBatch.func1()
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1036 +0x33
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc0005e6540)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906812 [select]:
github.com/segmentio/kafka-go.(*partitionWriter).awaitBatch(0xc000206ba0, 0xc0003ec5b0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1044 +0x76
github.com/segmentio/kafka-go.(*partitionWriter).newWriteBatch.func1()
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1036 +0x33
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc0000cc9a8)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906798 [select]:
github.com/segmentio/kafka-go.(*partitionWriter).awaitBatch(0xc0002060c0, 0xc0003485b0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1044 +0x76
github.com/segmentio/kafka-go.(*partitionWriter).newWriteBatch.func1()
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1036 +0x33
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000020f18)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4257 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc0000bd890, 0x31d)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0000bd880)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc000dafe78, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc000dafe60)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc700, 0xc0018c0bd0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 924 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000ab9f50, 0x107b)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000ab9f40)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc001607398, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc001607380)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc400, 0xc0006fb3d0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 929 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc0007af390, 0x631)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0007af380)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0016078d8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0016078c0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc600, 0xc000563180)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 955 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000e3a050, 0x625)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000e3a040)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0015ae8b8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0015ae8a0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc600, 0xc001acc0c0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 3754 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc002cdb190, 0x1062)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc002cdb180)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0006a2018, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0006a2000)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc400, 0xc0049d9bb0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4528395 [chan receive]:
github.com/segmentio/kafka-go.(*conn).run(0xc002574050, 0xc001f12440, 0xc00010a0c0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:1246 +0xa5
created by github.com/segmentio/kafka-go.(*connGroup).connect
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/transport.go:1224 +0x9a5

goroutine 4678 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000b39c90, 0x317)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000b39c80)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc002d06438, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc002d06420)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc700, 0xc001266a60)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 3838 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc0049c53d0, 0x1063)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0049c53c0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc002cd13f8, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc002cd13e0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc400, 0xc004926620)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906801 [select]:
github.com/segmentio/kafka-go.(*partitionWriter).awaitBatch(0xc0005df7a0, 0xc000348700)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1044 +0x76
github.com/segmentio/kafka-go.(*partitionWriter).newWriteBatch.func1()
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:1036 +0x33
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc100, 0xc000020fa8)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4005 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc003d0ab90, 0x31b)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc003d0ab80)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc003591d58, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc003591d40)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc700, 0xc0019fca50)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

goroutine 4906794 [IO wait]:
internal/poll.runtime_pollWait(0x7f7ac38d7c50, 0x72, 0xffffffffffffffff)
    /usr/local/go/src/runtime/netpoll.go:222 +0x55
internal/poll.(*pollDesc).wait(0xc00022c218, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
    /usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc00022c200, 0xc0039ec3a1, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/internal/poll/fd_unix.go:166 +0x1d5
net.(*netFD).Read(0xc00022c200, 0xc0039ec3a1, 0x1, 0x1, 0x4, 0xc0008a3708, 0x44e9df)
    /usr/local/go/src/net/fd_posix.go:55 +0x4f
net.(*conn).Read(0xc000208228, 0xc0039ec3a1, 0x1, 0x1, 0x0, 0x0, 0x0)
    /usr/local/go/src/net/net.go:183 +0x91
net/http.(*connReader).backgroundRead(0xc0039ec390)
    /usr/local/go/src/net/http/server.go:672 +0x58
created by net/http.(*connReader).startBackgroundRead
    /usr/local/go/src/net/http/server.go:668 +0xd5

goroutine 1131661 [sync.Cond.Wait, 6 minutes]:
sync.runtime_notifyListWait(0xc0022a42d0, 0x3)
    /usr/local/go/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc0022a42c0)
    /usr/local/go/src/sync/cond.go:56 +0x99
github.com/segmentio/kafka-go.(*batchQueue).Get(0xc0006a2318, 0x0)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:921 +0x85
github.com/segmentio/kafka-go.(*partitionWriter).writeBatches(0xc0006a2300)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:981 +0x45
github.com/segmentio/kafka-go.(*Writer).spawn.func1(0xc0001dc500, 0xc0005fe300)
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:535 +0x57
created by github.com/segmentio/kafka-go.(*Writer).spawn
    /go/pkg/mod/github.com/segmentio/kafka-go@v0.4.34/writer.go:533 +0x69

Environment

zouzehe commented 1 year ago

the main code of the timeout middleware

package gin

import (
    "context"
    ginfk "github.com/gin-gonic/gin"
    "net/http"
    "time"
    "sync"
    "bytes"
    "fmt"
)

var (
    defaultOptions Options
)

func init() {
    defaultOptions = Options{
        CallBack:         nil,
        DefaultMsg:       `{"code": -1, "msg":"http: Handler timeout"}`,
        Timeout:          3 * time.Second,
        ErrorHttpCode:    http.StatusServiceUnavailable,
        CallBackResponse: nil,
    }
}

func Timeout(opts ...Option) ginfk.HandlerFunc {
    return func(c *ginfk.Context) {
        // sync.Pool
        buffer := GetBuff()

        tw := &Writer{body: buffer, ResponseWriter: c.Writer,
            h: make(http.Header)}
        tw.Options = defaultOptions

        // Loop through each option
        for _, opt := range opts {
            // Call the option giving the instantiated
            opt(tw)
        }

        // wrap the request context with a timeout
        ctx, cancel := context.WithTimeout(c.Request.Context(), tw.Timeout)
        defer cancel()

        c.Request = c.Request.WithContext(ctx)

        // Channel capacity must be greater than 0.
        // Otherwise, if the parent coroutine quit due to timeout,
        // the child coroutine may never be able to quit.
        finish := make(chan struct{}, 1)
        panicChan := make(chan interface{}, 1)
        go func() {
            defer func() {
                if p := recover(); p != nil {
                    panicChan <- p
                }
            }()
            c.Next()
            finish <- struct{}{}
        }()

        var err error
        select {
        case p := <-panicChan:
            panic(p)

        case <-ctx.Done():
            tw.mu.Lock()
            defer tw.mu.Unlock()

            c.Writer = tw

            tw.timedOut = true
            tw.ResponseWriter.WriteHeader(tw.ErrorHttpCode)
            if tw.CallBackResponse != nil {
                body, ct := tw.CallBackResponse()
                head := tw.ResponseWriter.Header()
                head["Content-Type"] = ct
                _, err = tw.ResponseWriter.Write(body)
            } else {
                _, err = tw.ResponseWriter.Write([]byte(tw.DefaultMsg))
            }
            if err != nil {
                panic(err)
            }
            c.Abort()

            // execute callback func
            if tw.CallBack != nil {
                tw.CallBack(c.Request.Clone(context.Background()))
            }
            // If timeout happen, the buffer cannot be cleared actively,
            // but wait for the GC to recycle.
        case <-finish:
            tw.mu.Lock()
            defer tw.mu.Unlock()

            c.Writer = tw

            dst := tw.ResponseWriter.Header()
            for k, vv := range tw.Header() {
                dst[k] = vv
            }

            //if !tw.wroteHeader {
            //  tw.code = http.StatusOK
            //}

            tw.ResponseWriter.WriteHeader(tw.code)
            _, err = tw.ResponseWriter.Write(buffer.Bytes())
            if err != nil {
                panic(err)
            }
            PutBuff(buffer)
        }

    }
}

type Writer struct {
    ginfk.ResponseWriter
    // header
    h http.Header
    // body
    body    *bytes.Buffer
    Options // TimeoutOptions in options.go

    code        int
    mu          sync.Mutex
    timedOut    bool
    wroteHeader bool
}

func (tw *Writer) Write(b []byte) (int, error) {
    tw.mu.Lock()
    defer tw.mu.Unlock()
    if tw.timedOut {
        return 0, nil
    }

    return tw.body.Write(b)
}

func (tw *Writer) WriteHeader(code int) {
    checkWriteHeaderCode(code)
    tw.mu.Lock()
    defer tw.mu.Unlock()
    if tw.timedOut {
        return
    }
    tw.writeHeader(code)
}

func (tw *Writer) writeHeader(code int) {
    tw.wroteHeader = true
    tw.code = code
}

func (tw *Writer) WriteHeaderNow() {}

func (tw *Writer) Header() http.Header {
    return tw.h
}

func checkWriteHeaderCode(code int) {
    if code < 100 || code > 999 {
        panic(fmt.Sprintf("invalid WriteHeader code %v", code))
    }
}
bbdshow commented 1 year ago

tw.mu can't be locked http.ResponseWriter.Header() map. it can only lock you custom Writer struct. so the c.Data() and the tw.Header() timeout not mutex

bbdshow commented 1 year ago

when timeout, the header should be custom, or reference https://github.com/gin-contrib/timeout

you can reference net/http/server.go line:3316 (go ver:1.17.7) implementation.

func (h *timeoutHandler) ServeHTTP(w ResponseWriter, r *Request) {
    ctx := h.testContext
    if ctx == nil {
        var cancelCtx context.CancelFunc
        ctx, cancelCtx = context.WithTimeout(r.Context(), h.dt)
        defer cancelCtx()
    }
    r = r.WithContext(ctx)
    done := make(chan struct{})
    tw := &timeoutWriter{
        w:   w,
        h:   make(Header),
        req: r,
    }
    panicChan := make(chan interface{}, 1)
    go func() {
        defer func() {
            if p := recover(); p != nil {
                panicChan <- p
            }
        }()
        h.handler.ServeHTTP(tw, r)
        close(done)
    }()
    select {
    case p := <-panicChan:
        panic(p)
    case <-done:
        tw.mu.Lock()
        defer tw.mu.Unlock()
        dst := w.Header()
        for k, vv := range tw.h {
            dst[k] = vv
        }
        if !tw.wroteHeader {
            tw.code = StatusOK
        }
        w.WriteHeader(tw.code)
        w.Write(tw.wbuf.Bytes())
    case <-ctx.Done():
        tw.mu.Lock()
        defer tw.mu.Unlock()
        w.WriteHeader(StatusServiceUnavailable)
        io.WriteString(w, h.errorBody())
        tw.timedOut = true
    }
}