Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Thread-safety panic #311

Open
sam46 opened this issue Aug 19, 2021 · 0 comments
Open

Thread-safety panic #311

sam46 opened this issue Aug 19, 2021 · 0 comments

Comments

@sam46
Copy link

sam46 commented Aug 19, 2021

Getting a panic when using the package in parallel tests:

...
schemaCache := kubeval.NewSchemaCache()
config := kubeval.NewDefaultConfig()
config.Strict = true
config.IgnoreMissingSchemas = true
config.Quiet = true
kubeval.ValidateWithCache(someYaml, schemaCache, config)
...

and it works just fine when running without parallelism.

Setup:

go version go1.16.5 darwin/amd64
github.com/instrumenta/kubeval v0.16.1

Trace:

fatal error: concurrent map writes


goroutine 55 [running]:
runtime.throw(0x5681072, 0x15)
	/usr/local/Cellar/go/1.16.5/libexec/src/runtime/panic.go:1117 +0x72 fp=0xc000d67368 sp=0xc000d67338 pc=0x4039db2
runtime.mapassign_faststr(0x5455740, 0xc00035e960, 0x566a8da, 0x5, 0x0)
	/usr/local/Cellar/go/1.16.5/libexec/src/runtime/map_faststr.go:211 +0x3f1 fp=0xc000d673d0 sp=0xc000d67368 pc=0x40165b1
github.com/xeipuuv/gojsonschema.(*FormatCheckerChain).Add(...)
	/Users/sam/go/pkg/mod/github.com/xeipuuv/gojsonschema@v0.0.0-20180816142147-da425ebb7609/format_checkers.go:99
