-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize listing objects for s3 api #18373
Open
humengyu2012
wants to merge
1,058
commits into
Alluxio:main
Choose a base branch
from
humengyu2012:s3
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### What changes are proposed in this pull request? Refactor command line options and parsing logic in Fuse. ### Why are the changes needed? To make the control flow more extensible. ### Does this PR introduce any user facing changes? No. pr-link: Alluxio#17956 change-id: cid-af9e2f2b613f8c72badae902a6f878483bdb0e0e
update the check-docs as well pr-link: Alluxio#17995 change-id: cid-5bcfa56a7696a65e93b0de460585a7807c9f5f82
### What changes are proposed in this pull request? Add testcontainers test support for relevant unit testings. ### Why are the changes needed? For certain junit test suites such as etcd related, testcontainers framework needs to be supported ### Does this PR introduce any user facing changes? N/A pr-link: Alluxio#17977 change-id: cid-ba36ad7f742b1b5370da43b68574be0ff88ead04
`declare -A` is only available starting bash 4+ as pointed out by @twalluxio and @Kai-Zhang change os/arch mappings in `bin/alluxio` into a list of tuples pr-link: Alluxio#17998 change-id: cid-3e90bd74de0f4acecd961bb4d4c1537332dc7f6e
### What changes are proposed in this pull request? Remove unused class which causing problem. ``` 2023-08-15 21:40:36,663 WARN ChannelInitializer - Failed to initialize a channel. Closing: [id: 0xa460dfda, L:/172.31.93.123:29997 - R:/172.31.80.106:34390] java.lang.RuntimeException: No value set for configuration key alluxio.worker.tieredstore.level0.alias at alluxio.conf.InstancedConfiguration.get(InstancedConfiguration.java:108) at alluxio.conf.InstancedConfiguration.get(InstancedConfiguration.java:100) at alluxio.conf.InstancedConfiguration.getString(InstancedConfiguration.java:259) at alluxio.conf.Configuration.getString(Configuration.java:221) at alluxio.DefaultStorageTierAssoc.<init>(DefaultStorageTierAssoc.java:71) at alluxio.worker.netty.FileWriteHandler.<init>(FileWriteHandler.java:49) at alluxio.emon.worker.netty.FileWriteHandlerEE.<init>(FileWriteHandlerEE.java:42) at alluxio.emon.worker.netty.PipelineHandlerEE.addBlockHandlerForDora(PipelineHandlerEE.java:113) at alluxio.emon.worker.netty.PipelineHandlerEE.initChannel(PipelineHandlerEE.java:100) at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:129) at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:112) at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:1114) at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609) at io.netty.channel.DefaultChannelPipeline.access$100(DefaultChannelPipeline.java:46) at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1463) at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1115) at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:650) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:514) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at java.base/java.lang.Thread.run(Thread.java:829) ``` ### Why are the changes needed? fix bug ### Does this PR introduce any user facing changes? na pr-link: Alluxio#17997 change-id: cid-4343001dd94f832a09bc9b3647b9e22fe6554c80
add check to ensure the go code in `cli/` compiles as part of the checks build pr-link: Alluxio#17996 change-id: cid-aa0589a0d7c889af2b3abd0b30037a6769aac5a2
parity with the bash side change in Alluxio#17933 pr-link: Alluxio#17994 change-id: cid-85e50e9b00f4f03edf96abbccac99242d8284c5e
### What changes are proposed in this pull request? current version didn't support must_cache and async_cache, so remove the usage of must_cache and async_cache usage in code and mark deprecated to prevent any use. ### Why are the changes needed? This change focuses on removing the write type of MUST_CACHE and ASYNC_CACHE, and Alluxio#17980 would remove the master-side code about async persist. ### Does this PR introduce any user facing changes? No pr-link: Alluxio#17963 change-id: cid-14d40a217134beb8a5e7316b050af01bca18b65e
### What changes are proposed in this pull request? Skip copy process if validation fails. Also adding more info to the progress report. ### Why are the changes needed? Feature request. ### Does this PR introduce any user facing changes? na pr-link: Alluxio#17804 change-id: cid-c0affd0be9609f9e43a3c901247d27ce17021e85
### What changes are proposed in this pull request? running `build/cli/build-cli.sh -a` from tarball dry runs ### Why are the changes needed? needed to fix dry runs ### Does this PR introduce any user facing changes? no pr-link: Alluxio#18004 change-id: cid-705e7c2d1eb77591400eeddf82d3e3aff6bbdc74
### What changes are proposed in this pull request? Remove copyTo/FromLocal commands ### Why are the changes needed? Remove copyTo/FromLocal commands. ### Does this PR introduce any user facing changes? NA pr-link: Alluxio#18003 change-id: cid-7a2832c9c4953edfa06716237672a45d715c4154
### What changes are proposed in this pull request? Lacking of COS's Unit Test. So I have implemented COS's UT compared with OSS's UT, and improve coverage nearly to 80%. <img width="621" alt="截屏2023-07-17 11 14 01" src="https://github.com/Alluxio/alluxio/assets/57146148/db5f20ae-806e-4508-be60-adc295ccb73a"> ### Why are the changes needed? Unit test is important to alluxio. ### Does this PR introduce any user facing changes? No. pr-link: Alluxio#17782 change-id: cid-c69e4264bacccefc23bdaef399c9c660e2e1534e
### What changes are proposed in this pull request? [DOCFIX] Add Doc of running alluxio with Tensorflow ### Why are the changes needed? Now dora branch is lack of docs about how to run alluxio with Tensorflow. This PR provides a doc about running Alluxio with Tensorflow ### Does this PR introduce any user facing changes? No pr-link: Alluxio#18011 change-id: cid-c9c8950f57f7f54a93d83415f2dfdac97c5b405a
directly call `fs cp` instead of the deleted `copyToLocal` and `copyFromLocal` pr-link: Alluxio#18013 change-id: cid-30a30d0f76dd64b30b750c98e50383e0f6eaf29c
### What changes are proposed in this pull request? Remove MetaMasterConfigClient initialization in the client. ### Why are the changes needed? Remove MetaMasterConfigClient initialization in the client. ### Does this PR introduce any user facing changes? NA pr-link: Alluxio#18012 change-id: cid-3a82b8c04ad0d3dbca77cf35ee8e0b2bf8832b8c
### What changes are proposed in this pull request? Prepare the worker for accessing multiple UFS's as the client requests ### Why are the changes needed? Allow worker to access arbitrary UFS's in the future. ### Does this PR introduce any user facing changes? No. pr-link: Alluxio#17839 change-id: cid-569ed16a888f2a576bdfd69a22cb587989ff3559
Additional `exec`,`fs`,`init`,`info` commands to golang CLI as part of Alluxio#17522 `bin/alluxio-bash runUfsIOTest` -> `bin/alluxio exec ufsIOTest` `bin/alluxio-bash fs chgrp` -> `bin/alluxio fs chgrp` `bin/alluxio-bash fs chmod` -> `bin/alluxio fs chmod` `bin/alluxio-bash fs chown` -> `bin/alluxio fs chown` `bin/alluxio-bash fsadmin metrics clear` -> `bin/alluxio init clearMetrics` `bin/alluxio-bash clearCache` -> `bin/alluxio init clearOSCache` `bin/alluxio-bash validateConf` -> `bin/alluxio init validate --type conf` `bin/alluxio-bash validateEnv` -> `bin/alluxio init validate --type env` `bin/alluxio-bash fsadmin doctor` -> `bin/alluxio info doctor` `bin/alluxio-bash fsadmin nodes` -> `bin/alluxio info nodes` pr-link: Alluxio#18007 change-id: cid-fcbc6fc230a4a3b8802bee748585469b2cd35309
### What changes are proposed in this pull request? Update main nav menu to 3 tiers Rename Basic Logging to Logging & update respective link paths Pull Glossary to level 1 ### Why are the changes needed? restructuring menu ### Does this PR introduce any user facing changes? webui pr-link: Alluxio#17986 change-id: cid-9d6ccd0b2a94f930b611adb46a4ace88a80acdc4
### What changes are proposed in this pull request? Remove needsync commands. ### Why are the changes needed? Remove needsync commands. ### Does this PR introduce any user facing changes? NA pr-link: Alluxio#17962 change-id: cid-38d2f6c311c5b56ddbd16d34ea8d8c2ac344efd9
### What changes are proposed in this pull request? Store workerinfo as json format on etcd for EtcdMembershipManager. ### Why are the changes needed? For cross-language worker membership retrieval. ### Does this PR introduce any user facing changes? No. pr-link: Alluxio#17959 change-id: cid-f153d7d2033568a26c9f3d35b1c3106e2da2957c
### What changes are proposed in this pull request? Disable proxy and job services to start by default ### Why are the changes needed? Proxy (standalone), job services are deprecated in 3.0 ### Does this PR introduce any user facing changes? When launching Alluxio, by default no job service or proxy processes will be started pr-link: Alluxio#17993 change-id: cid-7de67e836fffe6b91a571c46775bb70d3d41d8fa
- add `metadata load` command - remove `init clearMetrics` because it definitely will not work as it calls a removed BlockClient rpc - fix error in `init validate` pr-link: Alluxio#18016 change-id: cid-fc4803e9eb70253f6f3c4a1fafe959c1d0a02c59
### What changes are proposed in this pull request? Please outline the changes and how this PR fixes the issue. ### Why are the changes needed? Please clarify why the changes are needed. For instance, 1. If you propose a new API, clarify the use case for a new API. 2. If you fix a bug, describe the bug. ### Does this PR introduce any user facing changes? Please list the user-facing changes introduced by your change, including 1. change in user-facing APIs 2. addition or removal of property keys 3. webui pr-link: Alluxio#18024 change-id: cid-4f853a31a2d8b190c7e7a02df01e7b2c6a193101
### What changes are proposed in this pull request? Please outline the changes and how this PR fixes the issue. ### Why are the changes needed? Please clarify why the changes are needed. For instance, 1. If you propose a new API, clarify the use case for a new API. 2. If you fix a bug, describe the bug. ### Does this PR introduce any user facing changes? Please list the user-facing changes introduced by your change, including 1. change in user-facing APIs 2. addition or removal of property keys 3. webui pr-link: Alluxio#18027 change-id: cid-e1d2500c2d5116ecbeb109275768a8eb029efa0f
### What changes are proposed in this pull request? Remove loadMetadataCommand. ### Why are the changes needed? Remove loadMetadataCommand. It is not used in new arch. ### Does this PR introduce any user facing changes? NA pr-link: Alluxio#18020 change-id: cid-58a575037eab3040a0617015aed0b8eed33e1921
loadMetadataCommand was deleted in Alluxio#18020 so remove the go cli code calling it. users should be using the load command from the job service with the --metadata-only flag to perform the same action, to be restored in a subsequent PR pr-link: Alluxio#18030 change-id: cid-b209c60651bf7045c7065e291543179e3f967b76
### What changes are proposed in this pull request? Update headers so that once it's clicked in the right side menu, it redirects to its section, instead of external aws link ### Why are the changes needed? menu should redirect to section ### Does this PR introduce any user facing changes? n/a pr-link: Alluxio#18028 change-id: cid-9020690c793a43b829db56e6cbd1a0b891392a34
follow up to Alluxio#17993 on the stop process bash script side. golang code doesn't have an issue because it has a single source of truth pr-link: Alluxio#18018 change-id: cid-ae89f6d558bfbdc206422a4ecb05c8f3ba549edc
in the golang cli build script, check that - `go` is accessible - go version is 1.18+ - run `go mod tidy` which should be a no-op command normally, but if it's the first time building, it will download some native packages also update the compile requirements in docs pr-link: Alluxio#18031 change-id: cid-7efc8c8cc4c470b663bbdf267ce7b5823a58d5c9
### What changes are proposed in this pull request? I have created a new file named DoraLsCommandIntegrationTest and it can test the 'ls' command whether it can correctly run.Also, I revised the base class that can create byte files in alluxio.What's more, I have added a new test named DoraMkdirCommandIntegrationTest which it can test cli 'mkdir'. ### Why are the changes needed? 1、New Test does not have a function that can create file in alluxio. 2、Add a IntegrationTest. ### Does this PR introduce any user facing changes? No. pr-link: Alluxio#18325 change-id: cid-067ec742deab39af294d089dec932b69c0362682
### What changes are proposed in this pull request? Extract the logic to create `UfsBaseFileSystem` into `FileSystemContext`, for possible extension. This change is functionally a refactor that changes nothing. pr-link: Alluxio#18333 change-id: cid-105be187f763f83680f64bd963646ce32eb58493
### What changes are proposed in this pull request? resolves Alluxio#18324 Disclaimer: I might have monkey-typed this fix but I still do not know anything about buffer ref counting. This fix does NOT make me the owner of this state machine. pr-link: Alluxio#18323 change-id: cid-eb5bde353c08d3d9bdd39da5b9caf13681bae495
### What changes are proposed in this pull request? Remove invalid LeaderCommandIntegrationTest.java, the command is deleted. ### Why are the changes needed? improve code quality. ### Does this PR introduce any user facing changes? no. pr-link: Alluxio#18287 change-id: cid-43a00b7ec27735262bfa45b7b37331389d82a881
### What changes are proposed in this pull request? Remove NeedsSyncCommandIntegrationTest, which command is deleted. ### Why are the changes needed? Improve code quality. ### Does this PR introduce any user facing changes? No. pr-link: Alluxio#18288 change-id: cid-0c6040e1804065067032384e6046c0d47ccf8312
### What changes are proposed in this pull request? HelpCommandIntegrationTest works now. ### Why are the changes needed? Improve code quality. ### Does this PR introduce any user facing changes? No. pr-link: Alluxio#18293 change-id: cid-ccb04b9ede68fae2342d6a25e443b85ccd8f990c
### What changes are proposed in this pull request? Add rust spdk library and design structures for cache. ### Why are the changes needed? For NVMe SSD cache requirement. ### Does this PR introduce any user facing changes? No. ### Benchmark Result <table style="text-align:center;"> <tbody> <tr> <th rowspan="2">block size</th> <th colspan="3">time consumption</th> <th rowspan="2">throughput</th> </tr> <tr> <th>millisecond</th> <th>microsecond</th> <th>nanosecond</th> </tr> <tr> <td>512B</td> <td>10ms</td> <td>10194us</td> <td>10194421ns</td> <td>0.048MB/s</td> </tr> <tr> <td>1KB</td> <td>13ms</td> <td>13472us</td> <td>13472304ns</td> <td>0.072MB/s</td> </tr> <tr> <td>4KB</td> <td>9ms</td> <td>9242us</td> <td>9242424ns</td> <td>0.423MB/s</td> </tr> <tr> <td>16KB</td> <td>8ms</td> <td>8585us</td> <td>8585361ns</td> <td>1.820MB/s</td> </tr> <tr> <td>64KB</td> <td>11ms</td> <td>11030us</td> <td>11030930ns</td> <td>5.666MB/s</td> </tr> <tr> <td>256KB</td> <td>15ms</td> <td>15962us</td> <td>15962353ns</td> <td>15.662MB/s</td> </tr> <tr> <td>1MB</td> <td>13ms</td> <td>13059us</td> <td>13059113ns</td> <td>76.575MB/s</td> </tr> <tr> <td><b>4MB</b></td> <td><b>28ms</b></td> <td><b>28930us</b></td> <td><b>28930274ns</b></td> <td><b>138.264MB/s</b></td> </tr> <tr> <td><b>16MB</b></td> <td><b>79ms</b></td> <td><b>79423us</b></td> <td><b>79423390ns</b></td> <td><b>201.452MB/s</b></td> </tr> <tr> <td>64MB</td> <td>308ms</td> <td>308856us</td> <td>308856745ns</td> <td>207.216MB/s</td> </tr> <tr> <td>256MB</td> <td>1218ms</td> <td>1218323us</td> <td>1218323252ns</td> <td>210.125MB/s</td> </tr> <tr> <td>1GB</td> <td>5056ms</td> <td>5056277us</td> <td>5056277683ns</td> <td>202.521MB/s</td> </tr> </tbody> </table> pr-link: Alluxio#18231 change-id: cid-92ee56270bc5bb237ecc0df78c2974e1051bc543
### What changes are proposed in this pull request? Update load job to adopt multi replicas ### Why are the changes needed? part of PR to support loading multi replicas ### Does this PR introduce any user facing changes? new load option `replicas` pr-link: Alluxio#18320 change-id: cid-7d01ca19a28faf4c7773cbf5c355dd6cf070728f
### What changes are proposed in this pull request? Fix bug involved by Alluxio#18332. Alter the time judgment logic for judging whether stale client channels are inactive. Using the LocaTime object cannot correctly judge whether a channel client is inactive, because a LocalTime plus or minus time offset only changes the hour, minute, second attribute value, and It will not affect the date, you actually need to use the LocalDateTime object instead. ### Why are the changes needed? Please clarify why the changes are needed. For instance, In the code, the LocaTime class is used to determine that a client channel is inactive. The LocalTime object adds or subtracts the time offset. It only changes the hour, minute and second attribute value and does not affect the date. In fact, you need to use the LocalDateTime object. In other words, the three-day certification cycle judgment should be based on date and time, not just time. ### Does this PR introduce any user facing changes? Please list the user-facing changes introduced by your change, including None pr-link: Alluxio#18340 change-id: cid-5b69e0c87d3bad8556ae27d491f3e0dc567378b9
### What changes are proposed in this pull request? Fix a bug when file size < 1 page, alluxio considers all pages are cached no matter if it really caches it or not. ### Why are the changes needed? Bug fixing ### Does this PR introduce any user facing changes? N/A pr-link: Alluxio#18347 change-id: cid-da4bdce6615e4b1d9777a98ab335bf36e503d102
### What changes are proposed in this pull request? Add some metrics and change the registry to expose the metrics more accurately. And add the call point of the capacity-related metrics. ### Why are the changes needed? Use default registry will expose all the metrics and some of them are not meaningful for all components. ### Does this PR introduce any user facing changes? no pr-link: Alluxio#18350 change-id: cid-646ee1f3e41171d2147df29fccaf5a3476b66033
### What changes are proposed in this pull request? Please outline the changes and how this PR fixes the issue. ### Why are the changes needed? Please clarify why the changes are needed. For instance, 1. If you propose a new API, clarify the use case for a new API. 2. If you fix a bug, describe the bug. ### Does this PR introduce any user facing changes? Please list the user-facing changes introduced by your change, including 1. change in user-facing APIs 2. addition or removal of property keys 3. webui pr-link: Alluxio#18352 change-id: cid-b5f5b695a1c32a65ff3b303cb8227889bee5d81c
### What changes are proposed in this pull request? 1. If an object is created inside `PagedDoraWorker` constructor, extract that creation to before the constructor and use dependency injection to inject it to the worker object. This doesn't change any creation logic, just a refactor to better adapt to dependency injection flavor. 2. There is a circular dependency between `MetaManager` and `PagedDoraWorker`. This change removes that cycle. Now we create one, then create the other. Before, we create one and in the construction, we let `this` ref escape and create the other. Some methods are either moved or changed to `static`. 3. By adapting to dependency injection, we rely on `UfsManager` interface instead of `DoraUfsManager` implementation. Some method signatures are extracted to the interface level. 4. A few other small refactors to get rid of some downcasts and variable scope changes. Reasons are attached in comments on this PR. ### Why are the changes needed? Improve code quality and extensibility. ### Does this PR introduce any user facing changes? No. All refactor changes are small and equivalent to existing code. So nothing should break. pr-link: Alluxio#18181 change-id: cid-4f9e9bc770b12253188bb541dd456ef3cd889c2b
### What changes are proposed in this pull request? Add one `RemoteOnlyPolicy` implementation for testing. This is usable for reading all files from remote nodes, rather than the local node itself. Generally, this policy keeps a thread-safe list including all workers. When one thread reads, the round-robin list returns all available workers after a roulette (putting the first element in the list to the end) , and choose the first remote worker to read from. We also added available options of `--mode` in StressWorkerBench to use the new remote only policy. ### Why are the changes needed? The new policy is for internal testing where all test clients find the remote worker for IO. This policy should not be used in real deployments because if all clients find remote worker, overall throughput can be quite low due to bandwidth restrictions. ### Does this PR introduce any user facing changes? No, RemoteOnlyPolicy should only be used in internal testing pr-link: Alluxio#18273 change-id: cid-ce534382a1ebd86230296475f4e2d3c6dd862033
Fix the bug that command line doesn't support regx file filter pr-link: Alluxio#18359 change-id: cid-c2ec9a5394a1ad776e31251a9c113f4115cb651d
### What changes are proposed in this pull request? Alluxio#18357 ### Why are the changes needed? mtime display error when ufs is hdfs ![企业微信截图_9ff2cbaf-4e24-4cbc-ae11-6a5ace7812f1](https://github.com/Alluxio/alluxio/assets/800042/606cbcb0-b07f-4f91-8919-b1fe1b9e6dcc) after this commit: ![企业微信截图_8c7ee012-851c-425e-a4c1-d22f0d39984b](https://github.com/Alluxio/alluxio/assets/800042/e05bfed5-c929-43c1-a633-6b6dee3f10ef) ### Does this PR introduce any user facing changes? Please list the user-facing changes introduced by your change, including 1. change in user-facing APIs. no 2. addition or removal of property keys. no 3. webui. no pr-link: Alluxio#18358 change-id: cid-54cc12a64383e77e5cd52b7ac89976714a93612b
Similar to #16132, but in this pr, we don't need to rely on any master API. I believe that this PR offers a relatively good solution without the need to refactor the S3 Proxy. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What changes are proposed in this pull request?
Optimize listing objects for s3 api.
Why are the changes needed?
The listObjects API of Alluxio S3 Proxy has been plagued by serious performance issues. The issue can be described as follows:
Assuming we have two directories under the
s3
bucket, namelya/
andaa/
. Thea/
directory contains one file, while theaa/
directory has one billion files. When trying to retrieve the files under thea/
directory using the commandcurl localhost:29998/s3?prefix=a&max-keys=1000
, the S3 Proxy ends up listing all one billion files underaa/
as well, storing them in memory, and then filtering the results to return to the user. This results in a severe performance bottleneck and could potentially lead to Out of Memory (OOM) errors.From my discussions with the community, it's evident that unless this problem is addressed, it will be challenging to effectively use the S3 Proxy. This issue has been raised in the past(both of Alluxio2.x and Alluxio3.x), but for some unknown reason, it has been lingering without a resolution.
Perhaps the listObjects API will be refactored in the future, but for now, there seems to be no straightforward solution for users to address the performance problem. I believe this issue should not be ignored and that there should be some means to address it. Therefore, I am providing a lightweight patch to improve the performance of the S3 Proxy's listObjects API. Of course, it would be ideal if this patch could be merged.
Does this PR introduce any user facing changes?
Please list the user-facing changes introduced by your change, including