テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

絶望 (finagleからの撤退)

finchにstreamingを導入し, akashic-storageはそれを利用してchunked encodingのstreamでI/O出来るようになった.

しかしこれが致命的であることがわかってきた.

About validation in S3 getObject · Issue #625 · aws/aws-sdk-java · GitHub

aws-sdk-javaは, Multipart Uploadでうpったものをchunked encodingで返されるとロジックが破綻する. 回答者はちんぷんかんぷんだが, 結局, AWS S3で再現出来ないものはバグではないという考え方なのだろう. エンジニアのマインドがこうだから, コードも当然ひどい.

さらに, 私の調査によると, minio/mcもChunked Encodingには対応していない. これは開発者のハーシャが, chunked encodingをdisableするフラグを導入したことからも分かるし, 使ってみて対応していないということは分かったし, Gitter Channelで聞いてもその通りだという回答だったから確定した. Is there a way to not use chunked uploading for java-sdk for signature V4? · Issue #580 · aws/aws-sdk-java · GitHub

Game overだ. 絶望している. akashic-storageはもうダメかも知れない. どうにかして解決する道はないのか調べると止まらず, 睡眠もロクにとれていない. 眠い.

そもそも論でいうと, これらのクライアントソフトウェアは, ストリーミングを使わないか, 使うにしてもClose Delimitedという方式しか認めないという立場なのだ. このタイプのストリーミングは, Chunked Encodingに対応しようとしない糞クライアントどものために, sprayやakka-httpでは対応している.

では, finchでも, 例えばsprayのように対応出来ないだろうか?それはもちろん考えたが, 修正すべきコードはNettyにある. 今私はさらに深い調査を進めているが, 今のところの感触としては, ダメくさいという印象である.

私はfinchを気に入ってるので, なんとかして今のアーキテクチャを保ちたいと考えているが, ダメな場合はsprayかakka-httpに戻ることを考える. akka-httpはver2となり, 多少の変更が入ったようだから再調査の価値はある. ただし, streamingの考え方とS3の仕様があまりフィットしていないことは, 私の経験からは確かである. 現実的な解としては, sprayでやってみて, 明らかにsprayが終わった時にakka-httpに移行するというものであろう.