`fluent-plugin-bigquery` のパラメータ `request_timeout_sec` 、未設定の場合はどうなるの?
要旨
fluent-plugin-bigquery の README を読んでいると、 request_timeout_sec のデフォルト値が nil になっている(その下の request_open_timeout_sec には 60 が設定されているのに)のが気になりました。
結論としては、 request_timeout_sec は最終的に httpclient の send_timeout 及び receive_timeout パラメータとして利用され、未設定の場合は そこで指定されているデフォルト値である send_timeout = 120, receive_timeout = 60 が採用されるようです。
調査作業ログ
request_timeout_sec のデフォルト値が nil なので未設定だと無期限に待ち続けるのかと危惧し、実装を見てみることにしました。(ちなみに私はRuby経験は0ですので、これが妥当な調査手順かはわかりません。)
とりあえずGitHub上で検索してみると out_bigquery_base.rbで Fluent::BigQuery::Writer.new の引数として渡されていることがわかりました。
Fluent::BigQuery::Writer というのはおそらく bigquery/writer.rbで定義されている Writer クラスのことだと当たりをつけました。また、Rubyの new は initialize メソッドを呼び出すように入門ページに書かれていたので initialize の処理を見てみると Google::Apis::BigqueryV2::BigqueryService を利用しているようなコードがありました。 read_timeout_sec 及び send_timeout_sec フィールドに設定されているようです。
この文字列でGoogle検索してみると google-api-ruby-clientがヒットしました。
client_options の "client" とは、どうも HTTPClientのことっぽい、 require で 階層なし になっているということはRubyの標準モジュールなのか?と検索してみると StackOverflowの回答から ここに行き当たりました。