project-flogo / flow

Flow is a flow-based process engine implementation for processing event-driven requests.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Concurrent issue when enable local state server

lixingwang opened this issue · comments

Current behavior (how does the issue manifest):
Enable local state server-client and run flow and sometimes it fails because of concurrent issues.

fatal error: concurrent map read and map write

goroutine 68 [running]:
runtime.throw(0x18f0892, 0x21)
        /Users/xli/sdk/go1.15.7/src/runtime/panic.go:1116 +0x72 fp=0xc0028d4658 sp=0xc0028d4628 pc=0x10382f2
runtime.mapaccess2(0x17fd500, 0xc0029a71d0, 0xc002834b40, 0xc002834b40, 0xc001b37950)
        /Users/xli/sdk/go1.15.7/src/runtime/map.go:469 +0x25b fp=0xc0028d4698 sp=0xc0028d4658 pc=0x1011a7b
reflect.mapaccess(0x17fd500, 0xc0029a71d0, 0xc002834b40, 0x18e5001)
        /Users/xli/sdk/go1.15.7/src/runtime/map.go:1309 +0x3f fp=0xc0028d46d0 sp=0xc0028d4698 pc=0x1067edf
reflect.Value.MapIndex(0x17fd500, 0xc00073a1f8, 0x195, 0x17c9ac0, 0xc002834b40, 0x98, 0x17e92a0, 0xc002834b30, 0x94)
        /Users/xli/sdk/go1.15.7/src/reflect/value.go:1189 +0x16e fp=0xc0028d4748 sp=0xc0028d46d0 pc=0x10a08ce
