kv_get_version()

#include <kvstore.h>

const kv_version_t *
kv_get_version(const kv_value_t *value) 

key-valueペアの特定のバージョンを参照するバージョン構造を作成します。この関数から返されるkv_version_t構造は、取得元のkv_value_t構造によって所有されることに注意してください。このため、この関数から返されるバージョン構造は明示的に解放しません。値構造が解放されると、自動的に解放されます。

key-valueペアが最初にKVストアに挿入される際や各更新の際、一意のバージョン・トークンが割り当てられます。バージョンは、key-valueペアのバージョン部分に関連付けられています。バージョンは、次の2つの理由のため重要です。

  • 更新や削除を行う場合、最後の既知の値が変更されていない場合にのみ更新または削除を行うことが重要な場合があります。たとえば、以前の既知の値の整数フィールドを増分する場合、以前の値がクライアントによって取得された後にKVストア内で変更されていないことが重要です。これは、以前の既知の値のバージョンをkv_put_with_options()またはkv_delete_with_options()関数のif_versionパラメータに渡すことで保証されます。指定したバージョンがKVストアの値の現在のバージョンと一致しない場合、これらの関数は更新または削除操作を実行せず、失敗の通知を返します。必要に応じて、現在のバージョンまたは値(あるいはその両方)も返されるため、クライアントは操作を再試行するか、別のアクションを実行できます。

  • クライアントが以前に書き込まれた値を読み取る際、読取り操作をサービスするKVストア・ノードが以前の書込み情報で更新されていることを確認することが重要な場合があります。これは、読取り操作とともにバージョンベースの一貫性ポリシーを使用することによって実現できます。詳細は、kv_create_version_consistency()を参照してください。

    リソースをより効率的に利用するためにデータを移行する場合など、key-valueペアに新しいバージョンがまれに割り当てられることがあるので注意してください。したがって、kv_put_with_options()またはkv_delete_with_options()を使用する際は、アプリケーションによって変更されるまでバージョンがそのままであるとは想定できません。

パラメータ

  • value

    valueパラメータは、バージョン情報の抽出元である値構造です。