7.3.5. リクエストタイムアウト

7.3.5.1. 概要

バージョン 6.0.2 で追加.

各リクエストにタイムアウトを設定できます。

指定したタイムアウトまでにリクエストが完了しなかった場合、そのリクエストはキャンセルされます。タイムアウトを設定しない場合、そのリクエストが完了するまで処理をします。

リクエストタイムアウト機能はクライアントサイドでタイムアウトを実装しているときに有用です。もし、クライアントサイドだけでタイムアウトを実装していると、クライアントがレスポンスを待つことをやめたあともリクエストを処理し続けます。これは不必要にリソースを消費しています。このリクエストにタイムアウトを設定していれば、じきにこのリクエストはキャンセルされます。

7.3.5.2. リクエストにタイムアウトを設定する方法

すべてのコマンドは request_timeout パラメーターを受け付けます。 request_timeout パラメーターを追加することでリクエストにタイムアウトを設定できます。

タイムアウト値の単位は秒です。 0.1 のように小数で指定することで1秒未満のタイムアウトを設定できます。 0.1 は100ミリ秒のタイムアウトという意味です。

以下はリクエストに 5.5 秒のタイムアウトを設定する例です。:

select Users --request_timeout 5.5

7.3.5.3. タイムアウト時のリターンコード

リクエストがタイムアウトすると、レスポンスヘッダーの リターンコードGRN_CANCEL-77 )になります。

以下はタイムアウト時にレスポンス例です。:

[
  [
    -77,
    1459846102.63304,
    0.000220775604248047,
    "[request-canceler] a request is canceled: <0x7fa0d5d7ed00>"
  ]
]

レスポンスヘッダーについては 出力形式 を参照してください。

7.3.5.4. デフォルトでリクエストタイムアウトを有効にする

groonga 実行ファイル はデフォルトのリクエストタイムアウトを設定する機能があります。デフォルトのリクエストタイムアウトは groonga --default-request-timeout で指定します。

デフォルトのリクエストタイムアウトが0より大きい場合、すべてのリクエストはその値をリクエストタイムアウトに使います。

リクエストに request_timeout パラメーターを指定するとデフォルトのリクエストタイムアウトを上書きできます。もし、デフォルトのリクエストタイムアウトが3秒で request_timeout パラメーターが1秒なら、そのリクエストは1秒後にキャンセルされます。