groonga - オープンソースのカラムストア機能付き全文検索エンジン

9.1. GQTP

GQTPはGroonga Query Transfer Protocolの頭文字です。GQTPはgroonga用の独自プロトコルです。

9.1.1. プロトコル

GQTPはステートフルなクライアント・サーバーモデルのプロトコルです。以下の流れが1つの処理単位です:

  • クライアントがリクエストを送る

  • サーバーがリクエストを受け取る

  • サーバーがリクエストを処理する

  • サーバーがレスポンスを返す

  • クライアントがレスポンスを受け取る

1つのセッション内で0個以上の処理単位を実行できます。

リクエストもレスポンスもGQTPヘッダーとボディから成ります。GQTPヘッダーは固定長のデータです。ボディは可変長サイズのデータです。ボディのサイズはGQTPヘッダーの中に入っています。GQTPではボディの中身については何も定義しません。

9.1.1.1. GQTPヘッダー

GQTPヘッダーは以下の符号なし整数値から成ります:

名前

サイズ

説明

protocol 1byte

プロトコルの種類。

query_type 1byte

ボディのコンテントタイプ。

key_length 2byte

未使用。

level 1byte

未使用。

flags 1byte

フラグ。

status 2byte

リターンコード。

size 4byte

ボディのサイズ。

opaque 4byte

未使用。

cas 8byte

未使用。

ヘッダーのすべての値はネットワークバイトオーダーを使っています。

以下のセクションではそれぞれのヘッダーの値で利用可能な値について説明します。

GQTPヘッダーは全部で24byteになります。

9.1.1.1.1. protocol

リクエストのGQTPヘッダーでもレスポンスのGQTPヘッダーでも、この値は常に 0xc7 になります。

9.1.1.1.2. query_type

この値は以下のいずれかの値です:

名前

説明

NONE 0

自由形式。

TSV 1

値をタブで区切った形式。

JSON 2

JSON。

XML 3

XML。

MSGPACK 4

MessagePack。

リクエストGQTPヘッダーでは使われません。

レスポンスGQTPヘッダーで使われます。ボディは指定した形式にします。

9.1.1.1.3. flags

この値は以下の値をビット単位ORしたものになります:

名前

説明

MORE 0x01

まだデータがあります。

TAIL 0x02

これ以上データはありません。

HEAD 0x04

未使用。

QUIET 0x08

レスポンスを出力しません。

QUIT 0x10

終了します。

MORE あるいは TAIL フラグは必ず指定しないといけません。

MORE フラグを使うときは QUIET フラグも使うべきです。リクエストが途中のときはレスポンスを出力する必要がないからです。

セッションを終了するときは QUIT フラグを使ってください。

9.1.1.1.4. status

利用可能な値です。将来的に新しいステータスが追加される可能性があります。

  • 0: SUCCESS
  • 1: END_OF_DATA
  • 65535: UNKNOWN_ERROR
  • 65534: OPERATION_NOT_PERMITTED
  • 65533: NO_SUCH_FILE_OR_DIRECTORY
  • 65532: NO_SUCH_PROCESS
  • 65531: INTERRUPTED_FUNCTION_CALL
  • 65530: INPUT_OUTPUT_ERROR
  • 65529: NO_SUCH_DEVICE_OR_ADDRESS
  • 65528: ARG_LIST_TOO_LONG
  • 65527: EXEC_FORMAT_ERROR
  • 65526: BAD_FILE_DESCRIPTOR
  • 65525: NO_CHILD_PROCESSES
  • 65524: RESOURCE_TEMPORARILY_UNAVAILABLE
  • 65523: NOT_ENOUGH_SPACE
  • 65522: PERMISSION_DENIED
  • 65521: BAD_ADDRESS
  • 65520: RESOURCE_BUSY
  • 65519: FILE_EXISTS
  • 65518: IMPROPER_LINK
  • 65517: NO_SUCH_DEVICE
  • 65516: NOT_A_DIRECTORY
  • 65515: IS_A_DIRECTORY
  • 65514: INVALID_ARGUMENT
  • 65513: TOO_MANY_OPEN_FILES_IN_SYSTEM
  • 65512: TOO_MANY_OPEN_FILES
  • 65511: INAPPROPRIATE_I_O_CONTROL_OPERATION
  • 65510: FILE_TOO_LARGE
  • 65509: NO_SPACE_LEFT_ON_DEVICE
  • 65508: INVALID_SEEK
  • 65507: READ_ONLY_FILE_SYSTEM
  • 65506: TOO_MANY_LINKS
  • 65505: BROKEN_PIPE
  • 65504: DOMAIN_ERROR
  • 65503: RESULT_TOO_LARGE
  • 65502: RESOURCE_DEADLOCK_AVOIDED
  • 65501: NO_MEMORY_AVAILABLE
  • 65500: FILENAME_TOO_LONG
  • 65499: NO_LOCKS_AVAILABLE
  • 65498: FUNCTION_NOT_IMPLEMENTED
  • 65497: DIRECTORY_NOT_EMPTY
  • 65496: ILLEGAL_BYTE_SEQUENCE
  • 65495: SOCKET_NOT_INITIALIZED
  • 65494: OPERATION_WOULD_BLOCK
  • 65493: ADDRESS_IS_NOT_AVAILABLE
  • 65492: NETWORK_IS_DOWN
  • 65491: NO_BUFFER
  • 65490: SOCKET_IS_ALREADY_CONNECTED
  • 65489: SOCKET_IS_NOT_CONNECTED
  • 65488: SOCKET_IS_ALREADY_SHUTDOWNED
  • 65487: OPERATION_TIMEOUT
  • 65486: CONNECTION_REFUSED
  • 65485: RANGE_ERROR
  • 65484: TOKENIZER_ERROR
  • 65483: FILE_CORRUPT
  • 65482: INVALID_FORMAT
  • 65481: OBJECT_CORRUPT
  • 65480: TOO_MANY_SYMBOLIC_LINKS
  • 65479: NOT_SOCKET
  • 65478: OPERATION_NOT_SUPPORTED
  • 65477: ADDRESS_IS_IN_USE
  • 65476: ZLIB_ERROR
  • 65475: LZO_ERROR
  • 65474: STACK_OVER_FLOW
  • 65473: SYNTAX_ERROR
  • 65472: RETRY_MAX
  • 65471: INCOMPATIBLE_FILE_FORMAT
  • 65470: UPDATE_NOT_ALLOWED
  • 65469: TOO_SMALL_OFFSET
  • 65468: TOO_LARGE_OFFSET
  • 65467: TOO_SMALL_LIMIT
  • 65466: CAS_ERROR
  • 65465: UNSUPPORTED_COMMAND_VERSION

9.1.1.1.5. size

ボディのサイズです。ボディの最大サイズは4GiBです。これは size が4byteの符号なし整数だからです。4GiB以上のサイズのデータを送りたい場合は MORE フラグを使ってください。

9.1.2. 例

TODO

9.1.3. 参照

TODO

目次

前のトピックへ

9. 仕様

次のトピックへ

9.2. 検索

このページ