Open tttol opened 2 weeks ago
aws s3 ls --recursive
が実行された場合、S3のリスト操作はサーバー側でディレクトリツリーを再帰的に処理します。これは、クライアントが複数のリクエストを送るのではなく、サーバーがディレクトリの構造をトラバースしてリストを作成することを意味します。そのため、サーバーに送信されるリクエストは1つだけですが、そのリクエストに対するレスポンスには、再帰的にリストされたすべてのオブジェクトが含まれます。
具体的には、aws-cli がS3バケットのルートに対して1つのリクエストを送信し、サーバーはそのリクエストに基づいて再帰的にディレクトリをリストし、すべてのオブジェクトを1つのレスポンスとして返します。したがって、アプリにはリクエストが1つしか来ません。
https://github.com/aws/aws-cli/blob/develop/awscli/customizations/s3/subcommands.py#L503
if not bucket:
self._list_all_buckets()
elif parsed_args.dir_op:
# Then --recursive was specified.
self._list_all_objects_recursive(
bucket, key, parsed_args.page_size, parsed_args.request_payer)
--recursive
が指定されるとparsed_args.dir_op
がtrueになり、_list_all_objects_recursive
メソッドでlsを再帰呼び出ししてそう。
つまり、リクエスト1つの中で再帰的にlsしてることがわかる。
aws s3 ls --recursive
のような--recursive
オプションがついたリクエストに対応する。