`fluent-plugin-bigquery` のパラメータ `request_timeout_sec` 、未設定の場合はどうなるの?
   2 min read

要旨

fluent-plugin-bigqueryREADME を読んでいると、 request_timeout_sec のデフォルト値が nil になっている(その下の request_open_timeout_sec には 60 が設定されているのに)のが気になりました。

結論としては、 request_timeout_sec は最終的に httpclientsend_timeout 及び receive_timeout パラメータとして利用され、未設定の場合は そこで指定されているデフォルト値である send_timeout = 120, receive_timeout = 60 が採用されるようです。

調査作業ログ

request_timeout_sec のデフォルト値が nil なので未設定だと無期限に待ち続けるのかと危惧し、実装を見てみることにしました。(ちなみに私はRuby経験は0ですので、これが妥当な調査手順かはわかりません。)

とりあえずGitHub上で検索してみると out_bigquery_base.rbFluent::BigQuery::Writer.new の引数として渡されていることがわかりました。

Fluent::BigQuery::Writer というのはおそらく bigquery/writer.rbで定義されている Writer クラスのことだと当たりをつけました。また、Rubyの newinitialize メソッドを呼び出すように入門ページに書かれていたので initialize の処理を見てみると Google::Apis::BigqueryV2::BigqueryService を利用しているようなコードがありました。 read_timeout_sec 及び send_timeout_sec フィールドに設定されているようです。

この文字列でGoogle検索してみると google-api-ruby-clientがヒットしました。 client_options の "client" とは、どうも HTTPClientのことっぽい、 require階層なし になっているということはRubyの標準モジュールなのか?と検索してみると StackOverflowの回答から ここに行き当たりました。