github.com/instrumenta/kubeval/kubeval.validateAgainstSchema(0x5456040, 0xc0011707e0, 0xc000d67508, 0xc000cd9410, 0xc000e8e210, 0x0, 0x0, 0x0, 0x0, 0x0)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:176 +0xec fp=0xc000d67430 sp=0xc000d673d0 pc=0x484b96c
github.com/instrumenta/kubeval/kubeval.validateResource(0xc00080c700, 0x100, 0x100, 0xc000cd9410, 0xc000e8e210, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:159 +0x2f7 fp=0xc000d67588 sp=0xc000d67430 pc=0x484af57
github.com/instrumenta/kubeval/kubeval.ValidateWithCache(0xc00080c700, 0x100, 0x100, 0xc000cd9410, 0xc000d67e78, 0x1, 0x1, 0x0, 0x0, 0x0, ...)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:331 +0x99a fp=0xc000d67d78 sp=0xc000d67588 pc=0x484cdda
myproject.com/cmd/parallel_test.TestValidSchema.func1(0xc000602f00, 0xc000666078)
	/Users/sam/myproject/cmd/another_test.go:176 +0x269 fp=0xc000d67f50 sp=0xc000d67d78 pc=0x53096e9
myproject.com/pkg/testing.runTestCase.func1(0xc000602f00)
	/Users/sam/myproject/pkg/testing/testcase.go:125 +0x42 fp=0xc000d67f80 sp=0xc000d67f50 pc=0x5305c82
testing.tRunner(0xc000602f00, 0xc0016cffa0)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1193 +0xef fp=0xc000d67fd0 sp=0xc000d67f80 pc=0x412b30f
runtime.goexit()
	/usr/local/Cellar/go/1.16.5/libexec/src/runtime/asm_amd64.s:1371 +0x1 fp=0xc000d67fd8 sp=0xc000d67fd0 pc=0x4074321
created by testing.(*T).Run
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1238 +0x2b3

goroutine 1 [chan receive]:
testing.(*T).Run(0xc000602a80, 0x5677d94, 0xf, 0x578fd78, 0x4098c01)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1239 +0x2da
testing.runTests.func1(0xc000713080)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1511 +0x78
testing.tRunner(0xc000713080, 0xc000c3fde0)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1193 +0xef
testing.runTests(0xc0005490b0, 0x656a900, 0x7, 0x7, 0xc03fd7772430e868, 0x8bb4356763, 0x6633760, 0x5675a16)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1509 +0x2fe
testing.(*M).Run(0xc000054d00, 0x0)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1417 +0x1eb
main.main()
	_testmain.go:57 +0x138

goroutine 19 [chan receive]:
k8s.io/klog/v2.(*loggingT).flushDaemon(0x6634d80)
	/Users/sam/go/pkg/mod/k8s.io/klog/v2@v2.9.0/klog.go:1169 +0x8b
created by k8s.io/klog/v2.init.0
	/Users/sam/go/pkg/mod/k8s.io/klog/v2@v2.9.0/klog.go:420 +0xdf

goroutine 21 [chan receive]:
k8s.io/klog.(*loggingT).flushDaemon(0x6634ca0)
	/Users/sam/go/pkg/mod/k8s.io/klog@v1.0.0/klog.go:1012 +0x8b
created by k8s.io/klog.init.0
	/Users/sam/go/pkg/mod/k8s.io/klog@v1.0.0/klog.go:412 +0xdc

goroutine 10 [select]:
go.opencensus.io/stats/view.(*worker).start(0xc000054880)
	/Users/sam/go/pkg/mod/go.opencensus.io@v0.23.0/stats/view/worker.go:276 +0xcd
created by go.opencensus.io/stats/view.init.0
	/Users/sam/go/pkg/mod/go.opencensus.io@v0.23.0/stats/view/worker.go:34 +0x68

goroutine 52 [chan receive]:
testing.tRunner.func1(0xc000602a80)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1159 +0x2bc
testing.tRunner(0xc000602a80, 0x578fd78)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1197 +0x125
created by testing.(*T).Run
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1238 +0x2b3

goroutine 53 [chan receive]:
testing.tRunner.func1(0xc000602c00)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1159 +0x2bc
testing.tRunner(0xc000602c00, 0xc0016cff00)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1197 +0x125
created by testing.(*T).Run
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1238 +0x2b3

goroutine 59 [runnable]:
gopkg.in/yaml%2ev2.(*parser).scalar(0xc000f03200, 0xc000f03206)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:194 +0xd4
gopkg.in/yaml%2ev2.(*parser).parse(0xc000f03200, 0x6)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:145 +0x111
gopkg.in/yaml%2ev2.(*parser).mapping(0xc000f03200, 0xc00169c509)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:217 +0xac
gopkg.in/yaml%2ev2.(*parser).parse(0xc000f03200, 0xc00169c540)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:149 +0xcc
gopkg.in/yaml%2ev2.(*parser).mapping(0xc000f03200, 0x9)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:217 +0xc5
gopkg.in/yaml%2ev2.(*parser).parse(0xc000f03200, 0xc001697e03)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:149 +0xcc
gopkg.in/yaml%2ev2.(*parser).document(0xc000f03200, 0xc000556d03)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:175 +0xa7
gopkg.in/yaml%2ev2.(*parser).parse(0xc000f03200, 0x0)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/decode.go:153 +0x87
gopkg.in/yaml%2ev2.unmarshal(0xc00000bb00, 0x100, 0x100, 0x53999a0, 0xc001691ac0, 0x5432400, 0x0, 0x0)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/yaml.go:142 +0x24a
gopkg.in/yaml%2ev2.Unmarshal(0xc00000bb00, 0x100, 0x100, 0x53999a0, 0xc001691ac0, 0xc000232fd0, 0xc000c5b3f0)
	/Users/sam/go/pkg/mod/gopkg.in/yaml.v2@v2.4.0/yaml.go:81 +0x58
sigs.k8s.io/yaml.yamlToJSON(0xc00000bb00, 0x100, 0x100, 0xc000c5b408, 0x578f128, 0xb05ad38, 0x8, 0x8, 0x6f785b8, 0x8)
	/Users/sam/go/pkg/mod/sigs.k8s.io/yaml@v1.2.0/yaml.go:124 +0x73
sigs.k8s.io/yaml.yamlUnmarshal(0xc00000bb00, 0x100, 0x100, 0x53a6fa0, 0xc0046b0410, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/Users/sam/go/pkg/mod/sigs.k8s.io/yaml@v1.2.0/yaml.go:53 +0x12a
sigs.k8s.io/yaml.Unmarshal(...)
	/Users/sam/go/pkg/mod/sigs.k8s.io/yaml@v1.2.0/yaml.go:36
github.com/instrumenta/kubeval/kubeval.validateResource(0xc00000bb00, 0x100, 0x100, 0xc000cd9410, 0xc000e8e210, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:118 +0x109
github.com/instrumenta/kubeval/kubeval.ValidateWithCache(0xc00000bb00, 0x100, 0x100, 0xc000cd9410, 0xc000c5be78, 0x1, 0x1, 0x0, 0x0, 0x0, ...)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:331 +0x99a
myproject.com/cmd/parallel_test.TestValidSchema.func1(0xc000603500, 0xc0006660d8)
	/Users/sam/myproject/cmd/another_test.go:176 +0x269
myproject.com/pkg/testing.runTestCase.func1(0xc000603500)
	/Users/sam/myproject/pkg/testing/testcase.go:125 +0x42
testing.tRunner(0xc000603500, 0xc000d9c040)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1193 +0xef
created by testing.(*T).Run
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1238 +0x2b3

goroutine 58 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000fa41a0, 0x0)
	/usr/local/Cellar/go/1.16.5/libexec/src/runtime/sema.go:513 +0xf8
sync.(*Cond).Wait(0xc000fa4190)
	/usr/local/Cellar/go/1.16.5/libexec/src/sync/cond.go:56 +0x99
net/http.(*http2pipe).Read(0xc000fa4188, 0xc001015000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	/usr/local/Cellar/go/1.16.5/libexec/src/net/http/h2_bundle.go:3515 +0x97
net/http.http2transportResponseBody.Read(0xc000fa4160, 0xc001015000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	/usr/local/Cellar/go/1.16.5/libexec/src/net/http/h2_bundle.go:8611 +0xaf
bufio.(*Reader).Read(0xc001620c00, 0xc001394080, 0xa, 0x200, 0xc00138c880, 0x400d505, 0x5479920)
	/usr/local/Cellar/go/1.16.5/libexec/src/bufio/bufio.go:227 +0x222
io.ReadAtLeast(0x58f3420, 0xc001620c00, 0xc001394080, 0xa, 0x200, 0xa, 0xa9d7188, 0x0, 0x1000)
	/usr/local/Cellar/go/1.16.5/libexec/src/io/io.go:328 +0x87
io.ReadFull(...)
	/usr/local/Cellar/go/1.16.5/libexec/src/io/io.go:347
compress/gzip.(*Reader).readHeader(0xc001394000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/usr/local/Cellar/go/1.16.5/libexec/src/compress/gzip/gunzip.go:175 +0xd6
compress/gzip.(*Reader).Reset(0xc001394000, 0xc0884e8, 0xc000fa4160, 0x54dd6a0, 0x200)
	/usr/local/Cellar/go/1.16.5/libexec/src/compress/gzip/gunzip.go:113 +0x166
compress/gzip.NewReader(0xc0884e8, 0xc000fa4160, 0xc000fa4160, 0xc0884e8, 0xc000fa4160)
	/usr/local/Cellar/go/1.16.5/libexec/src/compress/gzip/gunzip.go:94 +0x58
net/http.(*http2gzipReader).Read(0xc002e19d10, 0xc001378600, 0x200, 0x200, 0xc003424000, 0xc000b14000, 0x0)
	/usr/local/Cellar/go/1.16.5/libexec/src/net/http/h2_bundle.go:9074 +0xca
io.ReadAll(0xc0884c8, 0xc002e19d10, 0xc002e19d10, 0xc0884c8, 0xc002e19d10, 0x0, 0xc0011c4410)
	/usr/local/Cellar/go/1.16.5/libexec/src/io/io.go:633 +0xdf
io/ioutil.ReadAll(...)
	/usr/local/Cellar/go/1.16.5/libexec/src/io/ioutil/ioutil.go:27
github.com/xeipuuv/gojsonschema.(*jsonReferenceLoader).loadFromHTTP(0xc0009dc3c0, 0xc0011c4410, 0x49, 0x0, 0x0, 0x20, 0x6f90548)
	/Users/sam/go/pkg/mod/github.com/xeipuuv/gojsonschema@v0.0.0-20180816142147-da425ebb7609/jsonLoader.go:179 +0x235
github.com/xeipuuv/gojsonschema.(*jsonReferenceLoader).LoadJSON(0xc0009dc3c0, 0xc0011c42d0, 0x49, 0x592d2a8, 0xc0009dc3c0)
	/Users/sam/go/pkg/mod/github.com/xeipuuv/gojsonschema@v0.0.0-20180816142147-da425ebb7609/jsonLoader.go:156 +0x247
github.com/xeipuuv/gojsonschema.(*schemaPool).GetDocument(0xc0004ca180, 0xc0003c7b00, 0x0, 0x0, 0x0, 0x100000001, 0x0, 0x0, 0xc00138d218)
	/Users/sam/go/pkg/mod/github.com/xeipuuv/gojsonschema@v0.0.0-20180816142147-da425ebb7609/schemaPool.go:184 +0x1eb
github.com/xeipuuv/gojsonschema.(*SchemaLoader).Compile(0xc00138d290, 0x592d2a8, 0xc0009dc2e0, 0x4010018, 0x20, 0x54c8100)
	/Users/sam/go/pkg/mod/github.com/xeipuuv/gojsonschema@v0.0.0-20180816142147-da425ebb7609/schemaLoader.go:77 +0x237
github.com/xeipuuv/gojsonschema.NewSchema(0x592d2a8, 0xc0009dc2e0, 0xc001ac6580, 0x7, 0xc001ac6568)
	/Users/sam/go/pkg/mod/github.com/xeipuuv/gojsonschema@v0.0.0-20180816142147-da425ebb7609/schema.go:49 +0x85
github.com/instrumenta/kubeval/kubeval.downloadSchema(0xc00138d508, 0xc000cd9410, 0xc000e8e210, 0x5671330, 0xa, 0xc000de5288)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:217 +0x32a
github.com/instrumenta/kubeval/kubeval.validateAgainstSchema(0x5456040, 0xc002fc74a0, 0xc00138d508, 0xc000cd9410, 0xc000e8e210, 0x0, 0x0, 0x0, 0x0, 0x0)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:169 +0x46
github.com/instrumenta/kubeval/kubeval.validateResource(0xc001932e00, 0xe8, 0x100, 0xc000cd9410, 0xc000e8e210, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:159 +0x2f7
github.com/instrumenta/kubeval/kubeval.ValidateWithCache(0xc001932e00, 0xe8, 0x100, 0xc000cd9410, 0xc00138de78, 0x1, 0x1, 0x0, 0x0, 0x0, ...)
	/Users/sam/go/pkg/mod/github.com/instrumenta/kubeval@v0.16.1/kubeval/kubeval.go:331 +0x99a
myproject.com/cmd/parallel_test.TestValidSchema.func1(0xc000603380, 0xc0006660c0)
	/Users/sam/myproject/cmd/another_test.go:176 +0x269
myproject.com/pkg/testing.runTestCase.func1(0xc000603380)
	/Users/sam/myproject/pkg/testing/testcase.go:125 +0x42
testing.tRunner(0xc000603380, 0xc000d9c020)
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1193 +0xef
created by testing.(*T).Run
	/usr/local/Cellar/go/1.16.5/libexec/src/testing/testing.go:1238 +0x2b3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant