テストステ論

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

s3: multipart uploadに成功した

すでにGetには成功した. streamingで返す時には明示的にContent-Lengthを付ける必要がある. 色々不可思議な点はあるのだが, とりあえず動いた.

次は, multipart uploadからのGetをしてみる. ここまで出来れば, ファイルを単に出し入れすることは可能になる.

スクリプト:

FILE=linux-3.13.11.tar.xz
s3cmd --multipart-chunk-size-mb=5 put $FILE s3://myb
s3cmd ls s3://myb
s3cmd get s3://myb/$FILE dlfile

実行結果:

linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 1 of 15, 5MB]
 5242880 of 5242880   100% in    0s    25.69 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 2 of 15, 5MB]
 5242880 of 5242880   100% in    0s    24.04 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 3 of 15, 5MB]
 5242880 of 5242880   100% in    0s    23.16 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 4 of 15, 5MB]
 5242880 of 5242880   100% in    0s    27.06 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 5 of 15, 5MB]
 5242880 of 5242880   100% in    0s    26.26 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 6 of 15, 5MB]
 5242880 of 5242880   100% in    0s    28.31 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 7 of 15, 5MB]
 5242880 of 5242880   100% in    0s    19.69 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 8 of 15, 5MB]
 5242880 of 5242880   100% in    0s    27.23 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 9 of 15, 5MB]
 5242880 of 5242880   100% in    0s    24.52 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 10 of 15, 5MB]
 5242880 of 5242880   100% in    0s    27.20 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 11 of 15, 5MB]
 5242880 of 5242880   100% in    0s    29.22 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 12 of 15, 5MB]
 5242880 of 5242880   100% in    0s    28.74 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 13 of 15, 5MB]
 5242880 of 5242880   100% in    0s    23.93 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 14 of 15, 5MB]
 5242880 of 5242880   100% in    0s    24.43 MB/s  done
linux-3.13.11.tar.xz -> s3://myb/linux-3.13.11.tar.xz  [part 15 of 15, 3MB]
 3801216 of 3801216   100% in    0s    26.47 MB/s  done
2015-09-17 07:45  77201536   s3://myb/linux-3.13.11.tar.xz
s3://myb/linux-3.13.11.tar.xz -> dlfile  [1 of 1]
 77201536 of 77201536   100% in    1s    67.22 MB/s  done
WARNING: MD5 signatures do not match: computed=d4e06af8b674ac74ba745d52e4382bd3, received=2ce9f27e9c0bc70cf2b822e05a8a7057-15
  • ファイルはlinuxのアーカイブ. 77MBくらい
  • チャンクサイズを5MBにしてmultipart uploadすることには成功している.
  • lsの結果も正しい
  • downloadも正しく出来ている.
  • しかしなぜか, MD5 signatureが違うと怒られる. why?

私の予想:

  • s3cmdのバグでは?computed signatureが, multipartのものではない.
  • AWS S3は, multipartの時は, 送ったupload partsのmd5を合成してetagを計算している. この時, 最後に-nがつく(nはlen(parts)).
  • 従って, s3cmdが計算しているmd5はおかしい.
  • おそらく, 受け取ったファイルに対して単に再計算しているのだろう. だとしたら, FUCK YOU

ググると, この問題は既知のようで

http://stackoverflow.com/questions/13390271/aws-s3-s3cmd-warning-md5-signatures-do-not-match-what-do によると,

  • s3cmd 1.5.2 knows this and ignores such ETags. If your s3cmd is older than 1.5.2, please upgrade. => 嘘をつくな. おれは1.5.2を使っている. 大体, 1.5.2になるまで気づかないとは, バカか.
  • S3 returning incorrect md5s to s3cmd as well. => No. undocumentedな仕様だが, AWS S3がルールだ. おれは従った. おまえも従え.

これでs3cmdは終わりで良いだろう. ひたすらデバグをする.