encoding/json.mapEncoder.encode(0x191c5f8, 0xc00193e500, 0x17fd500, 0xc00073a1f8, 0x195, 0x100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:801 +0x30d fp=0xc0028d48c0 sp=0xc0028d4748 pc=0x110ef4d
encoding/json.mapEncoder.encode-fm(0xc00193e500, 0x17fd500, 0xc00073a1f8, 0x195, 0x17f0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:777 +0x65 fp=0xc0028d4900 sp=0xc0028d48c0 pc=0x111b405
encoding/json.arrayEncoder.encode(0xc000304400, 0xc00193e500, 0x17bd7c0, 0xc002997d00, 0x97, 0x1100100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:886 +0xd6 fp=0xc0028d4958 sp=0xc0028d4900 pc=0x110fd16
encoding/json.arrayEncoder.encode-fm(0xc00193e500, 0x17bd7c0, 0xc002997d00, 0x97, 0xc0028d0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:879 +0x65 fp=0xc0028d4998 sp=0xc0028d4958 pc=0x111b505
encoding/json.sliceEncoder.encode(0xc0004f9a60, 0xc00193e500, 0x17bd7c0, 0xc002997d00, 0x97, 0x17b0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:860 +0x8f fp=0xc0028d49e0 sp=0xc0028d4998 pc=0x110f98f
encoding/json.sliceEncoder.encode-fm(0xc00193e500, 0x17bd7c0, 0xc002997d00, 0x97, 0xc002990100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:855 +0x65 fp=0xc0028d4a20 sp=0xc0028d49e0 pc=0x111b485
encoding/json.(*encodeState).reflectValue(0xc00193e500, 0x17bd7c0, 0xc002997d00, 0x97, 0xc002990100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:358 +0x82 fp=0xc0028d4a58 sp=0xc0028d4a20 pc=0x110c0e2
encoding/json.interfaceEncoder(0xc00193e500, 0x17e92a0, 0xc0026a5370, 0x94, 0xc0026a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:714 +0xac fp=0xc0028d4aa0 sp=0xc0028d4a58 pc=0x110e54c
encoding/json.mapEncoder.encode(0x191c5f8, 0xc00193e500, 0x17fd500, 0xc0029a7ce0, 0x15, 0x17f0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:801 +0x35c fp=0xc0028d4c18 sp=0xc0028d4aa0 pc=0x110ef9c
encoding/json.mapEncoder.encode-fm(0xc00193e500, 0x17fd500, 0xc0029a7ce0, 0x15, 0xc0029a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:777 +0x65 fp=0xc0028d4c58 sp=0xc0028d4c18 pc=0x111b405
encoding/json.(*encodeState).reflectValue(0xc00193e500, 0x17fd500, 0xc0029a7ce0, 0x15, 0xc0029a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:358 +0x82 fp=0xc0028d4c90 sp=0xc0028d4c58 pc=0x110c0e2
encoding/json.interfaceEncoder(0xc00193e500, 0x17e92a0, 0xc0026a5320, 0x94, 0xc0026a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:714 +0xac fp=0xc0028d4cd8 sp=0xc0028d4c90 pc=0x110e54c
encoding/json.mapEncoder.encode(0x191c5f8, 0xc00193e500, 0x17fd500, 0xc0029a7d10, 0x15, 0x17f0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:801 +0x35c fp=0xc0028d4e50 sp=0xc0028d4cd8 pc=0x110ef9c
encoding/json.mapEncoder.encode-fm(0xc00193e500, 0x17fd500, 0xc0029a7d10, 0x15, 0xc0029a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:777 +0x65 fp=0xc0028d4e90 sp=0xc0028d4e50 pc=0x111b405
encoding/json.(*encodeState).reflectValue(0xc00193e500, 0x17fd500, 0xc0029a7d10, 0x15, 0xc0029a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:358 +0x82 fp=0xc0028d4ec8 sp=0xc0028d4e90 pc=0x110c0e2
encoding/json.interfaceEncoder(0xc00193e500, 0x17e92a0, 0xc0026a5300, 0x94, 0xc0026a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:714 +0xac fp=0xc0028d4f10 sp=0xc0028d4ec8 pc=0x110e54c
encoding/json.mapEncoder.encode(0x191c5f8, 0xc00193e500, 0x17fd500, 0xc0027cd418, 0x195, 0x100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:801 +0x35c fp=0xc0028d5088 sp=0xc0028d4f10 pc=0x110ef9c
encoding/json.mapEncoder.encode-fm(0xc00193e500, 0x17fd500, 0xc0027cd418, 0x195, 0x100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:777 +0x65 fp=0xc0028d50c8 sp=0xc0028d5088 pc=0x111b405
encoding/json.structEncoder.encode(0xc0002f8400, 0x9, 0x10, 0xc00031a510, 0xc00193e500, 0x18a3c20, 0xc0027cd3e0, 0x199, 0x200100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:759 +0x2ab fp=0xc0028d5160 sp=0xc0028d50c8 pc=0x110e9eb
encoding/json.structEncoder.encode-fm(0xc00193e500, 0x18a3c20, 0xc0027cd3e0, 0x199, 0xc0027c0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:730 +0x7f fp=0xc0028d51b8 sp=0xc0028d5160 pc=0x111b37f
encoding/json.ptrEncoder.encode(0xc00031a600, 0xc00193e500, 0x17ac1a0, 0xc0027cd3e0, 0x16, 0x100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:915 +0x125 fp=0xc0028d5278 sp=0xc0028d51b8 pc=0x110ff65
encoding/json.ptrEncoder.encode-fm(0xc00193e500, 0x17ac1a0, 0xc0027cd3e0, 0x16, 0xc001d00100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:900 +0x65 fp=0xc0028d52b8 sp=0xc0028d5278 pc=0x111b585
encoding/json.mapEncoder.encode(0xc0001912f0, 0xc00193e500, 0x17f9de0, 0xc002884c78, 0x195, 0x100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:801 +0x35c fp=0xc0028d5430 sp=0xc0028d52b8 pc=0x110ef9c
encoding/json.mapEncoder.encode-fm(0xc00193e500, 0x17f9de0, 0xc002884c78, 0x195, 0x100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:777 +0x65 fp=0xc0028d5470 sp=0xc0028d5430 pc=0x111b405
encoding/json.structEncoder.encode(0xc0001c06c0, 0x4, 0x4, 0xc00031a720, 0xc00193e500, 0x1870000, 0xc002884c60, 0x199, 0x17f0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:759 +0x2ab fp=0xc0028d5508 sp=0xc0028d5470 pc=0x110e9eb
encoding/json.structEncoder.encode-fm(0xc00193e500, 0x1870000, 0xc002884c60, 0x199, 0xc002880100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:730 +0x7f fp=0xc0028d5560 sp=0xc0028d5508 pc=0x111b37f
encoding/json.ptrEncoder.encode(0xc00031a810, 0xc00193e500, 0x17ac0a0, 0xc002884c60, 0x16, 0x17a0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:915 +0x125 fp=0xc0028d5620 sp=0xc0028d5560 pc=0x110ff65
encoding/json.ptrEncoder.encode-fm(0xc00193e500, 0x17ac0a0, 0xc002884c60, 0x16, 0x1f30100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:900 +0x65 fp=0xc0028d5660 sp=0xc0028d5620 pc=0x111b585
encoding/json.(*encodeState).reflectValue(0xc00193e500, 0x17ac0a0, 0xc002884c60, 0x16, 0xc0028d0100)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:358 +0x82 fp=0xc0028d5698 sp=0xc0028d5660 pc=0x110c0e2
encoding/json.(*encodeState).marshal(0xc00193e500, 0x17ac0a0, 0xc002884c60, 0x1810100, 0x0, 0x0)
        /Users/xli/sdk/go1.15.7/src/encoding/json/encode.go:330 +0xf4 fp=0xc0028d56f8 sp=0xc0028d5698 pc=0x110bcd4
encoding/json.(*Encoder).Encode(0xc0028d57d8, 0x17ac0a0, 0xc002884c60, 0x2a109040, 0xc002806db0)
        /Users/xli/sdk/go1.15.7/src/encoding/json/stream.go:206 +0x8b fp=0xc0028d5788 sp=0xc0028d56f8 pc=0x1118e2b
github.com/gorilla/websocket.(*Conn).WriteJSON(0xc000034420, 0x17ac0a0, 0xc002884c60, 0x0, 0x0)
        /Users/xli/gopath/src/github.com/gorilla/websocket/json.go:28 +0xed fp=0xc0028d5838 sp=0xc0028d5788 pc=0x141680d
github.com/project-flogo/services/flow-state/event.(*stepRequest).WriteMessage(0xc0002ce330, 0xc002884c60)
        /Users/xli/gopath/src/github.com/project-flogo/services/flow-state/event/eventlistener.go:117 +0x9c fp=0xc0028d5908 sp=0xc0028d5838 pc=0x141fd3c
github.com/project-flogo/services/flow-state/event.(*stepRequest).handleMessage(0xc0002ce330)
        /Users/xli/gopath/src/github.com/project-flogo/services/flow-state/event/eventlistener.go:97 +0x367 fp=0xc0028d59d8 sp=0xc0028d5908 pc=0x141fc87
github.com/project-flogo/services/flow-state/event.HandleStepEvent(0x1a45960, 0xc0004fe0e0, 0xc000340200, 0x0, 0x0, 0x0)
        /Users/xli/gopath/src/github.com/project-flogo/services/flow-state/event/eventlistener.go:148 +0x273 fp=0xc0028d5a70 sp=0xc0028d59d8 pc=0x1420293
github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc0001fe100, 0x1a45960, 0xc0004fe0e0, 0xc000340200)
        /Users/xli/gopath/src/github.com/julienschmidt/httprouter/router.go:474 +0x8c7 fp=0xc0028d5b70 sp=0xc0028d5a70 pc=0x1409c87
github.com/rs/cors.(*Cors).Handler.func1(0x1a45960, 0xc0004fe0e0, 0xc000340200)
        /Users/xli/gopath/src/github.com/rs/cors/cors.go:219 +0x1b9 fp=0xc0028d5bc8 sp=0xc0028d5b70 pc=0x1423e39
net/http.HandlerFunc.ServeHTTP(0xc00030be40, 0x1a45960, 0xc0004fe0e0, 0xc000340200)
        /Users/xli/sdk/go1.15.7/src/net/http/server.go:2042 +0x44 fp=0xc0028d5bf0 sp=0xc0028d5bc8 pc=0x1339ce4
net/http.serverHandler.ServeHTTP(0xc0000fe0e0, 0x1a45960, 0xc0004fe0e0, 0xc000340200)
        /Users/xli/sdk/go1.15.7/src/net/http/server.go:2843 +0xa3 fp=0xc0028d5c20 sp=0xc0028d5bf0 pc=0x133d2e3
net/http.(*conn).serve(0xc00059a000, 0x1a47360, 0xc0002fe040)
        /Users/xli/sdk/go1.15.7/src/net/http/server.go:1925 +0x8ad fp=0xc0028d5fc8 sp=0xc0028d5c20 pc=0x1338aed
runtime.goexit()
        /Users/xli/sdk/go1.15.7/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc0028d5fd0 sp=0xc0028d5fc8 pc=0x106e7e1
created by net/http.(*Server).Serve
        /Users/xli/sdk/go1.15.7/src/net/http/server.go:2969 +0x36c

`Expected behavior:

Minimal steps to reproduce the problem (not required if feature enhancement):

Please tell us about your environment (Operating system, docker version, browser & web ui version, etc):

Flogo version (CLI & contrib/lib. If unknown, leave empty or state unknown): 0.X.X

Additional information you deem important (e.g. issue happens only occasionally):