[ISSUE] fatal error: found pointer to free object
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
調査の方向性
まず、issue に記載された並行する Databricks PUT 実行と rate-limit エラーの経路を追跡し、次に mgcsweep.go の Go runtime reportZombies リファレンスを調べて、解放されたオブジェクトの手がかりを探します。完全な修正では、1 件の失敗したアップロードが他の goroutine で致命的なポインターエラーを引き起こすことを防ぐ必要がありますが、issue には再現可能なテストも実行するソースファイルもありません。
索引モデルが issue の本文から書いたものです。
説明
Description
Our program is uploading parquet files to stages on different goroutines. Each goroutine is uploading to a different unity volume via PUT '{{.LocalFilePath}}' INTO '{{.UnityVolumePath}}' OVERWRITE; When one goroutine fails with a rate limit error, we non deterministically encounter a panic (and therefore crash of the program) from other concurrent goroutines with message fatal error: found pointer to free object. This panic was raised by the go runtime reportZombies function. Sometimes the error is also runtime: marked free object in span 0x7e6b8843ecd8, elemsize=48 freeindex=0 (bad use of unsafe.Pointer? try -d=checkptr). These errors are non deterministic as far as we can tell.
The stack trace confirms that goroutines running when the panic occurs are all Databricks PUT executions. All the other goroutines in the program are sleeping on channels and mutexes. We are also not running enough goroutines to trigger a rate limit on the bucket or Databricks. We're running on the order of 10 to 20 goroutines worth of uploads. The rate limit seems to be due to other traffic on the same bucket, unrelated to our program.
Reproduction
This is hard to outline with test code as its pretty coupled to a lot of other business logic we have and requires the underlying bucket of the unity volume to raise a rate limit.
Expected behavior
Expected behavior is that the other goroutines should succesfully upload their files regardless of the rate limit error on one of the other goroutines.
Is it a regression?
The code running on this deployment hasn't changed in a few months, including dependencies. So it is unlikely to be a regression.
Debug Logs
Here is the original error we got about the rate limit
staging operation over HTTP was unsuccessful: 503-<?xml version=\"1.0\" encoding=\"utf-8\"?><Error><Code>ServerBusy</Code><Message>Operations per second is over the account limit.\nRequestId:[redacted]\nTime:2025-06-04T19:37:48.5111742Z</Message></Error>","time":"2025-06-04T19:37:48Z","message":"databricks: failed to execute query: query \n\tPUT '/tmp/1913351475.parquet' INTO '/Volumes/finance/[redacted]/invoice_pbrszrkigdtsnob_0_temp/1913351475.parquet' OVERWRITE
it appears to be a rate limit passed through by the underlying Azure storage account backing the unity volume.
Other Information
- OS: Debian (Bullseye)
- Versions:
- go 1.23.6
github.com/databricks/databricks-sql-go v1.6.1github.com/databricks/databricks-sdk-go v0.54.0
- 主要言語
- Go
- スター
- 53
- フォーク
- 68
- 平均マージ
- 2日 1時間
- マージ済み PR(30日)
- 8
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
databricks/databricks-sql-go のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
databricks/databricks-sql-go#494 ·
メンテナーはふだん 1 日以内に返信
-
難易度 3/5 1〜2日 初心者へのやさしさ 48/100
databricks/databricks-sql-go#499 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 64/100
databricks/databricks-sql-go#490 ·
メンテナーはふだん 1 日以内に返信
-
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
databricks/databricks-sql-go#481 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
databricks/databricks-sql-go#480 ·
メンテナーはふだん 1 日以内に返信
databricks/databricks-sql-go の issue をすべて見る
似ている issue
-
bug performance scalability
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
Davidjustice28/basildb#35 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
rhysd/actionlint#761 ·
-
bug needs-triage P2 tier:1-mechanical
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
krakenhavoc/cmd_and_ctrl#3652 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
puppe1990/amarra-cais#345 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
limitlessprojects/Go-Hybrid#50 ·
メンテナーはふだん 1 日以内に返信