beego配合七牛生成token,偶尔出现,fatal error: concurrent map writes
调用代码如下
returnBody := {"key":$(key),"etag":$(etag),"fsize":$(fsize),"mimeType":$(mimeType),"imageInfo_width":$(imageInfo.width),"imageInfo_height":$(imageInfo.height)}
putPolicy := kodo.PutPolicy{
Expires: uint32(expires),
Scope: bucketName,
ReturnBody: returnBody,
MimeLimit: "image/*",
}
return qiniu_client.MakeUptoken(&putPolicy)
错误如下
fatal error: concurrent map writes
goroutine 218 [running]:
runtime.throw(0x885129, 0x15)
/usr/local/go/src/runtime/panic.go:566 +0x95 fp=0xc420276d68 sp=0xc420276d48
runtime.mapassign1(0x7b62c0, 0xc42013f860, 0xc420276ee8, 0xc420276f28)
/usr/local/go/src/runtime/hashmap.go:458 +0x8ef fp=0xc420276e50 sp=0xc420276d68
qiniupkg.com/api.v7/api.(*Client).GetBucketInfo(0xc42013fe00, 0xc42013e900, 0x28, 0xc42000dbe0, 0x6, 0xc4201c5900, 0x3, 0x4, 0xc4203e4740, 0x14, ...)
/Users/alicksnake/go/src/qiniupkg.com/api.v7/api/api.go:57 +0x3a2 fp=0xc420276f68 sp=0xc420276e50
qiniupkg.com/api.v7/kodo.(*Client).GetBucketInfo(0xc4200ff6b0, 0xc42000dbe0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc4202770f8, ...)
/Users/alicksnake/go/src/qiniupkg.com/api.v7/kodo/token.go:115 +0x98 fp=0xc420277010 sp=0xc420276f68
qiniupkg.com/api.v7/kodo.(*Client).MakeUptokenWithSafe(0xc4200ff6b0, 0xc42041f320, 0x0, 0x3a0000c420472d84, 0x0, 0x0)
/Users/alicksnake/go/src/qiniupkg.com/api.v7/kodo/token.go:92 +0x190 fp=0xc4202770c0 sp=0xc420277010
qiniupkg.com/api.v7/kodo.(*Client).MakeUptoken(0xc4200ff6b0, 0xc42041f320, 0xc4201540f8, 0xc4202e2ea0)
/Users/alicksnake/go/src/qiniupkg.com/api.v7/kodo/token.go:81 +0x3c fp=0xc420277138 sp=0xc4202770c0
childschool/models/utils.Image_Uptoken_NO_CallBack(0xc42000dbe0, 0x6, 0x278d00, 0xc42000dbe0, 0x6)
/Users/alicksnake/go/src/childschool/models/utils/util_qiniu.go:54 +0xfd fp=0xc420277290 sp=0xc420277138
childschool/controllers/suiyin/app/api/v1.(*QiniuController).GetUpToken(0xc4200cca50)
/Users/alicksnake/go/src/childschool/controllers/suiyin/app/api/v1/qiniu.go:64 +0x19b fp=0xc420277380 sp=0xc420277290
runtime.call32(0xc420428fc0, 0xc4203de8d8, 0xc4203de8e0, 0x800000008)
/usr/local/go/src/runtime/asm_amd64.s:479 +0x4c fp=0xc4202773b0 sp=0xc420277380
reflect.Value.call(0x85a820, 0xc4200cca50, 0x6a13, 0x87204d, 0x4, 0x0, 0x0, 0x0, 0xc4203de8d0, 0x13, ...)
/usr/local/go/src/reflect/value.go:434 +0x5c8 fp=0xc420277700 sp=0xc4202773b0
reflect.Value.Call(0x85a820, 0xc4200cca50, 0x6a13, 0x0, 0x0, 0x0, 0xc4200cca50, 0x6a13, 0xc42003b848)
/usr/local/go/src/reflect/value.go:302 +0xa4 fp=0xc420277768 sp=0xc420277700
github.com/astaxie/beego.(*ControllerRegister).ServeHTTP(0xc4200937c0, 0xca52a0, 0xc420071e10, 0xc4201b63c0)
/Users/alicksnake/go/src/github.com/astaxie/beego/router.go:785 +0x1eb1 fp=0xc420277cd0 sp=0xc420277768
net/http.serverHandler.ServeHTTP(0xc42008a300, 0xca52a0, 0xc420071e10, 0xc4201b63c0)
/usr/local/go/src/net/http/server.go:2202 +0x7d fp=0xc420277d18 sp=0xc420277cd0
net/http.(*conn).serve(0xc42030e480, 0xca5ca0, 0xc42044abc0)
/usr/local/go/src/net/http/server.go:1579 +0x4b7 fp=0xc420277f78 sp=0xc420277d18
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2086 +0x1 fp=0xc420277f80 sp=0xc420277f78
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:2293 +0x44d
goroutine 1 [chan receive, 8 minutes]:
github.com/astaxie/beego.(*App).Run(0xc42000d8f0)
/Users/alicksnake/go/src/github.com/astaxie/beego/app.go:190 +0x6fd
github.com/astaxie/beego.Run(0x0, 0x0, 0x0)
/Users/alicksnake/go/src/github.com/astaxie/beego/beego.go:67 +0x51
main.main()
/Users/alicksnake/go/src/childschool/main.go:241 +0x4a0
goroutine 17 [syscall, 8 minutes, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2086 +0x1
goroutine 5 [syscall, 8 minutes]:
os/signal.signal_recv(0x0)
/usr/local/go/src/runtime/sigqueue.go:116 +0x157
os/signal.loop()
/usr/local/go/src/os/signal/signal_unix.go:22 +0x22
created by os/signal.init.1
/usr/local/go/src/os/signal/signal_unix.go:28 +0x41
goroutine 6 [chan receive, 8 minutes]:
database/sql.(*DB).connectionOpener(0xc4200ff550)
/usr/local/go/src/database/sql/sql.go:730 +0x4a
created by database/sql.Open
/usr/local/go/src/database/sql/sql.go:493 +0x1e9
goroutine 247 [select]:
net/http.(*persistConn).writeLoop(0xc42006c100)
/usr/local/go/src/net/http/transport.go:1641 +0x3bd
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:1058 +0x50e
goroutine 36 [select]:
childschool/models/suiyin.(*Timmer).InitTimer.func1()
/Users/alicksnake/go/src/childschool/models/suiyin/timer.go:53 +0x1f4
created by childschool/models/suiyin.(*Timmer).InitTimer
/Users/alicksnake/go/src/childschool/models/suiyin/timer.go:72 +0x65
goroutine 37 [IO wait]:
net.runtime_pollWait(0x1108da8, 0x72, 0x0)
/usr/local/go/src/runtime/netpoll.go:160 +0x59
net.(*pollDesc).wait(0xc420460d80, 0x72, 0xc420468c70, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x38
net.(*pollDesc).waitRead(0xc420460d80, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x34
net.(*netFD).accept(0xc420460d20, 0x0, 0xc9f3a0, 0xc420288c80)
/usr/local/go/src/net/fd_unix.go:419 +0x238
net.(*TCPListener).accept(0xc420324028, 0x29e8d60800, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:132 +0x2e
net.(*TCPListener).AcceptTCP(0xc420324028, 0xc420468d98, 0xc420468da0, 0xc420468d90)
/usr/local/go/src/net/tcpsock.go:209 +0x49
net/http.tcpKeepAliveListener.Accept(0xc420324028, 0x933bd8, 0xc42030e480, 0xca5d60, 0xc420462270)
/usr/local/go/src/net/http/server.go:2608 +0x2f
net/http.(*Server).Serve(0xc42008a300, 0xca5620, 0xc420324028, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2273 +0x1ce
net/http.(*Server).ListenAndServe(0xc42008a300, 0xc420456620, 0x0)
/usr/local/go/src/net/http/server.go:2219 +0xb4
github.com/astaxie/beego.(*App).Run.func4(0xc42000d8f0, 0xc4204565e0, 0x5, 0xc420460cb0)
/Users/alicksnake/go/src/github.com/astaxie/beego/app.go:182 +0x4aa
created by github.com/astaxie/beego.(*App).Run
/Users/alicksnake/go/src/github.com/astaxie/beego/app.go:188 +0x748
goroutine 193 [IO wait]:
net.runtime_pollWait(0x1108e68, 0x72, 0xf6)
/usr/local/go/src/runtime/netpoll.go:160 +0x59
net.(*pollDesc).wait(0xc42006fd40, 0x72, 0xc420189790, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x38
net.(*pollDesc).waitRead(0xc42006fd40, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x34
net.(*netFD).Read(0xc42006fce0, 0xc42023a000, 0x1000, 0x1000, 0x0, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_unix.go:243 +0x1a1
net.(*conn).Read(0xc42002c620, 0xc42023a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:173 +0x70
net/http.(*connReader).Read(0xc4203dd6c0, 0xc42023a000, 0x1000, 0x1000, 0x1acd69, 0xcc29a0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x144
bufio.(*Reader).fill(0xc420295560)
/usr/local/go/src/bufio/bufio.go:97 +0x10c
bufio.(*Reader).ReadSlice(0xc420295560, 0xa, 0x0, 0x1e, 0x0, 0x33, 0x0)
/usr/local/go/src/bufio/bufio.go:330 +0xb5
bufio.(*Reader).ReadLine(0xc420295560, 0xc4201b61e0, 0xf0, 0xf0, 0x8471c0, 0x29f1c3, 0xccfbe8)
/usr/local/go/src/bufio/bufio.go:359 +0x37
net/textproto.(*Reader).readLineSlice(0xc4203a4540, 0xc420189a88, 0xc420189a88, 0x17df8, 0xf0, 0x8471c0)
/usr/local/go/src/net/textproto/reader.go:55 +0x5e
net/textproto.(*Reader).ReadLine(0xc4203a4540, 0xc4201b61e0, 0xc, 0x0, 0x31f4c)
/usr/local/go/src/net/textproto/reader.go:36 +0x2f
net/http.readRequest(0xc420295560, 0xc42023b000, 0xc4201b61e0, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:793 +0xa5
net/http.(*conn).readRequest(0xc420367680, 0xca5ca0, 0xc4201c53c0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:765 +0x10d
net/http.(*conn).serve(0xc420367680, 0xca5ca0, 0xc4201c53c0)
/usr/local/go/src/net/http/server.go:1532 +0x3d3
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:2293 +0x44d
goroutine 246 [IO wait]:
net.runtime_pollWait(0x1108028, 0x72, 0x108)
/usr/local/go/src/runtime/netpoll.go:160 +0x59
net.(*pollDesc).wait(0xc420180a00, 0x72, 0xc42003e9d0, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x38
net.(*pollDesc).waitRead(0xc420180a00, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x34
net.(*netFD).Read(0xc4201809a0, 0xc420379000, 0x1000, 0x1000, 0x0, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_unix.go:243 +0x1a1
net.(*conn).Read(0xc4203de930, 0xc420379000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:173 +0x70
net/http.(*persistConn).Read(0xc42006c100, 0xc420379000, 0x1000, 0x1000, 0x1d5af0, 0xc42003eb58, 0xba1d)
/usr/local/go/src/net/http/transport.go:1256 +0x154
bufio.(*Reader).fill(0xc420255e60)
/usr/local/go/src/bufio/bufio.go:97 +0x10c
bufio.(*Reader).Peek(0xc420255e60, 0x1, 0xc42003ebbd, 0x1, 0x0, 0xc420255ec0, 0x0)
/usr/local/go/src/bufio/bufio.go:129 +0x62
net/http.(*persistConn).readLoop(0xc42006c100)
/usr/local/go/src/net/http/transport.go:1413 +0x1a1
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:1057 +0x4e9
goroutine 199 [runnable]:
bytes.(*Buffer).WriteString(0xc420470a50, 0xc4202890a0, 0x17, 0x0, 0x0, 0x0)
/usr/local/go/src/bytes/buffer.go:141
encoding/json.(*encodeState).string(0xc420470a50, 0xc4202890a0, 0x17, 0xc420289001, 0x17)
/usr/local/go/src/encoding/json/encode.go:918 +0x4df
encoding/json.stringEncoder(0xc420470a50, 0x788c20, 0xc42044ad90, 0x198, 0x780100)
/usr/local/go/src/encoding/json/encode.go:564 +0x228
encoding/json.(*arrayEncoder).encode(0xc4203de0c8, 0xc420470a50, 0x781680, 0xc4203e6340, 0x197, 0x100)
/usr/local/go/src/encoding/json/encode.go:723 +0xee
encoding/json.(*arrayEncoder).(encoding/json.encode)-fm(0xc420470a50, 0x781680, 0xc4203e6340, 0x197, 0x750100)
/usr/local/go/src/encoding/json/encode.go:730 +0x64
encoding/json.(*sliceEncoder).encode(0xc4203de0d0, 0xc420470a50, 0x781680, 0xc4203e6340, 0x197, 0x100)
/usr/local/go/src/encoding/json/encode.go:697 +0xc1
encoding/json.(*sliceEncoder).(encoding/json.encode)-fm(0xc420470a50, 0x781680, 0xc4203e6340, 0x197, 0x100)
/usr/local/go/src/encoding/json/encode.go:709 +0x64
encoding/json.(*structEncoder).encode(0xc42041c480, 0xc420470a50, 0x848560, 0xc4203e6240, 0x199, 0x100)
/usr/local/go/src/encoding/json/encode.go:601 +0x253
encoding/json.(*structEncoder).(encoding/json.encode)-fm(0xc420470a50, 0x848560, 0xc4203e6240, 0x199, 0xc4203e0100)
/usr/local/go/src/encoding/json/encode.go:615 +0x64
encoding/json.(*ptrEncoder).encode(0xc4203de0e0, 0xc420470a50, 0x7761c0, 0xc4203e6240, 0x16, 0x770100)
/usr/local/go/src/encoding/json/encode.go:742 +0xe3
encoding/json.(*ptrEncoder).(encoding/json.encode)-fm(0xc420470a50, 0x7761c0, 0xc4203e6240, 0x16, 0xc4203e0100)
/usr/local/go/src/encoding/json/encode.go:747 +0x64
encoding/json.(*encodeState).reflectValue(0xc420470a50, 0x7761c0, 0xc4203e6240, 0x16, 0x100)
/usr/local/go/src/encoding/json/encode.go:307 +0x82
encoding/json.(*encodeState).marshal(0xc420470a50, 0x7761c0, 0xc4203e6240, 0x60100, 0x0, 0x0)
/usr/local/go/src/encoding/json/encode.go:280 +0xb8
encoding/json.Marshal(0x7761c0, 0xc4203e6240, 0xcd0540, 0xc42044ad80, 0x3, 0x4, 0xc420289000)
/usr/local/go/src/encoding/json/encode.go:145 +0x8f
qiniupkg.com/api.v7/kodo.(*Client).MakeUptokenWithSafe(0xc4200ff6b0, 0xc4203e6120, 0x0, 0x3a0000c4203bb7c4, 0x0, 0x0)
/Users/alicksnake/go/src/qiniupkg.com/api.v7/kodo/token.go:103 +0xe5
qiniupkg.com/api.v7/kodo.(*Client).MakeUptoken(0xc4200ff6b0, 0xc4203e6120, 0xc4201540f8, 0xc420482ea0)
/Users/alicksnake/go/src/qiniupkg.com/api.v7/kodo/token.go:81 +0x3c
childschool/models/utils.Image_Uptoken_NO_CallBack(0xc42000dbe0, 0x6, 0x278d00, 0xc42000dbe0, 0x6)
/Users/alicksnake/go/src/childschool/models/utils/util_qiniu.go:54 +0xfd
childschool/controllers/suiyin/app/api/v1.(*QiniuController).GetUpToken(0xc4201b6000)
/Users/alicksnake/go/src/childschool/controllers/suiyin/app/api/v1/qiniu.go:64 +0x19b
reflect.Value.call(0x85a820, 0xc4201b6000, 0x6a13, 0x87204d, 0x4, 0x0, 0x0, 0x0, 0xc420324038, 0x13, ...)
/usr/local/go/src/reflect/value.go:434 +0x5c8
reflect.Value.Call(0x85a820, 0xc4201b6000, 0x6a13, 0x0, 0x0, 0x0, 0xc4201b6000, 0x6a13, 0xc420185828)
/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/astaxie/beego.(*ControllerRegister).ServeHTTP(0xc4200937c0, 0xca52a0, 0xc420341a00, 0xc420218960)
/Users/alicksnake/go/src/github.com/astaxie/beego/router.go:785 +0x1eb1
net/http.serverHandler.ServeHTTP(0xc42008a300, 0xca52a0, 0xc420341a00, 0xc420218960)
/usr/local/go/src/net/http/server.go:2202 +0x7d
net/http.(*conn).serve(0xc42008a800, 0xca5ca0, 0xc4203356c0)
/usr/local/go/src/net/http/server.go:1579 +0x4b7
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:2293 +0x44d
goroutine 234 [IO wait]:
net.runtime_pollWait(0x14018d0, 0x72, 0x10a)
/usr/local/go/src/runtime/netpoll.go:160 +0x59
net.(*pollDesc).wait(0xc4204611e0, 0x72, 0xc4204649d0, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x38
net.(*pollDesc).waitRead(0xc4204611e0, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x34
net.(*netFD).Read(0xc420461180, 0xc420306000, 0x1000, 0x1000, 0x0, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_unix.go:243 +0x1a1
net.(*conn).Read(0xc42002c710, 0xc420306000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:173 +0x70
net/http.(*persistConn).Read(0xc420216100, 0xc420306000, 0x1000, 0x1000, 0x1d5af0, 0xc420464b58, 0xba1d)
/usr/local/go/src/net/http/transport.go:1256 +0x154
bufio.(*Reader).fill(0xc420268a80)
/usr/local/go/src/bufio/bufio.go:97 +0x10c
bufio.(*Reader).Peek(0xc420268a80, 0x1, 0xc420464bbd, 0x1, 0x0, 0xc420268ae0, 0x0)
/usr/local/go/src/bufio/bufio.go:129 +0x62
net/http.(*persistConn).readLoop(0xc420216100)
/usr/local/go/src/net/http/transport.go:1413 +0x1a1
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:1057 +0x4e9
goroutine 235 [select]:
net/http.(*persistConn).writeLoop(0xc420216100)
/usr/local/go/src/net/http/transport.go:1641 +0x3bd
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:1058 +0x50e
goroutine 204 [IO wait]:
net.runtime_pollWait(0x1108328, 0x72, 0x104)
/usr/local/go/src/runtime/netpoll.go:160 +0x59
net.(*pollDesc).wait(0xc4202b8bc0, 0x72, 0xc42027b790, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x38
net.(*pollDesc).waitRead(0xc4202b8bc0, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x34
net.(*netFD).Read(0xc4202b8b60, 0xc420246000, 0x1000, 0x1000, 0x0, 0xca13a0, 0xc42000c078)
/usr/local/go/src/net/fd_unix.go:243 +0x1a1
net.(*conn).Read(0xc4201de148, 0xc420246000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:173 +0x70
net/http.(*connReader).Read(0xc420273f20, 0xc420246000, 0x1000, 0x1000, 0x1acd69, 0xcc29a0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x144
bufio.(*Reader).fill(0xc420294120)
/usr/local/go/src/bufio/bufio.go:97 +0x10c
bufio.(*Reader).ReadSlice(0xc420294120, 0xa, 0x0, 0x1e, 0x6, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:330 +0xb5
bufio.(*Reader).ReadLine(0xc420294120, 0xc4201b62d0, 0xf0, 0xf0, 0x8471c0, 0xc42041a580, 0x830880)
/usr/local/go/src/bufio/bufio.go:359 +0x37
net/textproto.(*Reader).readLineSlice(0xc42044ec00, 0xc42027ba88, 0xc42027ba88, 0x17df8, 0xf0, 0x8471c0)
/usr/local/go/src/net/textproto/reader.go:55 +0x5e
net/textproto.(*Reader).ReadLine(0xc42044ec00, 0xc4201b62d0, 0xc, 0x0, 0x31f4c)
/usr/local/go/src/net/textproto/reader.go:36 +0x2f
net/http.readRequest(0xc420294120, 0xc42019f000, 0xc4201b62d0, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:793 +0xa5
net/http.(*conn).readRequest(0xc42008ae00, 0xca5ca0, 0xc4202c6100, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:765 +0x10d
net/http.(*conn).serve(0xc42008ae00, 0xca5ca0, 0xc4202c6100)
/usr/local/go/src/net/http/server.go:1532 +0x3d3
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:2293 +0x44d