GeekFactory

int128.hatenablog.com

Gradle SSH Plugin 2.1.1をリリースした

Gradle SSH Plugin/Groovy SSH 2.11をリリースしました。

2.1.1の変更点

SCP GET/PUTの性能を改善しました。

github.com

2.1.0でSCPサポートを追加しましたが、非効率な実装が残っていたため、2.1.1で性能を改善しました。

Test Item scp vs sftp (2.1.0) scp vs sftp (2.1.1)
get a large file 419% 132%
get many files 75% 74%
put a large file 144% 114%
put many files 1025% 143%

2.1.0ではSCPはSFTPに比べて4〜10倍も遅い結果になっていましたが、2.1.1では若干遅いレベルまで改善しています。

改善点は以下です。

  • Stream Interactionのバッファサイズを1kBから1MBに変更しました。大容量のファイルを扱う際の処理効率が改善しました。
  • 1つのSCPコマンドで複数のファイルやディレクトリをまとめて作成するように変更しました。もともとは、ファイルやディレクトリごとにSCPコマンドを実行していたため、通信遅延やコマンド実行のコストがかかっていました。

おまけ

Groovy 2.xでコンパイルしたコードをGroovy 1.xで実行すると様々な問題が起こるのですが、また新たに1つ見つけてしまいました。Groovy 2.xの @groovyx.transform.Immutable で生成されるコンストラクタはGroovy 1.xで動作しないようです。

Caused by: java.lang.IncompatibleClassChangeError: the number of constructors during runtime and compile time for org.hidetake.groovy.ssh.extension.helper.ScpPutHelper$EnterDirectory do not match. Expected -1 but got 3

代わりに、フィールドをすべてfinalにして自分でコンストラクタを書けばOKです。

Gradle 1.xサポートを早く外したいなぁ。