bigquery-emulator
bigquery-emulator copied to clipboard
Panic uploading data to a table in a dataset that does not exist
What happened?
Using the BigQuery Python SDK's Client.load_table_from_file() method results in a panic if we request writing to a table that does not exist, in a dataset that also does not exist.
Stack trace
2025-04-02T18:37:45.220Z INFO server/middleware.go:63 PUT /upload/bigquery/v2/projects/camus-unittest/jobs {"query": "uploadType=resumable&upload_id=82cfb08d-a7f7-4240-83ff-66c49100ae77"}
2025-04-02T18:37:45.224Z ERROR server/middleware.go:33 internalError {"error": "internalError: runtime error: invalid memory address or nil pointer dereference"}
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 1: /usr/local/go/src/runtime/panic.go:914
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 2: /usr/local/go/src/runtime/panic.go:261
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 3: /usr/local/go/src/runtime/signal_unix.go:861
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 4: /work/internal/metadata/dataset.go:157
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 5: /work/server/handler.go:404
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 6: /work/server/handler.go:330
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 7: /work/server/middleware.go:297
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 8: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 9: /work/server/middleware.go:274
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 10: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 11: /work/server/middleware.go:251
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 12: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 13: /work/server/middleware.go:228
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 14: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 15: /work/server/middleware.go:205
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 16: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 17: /work/server/middleware.go:182
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 18: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 19: /work/server/middleware.go:100
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 20: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 21: /work/server/middleware.go:81
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 22: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 23: /work/server/middleware.go:67
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 24: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 25: /work/server/middleware.go:55
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 26: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 27: /work/server/middleware.go:46
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 28: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 29: /work/server/middleware.go:22
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 30: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 31: /go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 32: /usr/local/go/src/net/http/server.go:2938
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 33: /usr/local/go/src/net/http/server.go:2009
2025-04-02T18:37:45.224Z ERROR server/middleware.go:40 34: /usr/local/go/src/runtime/asm_amd64.s:1650
What did you expect to happen?
The request should be failed with a gRPC error rather than crashing the server.
How can we reproduce it (as minimally and precisely as possible)?
Trigger the upload endpoint targetting a dataset that does not exist.
Anything else we need to know?
No response
+1