tttol / mos3

MOS3 - My Own S3
MIT License
0 stars 0 forks source link

lsの`--recursive`オプションに対応する #1

Open tttol opened 2 weeks ago

tttol commented 2 weeks ago

aws s3 ls --recursiveのような--recursiveオプションがついたリクエストに対応する。

tttol commented 2 weeks ago

aws s3 ls --recursive が実行された場合、S3のリスト操作はサーバー側でディレクトリツリーを再帰的に処理します。これは、クライアントが複数のリクエストを送るのではなく、サーバーがディレクトリの構造をトラバースしてリストを作成することを意味します。そのため、サーバーに送信されるリクエストは1つだけですが、そのリクエストに対するレスポンスには、再帰的にリストされたすべてのオブジェクトが含まれます。

具体的には、aws-cli がS3バケットのルートに対して1つのリクエストを送信し、サーバーはそのリクエストに基づいて再帰的にディレクトリをリストし、すべてのオブジェクトを1つのレスポンスとして返します。したがって、アプリにはリクエストが1つしか来ません。

tttol commented 2 weeks ago

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してることがわかる。