4.6. Ceph Object Gateway
自動生成された内部トピックは、管理者のトピックリストコマンドに表示されなくなりました。
以前は、自動生成された内部トピックはトピックリストコマンドを介してユーザーに公開されていたため、ユーザーは自分が作成したトピックよりもはるかに多くのトピックを表示できました。
この修正により、内部の自動生成されたトピックは管理者のトピックリストコマンドに表示されなくなり、ユーザーには予想されるトピックのリストのみが表示されるようになりました。
廃止されたバケット名フィールドはトピックリストコマンドに表示されなくなりました。
以前は、プルモード通知 (pubsub
) の場合、通知はバケットに保存されていました。ただし、このモードは非推奨であるにもかかわらず、トピックリストコマンドには空のバケット名フィールドが引き続き表示されます。
この修正により、空のバケット名フィールドが削除されます。
ライフサイクルの移行時に通知が送信されるようになりました。
以前は、移行時にディスパッチするロジック (有効期限とは別) が欠落していました。このため、移行時に通知が表示されませんでした。
この修正により、新しいロジックが追加され、ライフサイクルの移行時に通知が送信されるようになりました。
RGWCopyObjRequest
が修正され、名前変更操作が期待どおりに動作するようになりました。
以前は、ジッパー変換後の RGWCopyObjRequest
の初期化が正しくなかったため、名前変更操作が中断されていました。このため、多くの rgw_rename()
シナリオではソースオブジェクトのコピーに失敗し、二次的な問題が原因でコピーが失敗したにもかかわらずソースも削除されました。
この修正により、RGWCopyObjRequest
が修正され、さまざまな名前変更操作に対していくつかの単体テストケースが追加されます。
Ceph Object Gateway への不正アクセスができなくなりました。
以前は、Ceph Object Gateway ロールを表す変数が初期化される前に利用されていたため、セグメント違反が発生していました。
この修正により、操作の順序が変更され、不正アクセスが発生しなくなります。必要に応じてロールが適用されます。
間違った CSV オブジェクト構造ごとにエラーメッセージが表示されるようになりました。
以前は、CSV ファイルの中に、二重引用符が閉じられていない場合にアサートが発生し、その後クラッシュが発生していました。
この修正により、間違った CSV オブジェクト構造ごとにポップアップ表示されるエラーメッセージが導入されました。
Ceph Dashboard でユーザー関連情報を照会する際に、'user not found' というエラーが発生しなくなりました。
以前は、Ceph Dashboard では、完全な user_id
に名前空間が存在し、ダッシュボードで識別できないため、エンドユーザーは Ceph Object Gateway からユーザー関連情報を取得できず、“user not found” というエラーが発生しました。
この修正により、ユーザー情報を取得するために GET リクエストが管理者オペレーションに送信されたときに、テナント
、名前空間
、および user_id
を含む完全なユーザー ID が返されるだけでなく、各フィールドが個別に返されるようになります。エンドユーザーは正しい user_id
を取得できるようになり、これを使用して、Ceph Object Gateway から他のユーザー関連情報をさらに取得できます。
Ceph Object Gateway は、新しいストリームエンコーディング形式で整形式のペイロードを含むリクエストを渡すようになりました。
以前は、Ceph Object Gateway は STREAMING-AWS4-HMAC-SHA256-PAYLOAD
および STREAMING-UNSIGNED-PAYLOAD-TRAILER
エンコード形式を認識せず、リクエストが失敗していました。
この修正により、新しいエンコード形式に提供される新しい末尾の要求署名を認識、解析し、該当する場合は検証するロジックが実装されます。Ceph Object Gateway は、新しいストリームエンコーディング形式で整形式のペイロードを含むリクエストを渡すようになりました。
radosgw 管理バケットのチェック統計とバケット再シャード統計が正しく計算されるようになりました。
以前は、コードの変更により、バージョン管理されていないオブジェクトからバージョン管理されたオブジェクトに移行したオブジェクトがある場合、radosgw-admin バケットチェック統計の計算とバケット再シャード統計の計算が正しくありませんでした。
この修正により、計算が修正され、不正確なバケット統計出力は生成されなくなりました。
マルチパートアップロードの失敗時に tail オブジェクトが失われなくなりました。
以前は、マルチパートのアップロード中に、タイムアウトなどのシナリオが原因で一部のアップロードに失敗した場合に、アップロードが再起動され、最初のクリーンアップ試行時に、その後に行われるクリーンアップ操作から tail オブジェクトが削除されていました。一部の tail オブジェクトが失われるため、結果として得られる Ceph Object Gateway マルチパートオブジェクトが破損していました。HEAD リクエストには応答しますが、GET リクエスト中は失敗します。
この修正により、コードで、最初の試行が正しくクリーンアップされるようになりました。結果として得られる Ceph Object Gateway マルチパートオブジェクトは破損しなくなり、クライアントが読み取ることができるようになります。
CompleteMultipartUpload
とその通知に ETag 値が表示されるようになりました。
以前は、通知に関連する変更が原因で、完了したマルチパートアップロードに対応するオブジェクトハンドルに結果の ETag が含まれませんでした。このため、CompleteMultipartUpload
とその通知の結果として、マルチパートアップロードを完了するための ETag が存在しませんでした。(正しい ETag が計算され保存されたため、後続の操作には正しい ETag 結果が含まれます。)
この修正により、CompleteMultipartUpload
はオブジェクトを更新し、期待どおりに出力するようになりました。CompleteMultipartUpload
とその通知に ETag 値が存在するようになりました。
Swift 経由でコンテナー (バケット) をリストしても、Ceph Object Gateway がクラッシュしなくなりました。
以前は、swift-object-storage
呼び出しパスに、対応するバケットでオブジェクトハンドルを更新するための呼び出しがありませんでした (ジッパーバックポートの問題)。このため、S3 Web サイトが同じバケットに対して設定されている場合に、Swift 経由でコンテナー (バケット) をリストすると、Ceph Object Gateway がクラッシュする原因になります。
この修正により、必要なジッパーロジックが追加され、クラッシュは発生しなくなりました。
ライフサイクルポリシーのないバケットでライフサイクルを処理してもクラッシュしなくなる
以前は、ライフサイクルポリシーのないバケットでライフサイクルを手動で処理しようとすると、null ポインター参照が発生し、radosgw-admin プログラムがクラッシュしていました。
この修正により、クラッシュを回避するために、ハンドルを操作する前に null バケットハンドルのチェックが行われます。
データプールのゾーン詳細を変更できるようになる
rgw::zone_create()
関数は、ゾーン作成時にデフォルトの配置ターゲットとプール名を初期化します。この機能は、以前は exclusive=false
に設定された radosgw-admin ゾーンにも使用されていました。ただし、zone set
では、STANDARD ストレージクラスの data_pool を変更することはできません。
この修正により、default-placement ターゲットがすでに存在する場合は上書きされず、データプールのゾーンの詳細を期待どおりに変更できるようになります。
浮動小数点数のモジュロ演算が正しい結果を返すようになる
以前は、浮動小数点数のモジュロ演算で間違った結果が返されていました。
この修正により、SQL エンジンが強化され、浮動小数点のモジュロ演算を処理し、正しい結果を返すようになりました。
SQL ステートメントは、大文字と小文字を区別しないブール式の結果を正しく返す
以前は、SQL ステートメントの一部に大文字のブール式が含まれていたため、誤った解釈と誤った結果が生じていました。
この修正により、ステートメントの解釈は大文字と小文字を区別しなくなり、どの場合でも正しい結果が返されるようになります。
SQL エンジンは正しい NULL 値を返す
以前は、NULL を型へキャストすることが SQL ステートメントに含まれていたため、NULL を返す代わりに間違った結果が返されていました。
この修正により、SQL エンジンは NULL からのキャストを識別し、NULL を返します。
ETags 値が CompleteMultipartUpload
とその通知に表示されるようになる
以前は、通知に関連する変更が原因で、完了したマルチパートアップロードに対応するオブジェクトハンドルに結果の ETag が含まれませんでした。その結果、CompleteMultipartUpload
とその通知には ETag が存在しませんでした。(正しい ETag が計算され保存されたため、後続の操作には正しい ETag 結果が含まれます。)
この修正により、CompleteMultipartUpload
はオブジェクトを更新し、期待どおりに出力するようになりました。CompleteMultipartUpload
とその通知に ETag 値が表示されるようになりました。
オブジェクト名にバックスラッシュ (/) が埋め込まれたワークロードをクラウド同期に送信しても、同期エラーが発生しなくなる
以前は、クラウド同期中にオブジェクトパスの URL エスケープが不適切だったため、名前にバックスラッシュ (/) が埋め込まれたオブジェクトがワークロードに含まれていた場合、つまり仮想ディレクトリーパスが使用されていた場合に同期が失敗していました。
この修正により、不適切なエスケープが修正され、オブジェクト名に埋め込まれたバックスラッシュ (/) を含むワークロードが期待どおりにクラウド同期に送信できるようになります。
ブール式を含む SQL ステートメントがブール型を返す
以前は、ブール式 (射影) を含む SQL ステートメントは、ブール型ではなく文字列型を返していました。
この修正により、エンジンは、ステートメント構文に従って文字列をブール式として識別し、ブール型 (true/false) を正常に返すようになりました。
作業スケジューラーが、should_work
関数で次の日付を考慮するようになる
以前は、ライフサイクルを現在の時刻で実行を開始するかどうかを決定する should_work
関数で使用されたロジックでは、次の日付が考慮されていませんでした。その結果、AB < XY の場合、カスタム作業時間 "XY:TW-AB:CD" によってライフサイクル処理が中断されていました。
この修正により、作業スケジューラーは次の日付を考慮するようになり、さまざまなカスタムライフサイクル作業スケジュールが期待どおりに機能するようになりました。
merge_and_store_attrs()
メソッドによって属性更新操作が失敗しなくなる
以前は、変更されたバケットインスタンス属性と変更されていないバケットインスタンス属性の調整を処理する merge_and_store_attrs()
メソッドのバグにより、一部の属性更新操作が暗黙的に失敗していました。このため、バケットのサブセットに対する一部のメタデータ操作は失敗していました。たとえば、レート制限が設定されているバケットでは、バケット所有者の変更ができませんでした。
この修正により、merge_and_store_attrs()
メソッドが修正され、影響を受けていたすべてのシナリオが正しく動作するようになりました。
チェックサムと不正な形式のトレーラーがクラッシュを引き起こさなくなる
以前は、java AWS4Test.testMultipartUploadWithPauseAWS4
の実行中に AWSv4ComplMulti
から例外が発生し、一部のクライアント入力、具体的にはチェックサムトレーラーを使用するクライアント入力によってクラッシュが発生していました。
この修正により、do_aws4_auth_completion()
に例外ハンドラーが実装されます。チェックサムと不正な形式のトレーラーによってクラッシュが発生することはなくなりました。
改良された末尾のチャンク境界検出の実装
以前は、長さ 0 の末尾のチャンク境界フォーマットの有効な形式が 1 つ処理されませんでした。このため、Ceph Object Gateway は末尾のチャンクの開始を正しく認識できず、403 エラーが発生していました。
この修正により、改良された末尾のチャンク境界検出が実装され、匿名アクセスの場合に予期しない 403 エラーが発生しなくなりました。
Kafka メッセージとアイドルタイムアウトのデフォルト値によるハングが発生しなくなる
以前は、Kafka メッセージとアイドルタイムアウトのデフォルト値により、Kafka ブローカーの待機中にまれにハングが発生していました。
この修正により、タイムアウトが調整され、ハングしなくなりました。
Delete bucket tagging が失敗しなくなる
以前は、RADOS SAL merge_and_store_attrs()
のロジックが間違っていたため、属性が削除されませんでした。これは DeleteLifecycle
にも影響を及ぼしました。その結果、一部のコードパスでは純粋な属性削除が有効になりませんでした。
この修正により、バケットタグを保存するロジックでは、merge_and_store_attrs()
ではなく RADOS SAL put_info()
が使用されます。Delete bucket tagging が、想定どおりに正常に行われるようになりました。
mtime
オブジェクトが S3 PutACL
で進み、ACL の変更が適切にレプリケートされるようになりました。
以前は、S3 PutACL
操作では mtime
オブジェクトが更新されませんでした。これにより、タイムスタンプベースのオブジェクト変更チェックが誤って false を返したため、一度適用された ACL の変更はレプリケートされませんでした。
この修正により、mtime
オブジェクトは S3 PutACL
で常に進み、ACL の変更が適切にレプリケートされます。
すべての移行ケースで通知をディスパッチできるようになる
以前は、移行時に通知をディスパッチするロジックが誤ってクラウド移行ケースにスコープされていたため、プール移行時の通知が送信されませんでした。
この修正により、通知ディスパッチがプール移行スコープに追加され、すべての移行ケースで通知をディスパッチできるようになります。
2106 年以降の RetainUntilDate
は切り捨てられなくなり、新しい PutObjectRetention
リクエストに対して期待どおりに動作します。
以前は、2106 年以降の RetainUntilDate
を指定する PutObjectRetention
リクエストは切り捨てられ、オブジェクトロックの強制にはそれより前の日付が使用されていました。これは、期間が日数で指定される ` PutBucketObjectLockConfiguration` リクエストに影響を与えることはありませんでした。
この修正により、RetainUntilDate
は新しい PutObjectRetention
リクエストに対して期待どおりに保存され、動作するようになりました。以前存在していたリクエストは自動的に修復されません。既存のリクエストを修正するには、x-amz-object-lock-retain-until-date
に基づいて HeadObject
リクエストを使用してリクエストを識別し、RetainUntilDate
を使用して再度保存します。
詳細は、S3 の put オブジェクト保持 を参照してください。
バケットライフサイクル処理ルールが停止しなくなる
以前は、シャードごとのバケットライフサイクルルールの列挙に、バケットのライフサイクルルールの同時削除に関連する論理エラーが含まれていました。このため、シャードはそのシャードの処理を停止する状態になり、一部のバケットライフサイクルルールが処理されなくなる可能性がありました。
この修正により、列挙は削除されたエントリーをスキップできるようになり、この問題に関連するライフサイクル処理の停止が解決されました。
バージョン管理されたバケット内のオブジェクトを削除すると、統計の不一致が発生する
バージョン管理されたバケットには最新のオブジェクトと最新でないオブジェクトが混在しているため、オブジェクトを削除すると、ローカルサイトとリモートサイトでバケットとユーザーの統計に不一致が生じる可能性があります。これにより、どちらのサイトでもオブジェクトリークが発生することはなく、統計の不一致が発生するだけです。