Source: grafana
Version: 2.6.0+dfsg-3
Severity: important

I’m trying to run grafana 2.6.0+dfsg-3 on a Raspberry Pi 3. A
chromium-browser instance is configured to refresh a dashboard every 5s.

Unfortunately, grafana crashes every couple of minutes; see below for
the crash message.

AFAICT, the concurrent map write happens because two goroutines call
api.getDatasource. Interestingly enough, the map to which is being
written was intended as a cache (but never actually used!) and removed
upstream in commit
https://github.com/grafana/grafana/commit/75454b02c0f55aabb4d3a84209bea1521b5bc5fa

Hence, I think backporting the aforementioned commit should fix the
issue.

Crash message:
[…]
2016/10/22 10:06:24 [I] Listen: http://0.0.0.0:3000
fatal error: concurrent map writes

goroutine 39 [running]:    
runtime.throw(0x8efae8, 0x15)
        /usr/lib/go/src/runtime/panic.go:530 +0x78 fp=0x11360ca0 sp=0x11360c94
runtime.mapassign1(0x6e3630, 0x11119b00, 0x11360d08, 0x11360d10)
        /usr/lib/go/src/runtime/hashmap.go:445 +0x94 fp=0x11360cf4 sp=0x11360ca0
github.com/grafana/grafana/pkg/api.getDatasource(0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 
0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/api/dataproxy.go:80
 +0x118 fp=0x11360dc0 sp=0x11360cf4
github.com/grafana/grafana/pkg/api.ProxyDataSourceRequest(0x111442e0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/api/dataproxy.go:85
 +0x5c fp=0x11360e40 sp=0x11360dc0
runtime.call16(0x110691d0, 0x9f7790, 0x113e7668, 0x4, 0x4)
        /usr/lib/go/src/runtime/asm_arm.s:429 +0x68 fp=0x11360e54 sp=0x11360e40
reflect.Value.call(0x6ea788, 0x9f7790, 0x13, 0x870fe8, 0x4, 0x11196d90, 0x1, 
0x1, 0x0, 0x0, ...)
        /usr/lib/go/src/reflect/value.go:435 +0xeb4 fp=0x11360ffc sp=0x11360e54
reflect.Value.Call(0x6ea788, 0x9f7790, 0x13, 0x11196d90, 0x1, 0x1, 0x0, 0x0, 
0x0)
        /usr/lib/go/src/reflect/value.go:303 +0x84 fp=0x1136102c sp=0x11360ffc
github.com/go-macaron/inject.(*injector).Invoke(0x111962b0, 0x6ea788, 0x9f7790, 
0x0, 0x0, 0x0, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c fp=0x113610e0 sp=0x1136102c
gopkg.in/macaron%2ev1.(*Context).run(0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88 fp=0x11361168 sp=0x113610e0
gopkg.in/macaron%2ev1.(*Context).Next(0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:104
 +0x2c fp=0x11361170 sp=0x11361168
github.com/grafana/grafana/pkg/middleware.Sessioner.func1(0x111442e0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/middleware/session.go:70
 +0x28 fp=0x113611b4 sp=0x11361170
runtime.call16(0x110691d0, 0x11024070, 0x113e6700, 0x4, 0x4)
        /usr/lib/go/src/runtime/asm_arm.s:429 +0x68 fp=0x113611c8 sp=0x113611b4
reflect.Value.call(0x6ea788, 0x11024070, 0x13, 0x870fe8, 0x4, 0x11196d60, 0x1, 
0x1, 0x0, 0x0, ...)
        /usr/lib/go/src/reflect/value.go:435 +0xeb4 fp=0x11361370 sp=0x113611c8
reflect.Value.Call(0x6ea788, 0x11024070, 0x13, 0x11196d60, 0x1, 0x1, 0x0, 0x0, 
0x0)
        /usr/lib/go/src/reflect/value.go:303 +0x84 fp=0x113613a0 sp=0x11361370
github.com/go-macaron/inject.(*injector).Invoke(0x111962b0, 0x6ea788, 
0x11024070, 0x0, 0x0, 0x0, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c fp=0x11361454 sp=0x113613a0
gopkg.in/macaron%2ev1.(*Context).run(0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88 fp=0x113614dc sp=0x11361454
gopkg.in/macaron%2ev1.(*Context).Next(0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:104
 +0x2c fp=0x113614e4 sp=0x113614dc
gopkg.in/macaron%2ev1.Recovery.func1(0x112117c0, 0x113e9e00)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/recovery.go:161
 +0x54 fp=0x113614f8 sp=0x113614e4
runtime.call16(0x11068960, 0x9f7aa4, 0x11296a08, 0x8, 0x8)
        /usr/lib/go/src/runtime/asm_arm.s:429 +0x68 fp=0x1136150c sp=0x113614f8
reflect.Value.call(0x70d420, 0x9f7aa4, 0x13, 0x870fe8, 0x4, 0x11144200, 0x2, 
0x2, 0x0, 0x0, ...)
        /usr/lib/go/src/reflect/value.go:435 +0xeb4 fp=0x113616b4 sp=0x1136150c
reflect.Value.Call(0x70d420, 0x9f7aa4, 0x13, 0x11144200, 0x2, 0x2, 0x0, 0x0, 
0x0)
        /usr/lib/go/src/reflect/value.go:303 +0x84 fp=0x113616e4 sp=0x113616b4
github.com/go-macaron/inject.(*injector).Invoke(0x111962b0, 0x70d420, 0x9f7aa4, 
0x0, 0x0, 0x0, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c fp=0x11361798 sp=0x113616e4
gopkg.in/macaron%2ev1.(*Context).run(0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88 fp=0x11361820 sp=0x11361798
gopkg.in/macaron%2ev1.(*Context).Next(0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:104
 +0x2c fp=0x11361828 sp=0x11361820
github.com/grafana/grafana/pkg/middleware.Logger.func1(0x73910120, 0x111441c0, 
0x110c8e00, 0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/middleware/logger.go:33
 +0x94 fp=0x11361940 sp=0x11361828
runtime.call16(0x11068930, 0x9f7850, 0x112bd560, 0x10, 0x10)
        /usr/lib/go/src/runtime/asm_arm.s:429 +0x68 fp=0x11361954 sp=0x11361940
reflect.Value.call(0x76b358, 0x9f7850, 0x13, 0x870fe8, 0x4, 0x113b2120, 0x3, 
0x3, 0x0, 0x0, ...)
        /usr/lib/go/src/reflect/value.go:435 +0xeb4 fp=0x11361afc sp=0x11361954
reflect.Value.Call(0x76b358, 0x9f7850, 0x13, 0x113b2120, 0x3, 0x3, 0x0, 0x0, 
0x0)
        /usr/lib/go/src/reflect/value.go:303 +0x84 fp=0x11361b2c sp=0x11361afc
github.com/go-macaron/inject.(*injector).Invoke(0x111962b0, 0x76b358, 0x9f7850, 
0x0, 0x0, 0x0, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c fp=0x11361be0 sp=0x11361b2c
gopkg.in/macaron%2ev1.(*Context).run(0x112117c0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88 fp=0x11361c68 sp=0x11361be0
gopkg.in/macaron%2ev1.(*Router).Handle.func1(0x73910038, 0x110ab980, 
0x110c8e00, 0x11144140)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/router.go:184
 +0x3d4 fp=0x11361cbc sp=0x11361c68
gopkg.in/macaron%2ev1.(*Router).ServeHTTP(0x113e9dd0, 0x73910038, 0x110ab980, 
0x110c8e00)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/router.go:286
 +0x15c fp=0x11361d00 sp=0x11361cbc
gopkg.in/macaron%2ev1.(*Macaron).ServeHTTP(0x113831c0, 0x73910038, 0x110ab980, 
0x110c8e00)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/macaron.go:176
 +0x238 fp=0x11361d60 sp=0x11361d00
net/http.serverHandler.ServeHTTP(0x111fa000, 0x73910038, 0x110ab980, 0x110c8e00)
        /usr/lib/go/src/net/http/server.go:2081 +0x190 fp=0x11361d90 
sp=0x11361d60
net/http.(*conn).serve(0x111fe4c0)
        /usr/lib/go/src/net/http/server.go:1472 +0xee4 fp=0x11361fbc 
sp=0x11361d90
runtime.goexit()           
        /usr/lib/go/src/runtime/asm_arm.s:990 +0x4 fp=0x11361fbc sp=0x11361fbc
created by net/http.(*Server).Serve
        /usr/lib/go/src/net/http/server.go:2137 +0x3bc

[…]

goroutine 38 [runnable]:
reflect.Value.NumMethod(0x6e1308, 0x11152698, 0x194, 0x0)
        /usr/lib/go/src/reflect/value.go:1121
reflect.valueInterface(0x6e1308, 0x11152698, 0x194, 0x9f5301, 0x0, 0x0)
        /usr/lib/go/src/reflect/value.go:929 +0x140
reflect.Value.Interface(0x6e1308, 0x11152698, 0x194, 0x0, 0x0)
        /usr/lib/go/src/reflect/value.go:908 +0x44
github.com/go-xorm/xorm.reflect2value(0x11364714, 0x0, 0x0, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-xorm/xorm/helpers.go:124
 +0x100
github.com/go-xorm/xorm.value2Bytes(0x11364714, 0x0, 0x0, 0x0, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-xorm/xorm/helpers.go:168
 +0x4c
github.com/go-xorm/xorm.(*Session)._row2Bean(0x110897c0, 0x11156a80, 
0x113dbc20, 0x12, 0x12, 0x12, 0x6ca3f0, 0x110877d0, 0x11364944, 0x1117c380, ...)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-xorm/xorm/session.go:1999
 +0xd14
github.com/go-xorm/xorm.(*Session).row2Bean(0x110897c0, 0x11156a80, 0x113dbc20, 
0x12, 0x12, 0x12, 0x6ca3f0, 0x110877d0, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-xorm/xorm/session.go:1629
 +0x1a4
github.com/go-xorm/xorm.(*Session).Get(0x110897c0, 0x6ca3f0, 0x110877d0, 
0x11156600, 0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-xorm/xorm/session.go:1061
 +0x48c
github.com/grafana/grafana/pkg/services/sqlstore.GetDataSourceById(0x110877c0, 
0x0, 0x0)
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/services/sqlstore/datasource.go:23
 +0x1c4
reflect.Value.call(0x707ee8, 0x9f78e8, 0x13, 0x870fe8, 0x4, 0x11364cb8, 0x1, 
0x1, 0x0, 0x0, ...)              
        /usr/lib/go/src/reflect/value.go:435 +0xeb4                             
                              
reflect.Value.Call(0x707ee8, 0x9f78e8, 0x13, 0x11364cb8, 0x1, 0x1, 0x0, 0x0, 
0x0)                             
        /usr/lib/go/src/reflect/value.go:303 +0x84                              
                              
github.com/grafana/grafana/pkg/bus.(*InProcBus).Dispatch(0x11118ba0, 0x6ca648, 
0x110877c0, 0x0, 0x0)          
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/bus/bus.go:48
 +0x2f4
github.com/grafana/grafana/pkg/bus.Dispatch(0x6ca648, 0x110877c0, 0x0, 0x0)     
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/bus/bus.go:118
 +0x48
github.com/grafana/grafana/pkg/api.getDatasource(0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 
0x0)                           
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/api/dataproxy.go:76
 +0x9c
github.com/grafana/grafana/pkg/api.ProxyDataSourceRequest(0x11223c60)           
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/api/dataproxy.go:85
 +0x5c
reflect.Value.call(0x6ea788, 0x9f7790, 0x13, 0x870fe8, 0x4, 0x11156670, 0x1, 
0x1, 0x0, 0x0, ...)              
        /usr/lib/go/src/reflect/value.go:435 +0xeb4                             
                              
reflect.Value.Call(0x6ea788, 0x9f7790, 0x13, 0x11156670, 0x1, 0x1, 0x0, 0x0, 
0x0)                             
        /usr/lib/go/src/reflect/value.go:303 +0x84                              
                              
github.com/go-macaron/inject.(*injector).Invoke(0x11195c20, 0x6ea788, 0x9f7790, 
0x0, 0x0, 0x0, 0x0, 0x0)      
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c 
gopkg.in/macaron%2ev1.(*Context).run(0x111fbb80)                                
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88          
gopkg.in/macaron%2ev1.(*Context).Next(0x111fbb80)                               
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:104
 +0x2c          
github.com/grafana/grafana/pkg/middleware.Sessioner.func1(0x11223c60)           
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/middleware/session.go:70
 +0x28
reflect.Value.call(0x6ea788, 0x11024070, 0x13, 0x870fe8, 0x4, 0x11156640, 0x1, 
0x1, 0x0, 0x0, ...)            
        /usr/lib/go/src/reflect/value.go:435 +0xeb4                             
                              
reflect.Value.Call(0x6ea788, 0x11024070, 0x13, 0x11156640, 0x1, 0x1, 0x0, 0x0, 
0x0)                           
        /usr/lib/go/src/reflect/value.go:303 +0x84                              
                              
github.com/go-macaron/inject.(*injector).Invoke(0x11195c20, 0x6ea788, 
0x11024070, 0x0, 0x0, 0x0, 0x0, 0x0)    
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c 
gopkg.in/macaron%2ev1.(*Context).run(0x111fbb80)                                
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88          
gopkg.in/macaron%2ev1.(*Context).Next(0x111fbb80)                               
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:104
 +0x2c          
gopkg.in/macaron%2ev1.Recovery.func1(0x111fbb80, 0x113e9e00)                    
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/recovery.go:161
 +0x54         
reflect.Value.call(0x70d420, 0x9f7aa4, 0x13, 0x870fe8, 0x4, 0x11223b80, 0x2, 
0x2, 0x0, 0x0, ...)              
        /usr/lib/go/src/reflect/value.go:435 +0xeb4                             
                              
reflect.Value.Call(0x70d420, 0x9f7aa4, 0x13, 0x11223b80, 0x2, 0x2, 0x0, 0x0, 
0x0)                             
        /usr/lib/go/src/reflect/value.go:303 +0x84                              
                              
github.com/go-macaron/inject.(*injector).Invoke(0x11195c20, 0x70d420, 0x9f7aa4, 
0x0, 0x0, 0x0, 0x0, 0x0)      
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c 
gopkg.in/macaron%2ev1.(*Context).run(0x111fbb80)                                
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88          
gopkg.in/macaron%2ev1.(*Context).Next(0x111fbb80)                               
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:104
 +0x2c          
github.com/grafana/grafana/pkg/middleware.Logger.func1(0x73910120, 0x11223b40, 
0x1142ee00, 0x111fbb80)        
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/grafana/grafana/pkg/middleware/logger.go:33
 +0x94
reflect.Value.call(0x76b358, 0x9f7850, 0x13, 0x870fe8, 0x4, 0x113e86c0, 0x3, 
0x3, 0x0, 0x0, ...)              
        /usr/lib/go/src/reflect/value.go:435 +0xeb4                             
                              
reflect.Value.Call(0x76b358, 0x9f7850, 0x13, 0x113e86c0, 0x3, 0x3, 0x0, 0x0, 
0x0)                             
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/github.com/go-macaron/inject/inject.go:117
 +0x34c 
gopkg.in/macaron%2ev1.(*Context).run(0x111fbb80)                                
                              
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/context.go:113
 +0x88          
gopkg.in/macaron%2ev1.(*Router).Handle.func1(0x73910038, 0x11324c00, 
0x1142ee00, 0x11223ac0)                  
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/router.go:184
 +0x3d4          
gopkg.in/macaron%2ev1.(*Router).ServeHTTP(0x113e9dd0, 0x73910038, 0x11324c00, 
0x1142ee00)                     
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/router.go:286
 +0x15c          
gopkg.in/macaron%2ev1.(*Macaron).ServeHTTP(0x113831c0, 0x73910038, 0x11324c00, 
0x1142ee00)                    
        
/build/grafana-BJkBTr/grafana-2.6.0+dfsg/_build/src/gopkg.in/macaron.v1/macaron.go:176
 +0x238         
net/http.serverHandler.ServeHTTP(0x111fa000, 0x73910038, 0x11324c00, 
0x1142ee00)                              
        /usr/lib/go/src/net/http/server.go:2081 +0x190                          
                              
net/http.(*conn).serve(0x111fe000)                                              
                              
        /usr/lib/go/src/net/http/server.go:1472 +0xee4                          
                              
created by net/http.(*Server).Serve                                             
                              
        /usr/lib/go/src/net/http/server.go:2137 +0x3bc                          
                              


-- System Information:
Debian Release: stretch/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386, armel, mipsel

Kernel: Linux 4.6.0-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Reply via email to