ScalarDB 3.19 リリースノート
注記
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このペ ージには、ScalarDB 3.19 のリリースノートのリストが含まれています。
v3.19.0
発売日: 2026年8月2日
まとめ
このリリースでは、Consensus Commit の回復機能として、書き込みセットのログ記録、トランザクションの完了、および単一レコード回復の API を追加し、コーディネーターの状態レコードがクリーンアップされる際の回復の正確性を改善しました。また、属性ベースの認証、OpenTelemetry サポート、分離クラスターデプロイメント向けのトランザクションコーディネーターノード、およびクラスタークライアント SDK でのグローバルトランザクション API サポートを追加しました。さらに、repairTable、アクティブトランザクション管理、クラスターのアップグレードと認証の動作、SQL SELECT の実行を改善し、Consensus Commit、クラスターのロールバック/一時停止、SQL ステートメントキャッシュに関するいくつかの問題を修正しました。
Community edition
機能強化
- オプトイン設定
scalar.db.consensus_commit.coordinator.write_set_logging.enabledを追加しました。有効にすると、コーディネーターテーブルにtx_write_set列が追加され、コミット/アボート時に値が設定されます。これにより、事前トランザクション回復のための基盤が整います。既存のコーディネーターテーブルは、設定を有効にしてAdmin.repairCoordinatorTables()を実行することで移行できます。 (#3570 #3593) - コミットされたトランザクションのレコードごとのコミット後回復を完了し、コーディネーターの状態行を削除する
DistributedTransactionManager#finishTransaction(String)API を追加しました。トランザクションが完了した場合 (または既に完了していた場合) はtrueを返し、書き込みセットがないためトランザクションが適用できない場合 (例えば、commit()ではなくrollback()/abort()で終了したトランザクション) はfalseを返します。完了に失敗した場合はTransactionExceptionがスローされます。これは Consensus Commit トランザクションマネージャー固有の低レベル操作 API です。ほとんどのアプリケーションは直接呼び出すべきではなく、高度なユースケースを対象としています。呼び出し元は、基礎となるトランザクションのライフサイクルとこのメソッドを直接呼び出す際の影響を理解していることが求められます。 (#3567) - クラッシュしたトランザクションによってコミットされていない状態に残された単一のレコードを回復するための
DistributedTransactionManager#recoverRecordAPI を追加しました。これは Consensus Commit トランザクションマネージャー固有の低レベル操作 API です。ほとんどのアプリケーションは直接呼び出すべきではなく、高度なユースケースを対象としています。呼び出し元は、基礎となるトランザクションのライフサイクルとこのメソッドを直接呼び出す際の影響を理解していることが求められます。 (#3617)
改善点
- メタデータが既に最新の状態の場合にテーブルのメタデータの再書き込みをスキップする (Cosmos DB の場合は、コンテナーのインデックスポリシーが既に一致する場合にその更新もスキップする) ように
repairTableを改善し、不要な書き込みを回避するようにしました。 (#3613) - コーディネーターの状態レコードがクリーンアップ (例えば
finishTransactionによる) によって削除された場合でも、Consensus Commit の回復パスと読み取りパスが正確に動作するように修正しました。これにより、古い読み取り、不正なアボート、グループコミ ットの lazy recovery 中のクラッシュを防ぎます。 (#3650) - アクティブトランザクション管理によって追跡されるアクティブトランザクションの数に設定可能な制限 (
scalar.db.active_transaction_management.max_active_transactions、デフォルト 10000) を追加しました。これは Window-TinyLFU エビクションを使用した Caffeine キャッシュによって支えられており、長時間実行中のトランザクションが使用中に削除されないように、すべてのトランザクション操作でアイドルタイマーをリフレッシュします。 (#3673)
バグの修正
- Spanner (エミュレーター、omni、クラウドインスタンス) に接続するために、既にサポートされている
jdbc:cloudspannerパターンに加えて、jdbc:spannerで始まる接続文字列を受け入れるようになりました。 (#3559) - 同じインデックス値を持つ別のレコードが同時に削除および挿入されている場合に、セカンダリインデックスを使用した
Get操作がIllegalArgumentExceptionで失敗する可能性がある Consensus Commit の問題を修正しました。 (#3607) - 読み取り専用でのコーディネーター書き込み省略が無効で、コーディネーターのグループコミットが有効な場合に、読み取り専用トランザクションが失敗する可能性がある Consensus Commit の問題を修正しました。 (#3614)
- コーディネーターのグループコミット機能が有効になっている場合に、
DistributedTransactionManager.rollback(String)/abort(String)を使用して ID でインフライトのグループコミットされたトランザクションをアボートすると、その操作が失われる可能性があるバグを修正しました。 (#3619) - lazy recovery 中に書き込みトランザクションが同時にコミットされたレコードの読み取りが、古い (コミット前の) 値を返す可能性がある Consensus Commit トランザクションマネージャーの問題を修正しました。 (#3621)
Enterprise edition
機能強化
ScalarDB Cluster
- 属性ベースの認証を追加しました。
- OpenTelemetry サポートを追加しました。
- ワンフェーズトランザクションインターフェースを使用するアプリケーションに代わって ScalarDB クラスター間で二相コミットを駆動する、新しい分離クラスターデプロイメントパターン向けのトランザクションコーディネーターノードを追加しました。
ScalarDB SQL
- Spring Boot の自動設定に対する自動設定の順序を明示的に宣言するために、
ScalarDbJdbcConfigurationに@AutoConfigureBeforeを追加しました。
改善点
ScalarDB Cluster
- ScalarDB Cluster は、アップグレード後に必要なコンパニオン before-image セカンダリインデックスを作成するために、ノード起動時に認証および ABAC システムメタデータテーブルを修復するようになりました。これにより、以前のバージョンからアップグレードされたデプロイメントは、手動で
repairTable()を実行することなく 、自動的にこれらのインデックスを取得できます。 - TLS が無効になっているが CA ルート証明書のパスが設定されている場合に、クラスターノードの起動に失敗する問題を修正しました。
- ScalarDB Cluster クライアント SDK でグローバルトランザクション API のサポートを追加しました。アプリケーションは
GlobalTransactionManagerを使用して、マイクロサービストランザクションなどの複数のプロセスにまたがる単一のトランザクションを実行できるようになりました。この場合、トランザクションコーディネーターがアプリケーションに代わって二相コミットを駆動します。同じアプリケーションコードは、単一の ScalarDB Cluster 内のトランザクションにも機能し、設定のみで切り替えられます。 - キャッシュされたトークンの有効期限が切れる直前に ScalarDB Cluster クライアントが再認証するよう、userpass 認証トークンキャッシュに設定可能な有効期限マージンを追加しました。これにより、トークンの有効期限近くで発生する不正な認証エラーを削減します。
- オペレーターがラベルセレクターで選択できるように、自己暗号化用のデータ暗号化キーを格納する Kubernetes シークレットに固定ラベルを追加しました。
ScalarDB SQL
- ワンショット SELECT ステートメントおよび SELECT のみのバッチに対する読み取り専用最適化を有効にしました。
バグの修正
ScalarDB Cluster
- クラスターのリクエスト転送ホップ制限を超えた
rollbackが失敗を表面化する代わりにサイレントに成功として報告されるバグを修正しました。これにより、lazy recovery までレコードが prepared 状態のままになる可能性がありました。 - 一時停止 RPC に
ABORTEDが新たに追加されました。 以前はすべての一時停止の失敗はFAILED_PRECONDITIONでしたが、別の管理リクエストとのレース競合による失敗はABORTEDとなりました。これにより、一時停止を単純に再試行できます。すべての一時停止の失敗には、ステータストレーラーにgoogle.rpc.ErrorInfoの詳細が含まれ、domainはcom.scalar.db.cluster.adminに、reasonは結果に設定されます。これにより、呼び出し元はステータスコードや説明テキストのマッチングなしに結果を区別できます。特に、失敗した一時停止から回復するために一時停止解除を行う呼び出し元は、reasonがTIMED_OUT_STILL_PAUSEDの場合はその一時停止解除をスキップする必要があります。これは、サーバーが以前のリクエストによって依然として一時停止されているためです。 - Bouncy Castle ライブラリおよび grpc_health_probe バイナリをアップグレードしてセキュリティ問題を修正しました: CVE-2025-14813, CVE-2026-5598, CVE-2026-25681, CVE-2026-27136, CVE-2026-27145, CVE-2026-33811, CVE-2026-33814, CVE-2026-39820, CVE-2026-39821, CVE-2026-39822, CVE-2026-39836, CVE-2026-42499, and CVE-2026-42504
ScalarDB SQL
- パラメーター化された SQL 用のキャッシュスロットを非パラメーター化 DML ステートメントが占有するステートメントキャッシュの不具合を修正しました。キャッシュ適格性は、解析された SQL 内のバインドマーカーの存在に基づいて正しく制御されるようになりました。