You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2023/11/14 15:56:09 UTC

(incubator-opendal) branch refactor-list created (now da8d22ce9)

This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a change to branch refactor-list
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git


      at da8d22ce9 Fix

This branch includes the following new commits:

     new 438b0db3d Rename API to list
     new e4d4dc2ca Rename pager to lister
     new b54e68ca7 Rename pager to lister
     new da8d22ce9 Fix

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(incubator-opendal) 03/04: Rename pager to lister

Posted by xu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch refactor-list
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git

commit b54e68ca739beed41b5dea1c9781d22988eb5469
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Tue Nov 14 23:54:29 2023 +0800

    Rename pager to lister
    
    Signed-off-by: Xuanwo <gi...@xuanwo.io>
---
 core/src/docs/internals/accessor.rs           | 12 ++---
 core/src/docs/upgrade.md                      | 24 +++++-----
 core/src/layers/async_backtrace.rs            |  8 ++--
 core/src/layers/await_tree.rs                 |  8 ++--
 core/src/layers/blocking.rs                   | 14 +++---
 core/src/layers/chaos.rs                      |  8 ++--
 core/src/layers/complete.rs                   | 60 +++++++++++------------
 core/src/layers/concurrent_limit.rs           |  8 ++--
 core/src/layers/error_context.rs              |  8 ++--
 core/src/layers/immutable_index.rs            |  8 ++--
 core/src/layers/logging.rs                    | 22 ++++-----
 core/src/layers/madsim.rs                     | 12 ++---
 core/src/layers/metrics.rs                    |  8 ++--
 core/src/layers/minitrace.rs                  |  8 ++--
 core/src/layers/oteltrace.rs                  |  8 ++--
 core/src/layers/prometheus.rs                 |  8 ++--
 core/src/layers/prometheus_client.rs          |  8 ++--
 core/src/layers/retry.rs                      | 28 +++++------
 core/src/layers/throttle.rs                   |  8 ++--
 core/src/layers/timeout.rs                    |  8 ++--
 core/src/layers/tracing.rs                    |  8 ++--
 core/src/layers/type_eraser.rs                | 10 ++--
 core/src/raw/accessor.rs                      | 28 +++++------
 core/src/raw/adapters/kv/backend.rs           | 24 +++++-----
 core/src/raw/adapters/typed_kv/backend.rs     | 24 +++++-----
 core/src/raw/layer.rs                         | 28 +++++------
 core/src/raw/oio/list/api.rs                  |  4 +-
 core/src/raw/oio/list/into_flat_page.rs       | 68 +++++++++++++--------------
 core/src/raw/oio/list/into_hierarchy_pager.rs | 38 +++++++--------
 core/src/raw/oio/list/mod.rs                  |  6 +--
 core/src/raw/oio/read/api.rs                  |  2 +-
 core/src/raw/oio/read/range_read.rs           |  4 +-
 core/src/services/alluxio/backend.rs          | 10 ++--
 core/src/services/alluxio/lister.rs           |  8 ++--
 core/src/services/alluxio/mod.rs              |  2 +-
 core/src/services/azblob/backend.rs           | 10 ++--
 core/src/services/azblob/lister.rs            |  6 +--
 core/src/services/azblob/mod.rs               |  2 +-
 core/src/services/azdls/backend.rs            | 10 ++--
 core/src/services/azdls/lister.rs             |  6 +--
 core/src/services/azdls/mod.rs                |  2 +-
 core/src/services/azfile/backend.rs           | 10 ++--
 core/src/services/azfile/lister.rs            |  6 +--
 core/src/services/azfile/mod.rs               |  2 +-
 core/src/services/cos/backend.rs              | 10 ++--
 core/src/services/cos/lister.rs               |  6 +--
 core/src/services/cos/mod.rs                  |  2 +-
 core/src/services/dbfs/backend.rs             | 10 ++--
 core/src/services/dbfs/lister.rs              |  6 +--
 core/src/services/dbfs/mod.rs                 |  2 +-
 core/src/services/dropbox/backend.rs          |  4 +-
 core/src/services/fs/backend.rs               | 14 +++---
 core/src/services/fs/lister.rs                |  8 ++--
 core/src/services/fs/mod.rs                   |  2 +-
 core/src/services/ftp/backend.rs              | 10 ++--
 core/src/services/ftp/lister.rs               |  6 +--
 core/src/services/ftp/mod.rs                  |  2 +-
 core/src/services/gcs/backend.rs              | 10 ++--
 core/src/services/gcs/lister.rs               |  8 ++--
 core/src/services/gcs/mod.rs                  |  2 +-
 core/src/services/gdrive/backend.rs           | 10 ++--
 core/src/services/gdrive/lister.rs            |  6 +--
 core/src/services/gdrive/mod.rs               |  2 +-
 core/src/services/ghac/backend.rs             |  4 +-
 core/src/services/hdfs/backend.rs             | 14 +++---
 core/src/services/hdfs/lister.rs              |  8 ++--
 core/src/services/hdfs/mod.rs                 |  2 +-
 core/src/services/http/backend.rs             |  4 +-
 core/src/services/ipfs/backend.rs             |  6 +--
 core/src/services/ipmfs/backend.rs            | 10 ++--
 core/src/services/ipmfs/lister.rs             |  6 +--
 core/src/services/ipmfs/mod.rs                |  2 +-
 core/src/services/obs/backend.rs              | 10 ++--
 core/src/services/obs/lister.rs               |  6 +--
 core/src/services/obs/mod.rs                  |  2 +-
 core/src/services/onedrive/backend.rs         | 13 ++---
 core/src/services/onedrive/lister.rs          |  8 ++--
 core/src/services/onedrive/mod.rs             |  2 +-
 core/src/services/oss/backend.rs              | 10 ++--
 core/src/services/oss/lister.rs               |  6 +--
 core/src/services/oss/mod.rs                  |  2 +-
 core/src/services/s3/backend.rs               | 10 ++--
 core/src/services/s3/lister.rs                |  6 +--
 core/src/services/s3/mod.rs                   |  2 +-
 core/src/services/sftp/backend.rs             | 10 ++--
 core/src/services/sftp/lister.rs              |  8 ++--
 core/src/services/sftp/mod.rs                 |  2 +-
 core/src/services/supabase/backend.rs         |  6 +--
 core/src/services/swift/backend.rs            | 10 ++--
 core/src/services/swift/lister.rs             |  6 +--
 core/src/services/swift/mod.rs                |  2 +-
 core/src/services/vercel_artifacts/backend.rs |  4 +-
 core/src/services/webdav/backend.rs           | 12 ++---
 core/src/services/webdav/lister.rs            |  6 +--
 core/src/services/webdav/mod.rs               |  2 +-
 core/src/services/webhdfs/backend.rs          | 16 +++----
 core/src/services/webhdfs/lister.rs           |  8 ++--
 core/src/services/webhdfs/mod.rs              |  2 +-
 core/src/types/list.rs                        | 32 ++++++-------
 99 files changed, 487 insertions(+), 486 deletions(-)

diff --git a/core/src/docs/internals/accessor.rs b/core/src/docs/internals/accessor.rs
index bb3fc75b3..667e63ffc 100644
--- a/core/src/docs/internals/accessor.rs
+++ b/core/src/docs/internals/accessor.rs
@@ -31,8 +31,8 @@
 //! pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
 //!     type Reader: oio::Read;                 // --+
 //!     type BlockingReader: oio::BlockingRead; //   +--> Associated Type
-//!     type Pager: oio::Page;                  //   +
-//!     type BlockingPager: oio::BlockingPage;  // --+
+//!     type Lister: oio::Page;                  //   +
+//!     type BlockingLister: oio::BlockingPage;  // --+
 //!
 //!     // APIs
 //!     async fn hello(&self, path: &str, args: OpCreate) -> Result<RpCreate>;
@@ -102,8 +102,8 @@
 //!
 //! - `Reader`: reader returned by `read` operation.
 //! - `BlockingReader`: reader returned by `blocking_read` operation.
-//! - `Pager`: pager returned by `scan` or `list` operation.
-//! - `BlockingPager`: pager returned by `blocking_scan` or `blocking_list` operation.
+//! - `Lister`: lister returned by `scan` or `list` operation.
+//! - `BlockingLister`: lister returned by `blocking_scan` or `blocking_list` operation.
 //!
 //! Implementer of `Accessor` should take care the following things:
 //!
@@ -290,8 +290,8 @@
 //!     type BlockingReader = ();
 //!     type Writer = ();
 //!     type BlockingWriter = ();
-//!     type Pager = ();
-//!     type BlockingPager = ();
+//!     type Lister = ();
+//!     type BlockingLister = ();
 //!
 //!     fn metadata(&self) -> AccessorInfo {
 //!         let mut am = AccessorInfo::default();
diff --git a/core/src/docs/upgrade.md b/core/src/docs/upgrade.md
index f8bbece96..3c6657d7a 100644
--- a/core/src/docs/upgrade.md
+++ b/core/src/docs/upgrade.md
@@ -356,42 +356,42 @@ Please visit `Object::metadata()`'s example for more details.
 
 # Upgrade to v0.27
 
-In v0.27, we refactored our `list` related logic and added `scan` support. So make `Pager` and `BlockingPager` associated types in `Accessor` too!
+In v0.27, we refactored our `list` related logic and added `scan` support. So make `Lister` and `BlockingLister` associated types in `Accessor` too!
 
 ```diff
 pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
     type Reader: output::Read;
     type BlockingReader: output::BlockingRead;
-+    type Pager: output::Page;
-+    type BlockingPager: output::BlockingPage;
++    type Lister: output::Page;
++    type BlockingLister: output::BlockingPage;
 }
 ```
 
 ## User defined layers
 
-Due to this change, all layers implementation should be changed. If there is not changed over pager, they can by changed like the following:
+Due to this change, all layers implementation should be changed. If there is not changed over lister, they can by changed like the following:
 
 ```diff
 impl<A: Accessor> LayeredAccessor for MyAccessor<A> {
     type Inner = A;
     type Reader = MyReader<A::Reader>;
     type BlockingReader = MyReader<A::BlockingReader>;
-+    type Pager = A::Pager;
-+    type BlockingPager = A::BlockingPager;
++    type Lister = A::Lister;
++    type BlockingLister = A::BlockingLister;
 
-+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
++    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
 +        self.inner.list(path, args).await
 +    }
 
-+    async fn scan(&self, path: &str, args: OpScan) -> Result<(RpScan, Self::Pager)> {
++    async fn scan(&self, path: &str, args: OpScan) -> Result<(RpScan, Self::Lister)> {
 +        self.inner.scan(path, args).await
 +    }
 
-+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
++    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
 +        self.inner.blocking_list(path, args)
 +    }
 
-+    fn blocking_scan(&self, path: &str, args: OpScan) -> Result<(RpScan, Self::BlockingPager)> {
++    fn blocking_scan(&self, path: &str, args: OpScan) -> Result<(RpScan, Self::BlockingLister)> {
 +        self.inner.blocking_scan(path, args)
 +    }
 }
@@ -568,11 +568,11 @@ Since v0.21, we will return a reply struct for different operations called `RpWr
 
 ## ObjectList and Page
 
-Since v0.21, `Accessor` will return `Pager` for `List`:
+Since v0.21, `Accessor` will return `Lister` for `List`:
 
 ```diff
 - async fn list(&self, path: &str, args: OpList) -> Result<ObjectStreamer>
-+ async fn list(&self, path: &str, args: OpList) -> Result<(RpList, output::Pager)>
++ async fn list(&self, path: &str, args: OpList) -> Result<(RpList, output::Lister)>
 ```
 
 And `Object` will return an `ObjectLister` which is built upon `Page`:
diff --git a/core/src/layers/async_backtrace.rs b/core/src/layers/async_backtrace.rs
index 6fc5d3a1a..cd363432e 100644
--- a/core/src/layers/async_backtrace.rs
+++ b/core/src/layers/async_backtrace.rs
@@ -65,8 +65,8 @@ impl<A: Accessor> LayeredAccessor for AsyncBacktraceAccessor<A> {
     type BlockingReader = A::BlockingReader;
     type Writer = A::Writer;
     type BlockingWriter = A::BlockingWriter;
-    type Pager = A::Pager;
-    type BlockingPager = A::BlockingPager;
+    type Lister = A::Lister;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -103,7 +103,7 @@ impl<A: Accessor> LayeredAccessor for AsyncBacktraceAccessor<A> {
     }
 
     #[async_backtrace::framed]
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner.list(path, args).await
     }
 
@@ -125,7 +125,7 @@ impl<A: Accessor> LayeredAccessor for AsyncBacktraceAccessor<A> {
         self.inner.blocking_write(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner.blocking_list(path, args)
     }
 }
diff --git a/core/src/layers/await_tree.rs b/core/src/layers/await_tree.rs
index dc50656f6..8d7755d2c 100644
--- a/core/src/layers/await_tree.rs
+++ b/core/src/layers/await_tree.rs
@@ -73,8 +73,8 @@ impl<A: Accessor> LayeredAccessor for AwaitTreeAccessor<A> {
     type BlockingReader = A::BlockingReader;
     type Writer = A::Writer;
     type BlockingWriter = A::BlockingWriter;
-    type Pager = A::Pager;
-    type BlockingPager = A::BlockingPager;
+    type Lister = A::Lister;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -122,7 +122,7 @@ impl<A: Accessor> LayeredAccessor for AwaitTreeAccessor<A> {
             .await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner
             .list(path, args)
             .instrument_await(format!("opendal::{}", Operation::List))
@@ -151,7 +151,7 @@ impl<A: Accessor> LayeredAccessor for AwaitTreeAccessor<A> {
         self.inner.blocking_write(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner.blocking_list(path, args)
     }
 }
diff --git a/core/src/layers/blocking.rs b/core/src/layers/blocking.rs
index dc69dde94..67281ba25 100644
--- a/core/src/layers/blocking.rs
+++ b/core/src/layers/blocking.rs
@@ -177,8 +177,8 @@ impl<A: Accessor> LayeredAccessor for BlockingAccessor<A> {
     type BlockingReader = BlockingWrapper<A::Reader>;
     type Writer = A::Writer;
     type BlockingWriter = BlockingWrapper<A::Writer>;
-    type Pager = A::Pager;
-    type BlockingPager = BlockingWrapper<A::Pager>;
+    type Lister = A::Lister;
+    type BlockingLister = BlockingWrapper<A::Lister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -218,7 +218,7 @@ impl<A: Accessor> LayeredAccessor for BlockingAccessor<A> {
         self.inner.delete(path, args).await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner.list(path, args).await
     }
 
@@ -267,11 +267,11 @@ impl<A: Accessor> LayeredAccessor for BlockingAccessor<A> {
         self.handle.block_on(self.inner.delete(path, args))
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.handle.block_on(async {
-            let (rp, pager) = self.inner.list(path, args).await?;
-            let blocking_pager = Self::BlockingPager::new(self.handle.clone(), pager);
-            Ok((rp, blocking_pager))
+            let (rp, lister) = self.inner.list(path, args).await?;
+            let blocking_lister = Self::BlockingLister::new(self.handle.clone(), lister);
+            Ok((rp, blocking_lister))
         })
     }
 }
diff --git a/core/src/layers/chaos.rs b/core/src/layers/chaos.rs
index 02d7fb9a5..08ec4dee2 100644
--- a/core/src/layers/chaos.rs
+++ b/core/src/layers/chaos.rs
@@ -106,8 +106,8 @@ impl<A: Accessor> LayeredAccessor for ChaosAccessor<A> {
     type BlockingReader = ChaosReader<A::BlockingReader>;
     type Writer = A::Writer;
     type BlockingWriter = A::BlockingWriter;
-    type Pager = A::Pager;
-    type BlockingPager = A::BlockingPager;
+    type Lister = A::Lister;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -134,11 +134,11 @@ impl<A: Accessor> LayeredAccessor for ChaosAccessor<A> {
         self.inner.blocking_write(path, args)
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner.list(path, args).await
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner.blocking_list(path, args)
     }
 }
diff --git a/core/src/layers/complete.rs b/core/src/layers/complete.rs
index 31aeb6238..7fd2037dc 100644
--- a/core/src/layers/complete.rs
+++ b/core/src/layers/complete.rs
@@ -28,8 +28,8 @@ use async_trait::async_trait;
 use bytes::Bytes;
 
 use crate::raw::oio::Entry;
-use crate::raw::oio::FlatPager;
-use crate::raw::oio::HierarchyPager;
+use crate::raw::oio::FlatLister;
+use crate::raw::oio::HierarchyLister;
 use crate::raw::oio::RangeReader;
 use crate::raw::oio::StreamableReader;
 use crate::raw::oio::{into_flat_page, FileReader};
@@ -101,11 +101,11 @@ use crate::*;
 /// them. CompleteLayer will add those capabilities in a zero cost way.
 ///
 /// Underlying services will return [`Capability`] to indicate the
-/// features that returning pagers support.
+/// features that returning listers support.
 ///
 /// - If both `list_without_recursive` and `list_with_recursive`, return directly.
-/// - If only `list_with_recursive`, with [`oio::to_flat_pager`].
-/// - if only `list_without_recursive`, with [`oio::to_hierarchy_pager`].
+/// - If only `list_with_recursive`, with [`oio::to_flat_lister`].
+/// - if only `list_without_recursive`, with [`oio::to_hierarchy_lister`].
 /// - If neither not supported, something must be wrong for `list` is true.
 ///
 /// ## Capability Check
@@ -224,7 +224,7 @@ impl<A: Accessor> CompleteAccessor<A> {
         &self,
         path: &str,
         args: OpList,
-    ) -> Result<(RpList, CompletePager<A, A::Pager>)> {
+    ) -> Result<(RpList, CompleteLister<A, A::Lister>)> {
         let cap = self.meta.full_capability();
         if !cap.list {
             return Err(self.new_unsupported_error(Operation::List));
@@ -242,7 +242,7 @@ impl<A: Accessor> CompleteAccessor<A> {
             // - If recursive is false while services can list_without_recursive
             (_, true, true) | (true, true, _) | (false, _, true) => {
                 let (rp, p) = self.inner.list(path, args).await?;
-                Ok((rp, CompletePager::AlreadyComplete(p)))
+                Ok((rp, CompleteLister::AlreadyComplete(p)))
             }
             // If services can't list_with_recursive nor list_without_recursive.
             //
@@ -251,13 +251,13 @@ impl<A: Accessor> CompleteAccessor<A> {
             // If recursive is true but service can't list_with_recursive
             (true, false, true) => {
                 let p = into_flat_page(self.inner.clone(), path, args.limit().unwrap_or(1000));
-                Ok((RpList::default(), CompletePager::NeedFlat(p)))
+                Ok((RpList::default(), CompleteLister::NeedFlat(p)))
             }
             // If recursive is false but service can't list_without_recursive
             (false, true, false) => {
                 let (_, p) = self.inner.list(path, args.with_recursive(true)).await?;
                 let p = into_hierarchy_page(p, path);
-                Ok((RpList::default(), CompletePager::NeedHierarchy(p)))
+                Ok((RpList::default(), CompleteLister::NeedHierarchy(p)))
             }
         }
     }
@@ -266,7 +266,7 @@ impl<A: Accessor> CompleteAccessor<A> {
         &self,
         path: &str,
         args: OpList,
-    ) -> Result<(RpList, CompletePager<A, A::BlockingPager>)> {
+    ) -> Result<(RpList, CompleteLister<A, A::BlockingLister>)> {
         let cap = self.meta.full_capability();
         if !cap.list {
             return Err(self.new_unsupported_error(Operation::BlockingList));
@@ -284,7 +284,7 @@ impl<A: Accessor> CompleteAccessor<A> {
             // - If recursive is false while services can list_without_recursive
             (_, true, true) | (true, true, _) | (false, _, true) => {
                 let (rp, p) = self.inner.blocking_list(path, args)?;
-                Ok((rp, CompletePager::AlreadyComplete(p)))
+                Ok((rp, CompleteLister::AlreadyComplete(p)))
             }
             // If services can't list_with_recursive nor list_without_recursive.
             //
@@ -293,14 +293,14 @@ impl<A: Accessor> CompleteAccessor<A> {
             // If recursive is true but service can't list_with_recursive
             (true, false, true) => {
                 let p = into_flat_page(self.inner.clone(), path, args.limit().unwrap_or(1000));
-                Ok((RpList::default(), CompletePager::NeedFlat(p)))
+                Ok((RpList::default(), CompleteLister::NeedFlat(p)))
             }
             // If recursive is false but service can't list_without_recursive
             (false, true, false) => {
                 let (_, p) = self.inner.blocking_list(path, args.with_recursive(true))?;
-                let p: HierarchyPager<<A as Accessor>::BlockingPager> =
+                let p: HierarchyLister<<A as Accessor>::BlockingLister> =
                     into_hierarchy_page(p, path);
-                Ok((RpList::default(), CompletePager::NeedHierarchy(p)))
+                Ok((RpList::default(), CompleteLister::NeedHierarchy(p)))
             }
         }
     }
@@ -316,8 +316,8 @@ impl<A: Accessor> LayeredAccessor for CompleteAccessor<A> {
         oio::ExactBufWriter<CompleteWriter<A::Writer>>,
     >;
     type BlockingWriter = CompleteWriter<A::BlockingWriter>;
-    type Pager = CompletePager<A, A::Pager>;
-    type BlockingPager = CompletePager<A, A::BlockingPager>;
+    type Lister = CompleteLister<A, A::Lister>;
+    type BlockingLister = CompleteLister<A, A::BlockingLister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -430,7 +430,7 @@ impl<A: Accessor> LayeredAccessor for CompleteAccessor<A> {
         self.inner().delete(path, args).await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let capability = self.meta.full_capability();
         if !capability.list {
             return Err(self.new_unsupported_error(Operation::List));
@@ -532,7 +532,7 @@ impl<A: Accessor> LayeredAccessor for CompleteAccessor<A> {
         self.inner().blocking_delete(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let capability = self.meta.full_capability();
         if !capability.list || !capability.blocking {
             return Err(self.new_unsupported_error(Operation::BlockingList));
@@ -627,20 +627,20 @@ where
     }
 }
 
-pub enum CompletePager<A: Accessor, P> {
+pub enum CompleteLister<A: Accessor, P> {
     AlreadyComplete(P),
-    NeedFlat(FlatPager<Arc<A>, P>),
-    NeedHierarchy(HierarchyPager<P>),
+    NeedFlat(FlatLister<Arc<A>, P>),
+    NeedHierarchy(HierarchyLister<P>),
 }
 
 #[async_trait]
-impl<A, P> oio::List for CompletePager<A, P>
+impl<A, P> oio::List for CompleteLister<A, P>
 where
-    A: Accessor<Pager = P>,
+    A: Accessor<Lister = P>,
     P: oio::List,
 {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>> {
-        use CompletePager::*;
+        use CompleteLister::*;
 
         match self {
             AlreadyComplete(p) => p.next().await,
@@ -650,13 +650,13 @@ where
     }
 }
 
-impl<A, P> oio::BlockingList for CompletePager<A, P>
+impl<A, P> oio::BlockingList for CompleteLister<A, P>
 where
-    A: Accessor<BlockingPager = P>,
+    A: Accessor<BlockingLister = P>,
     P: oio::BlockingList,
 {
     fn next(&mut self) -> Result<Option<Vec<Entry>>> {
-        use CompletePager::*;
+        use CompleteLister::*;
 
         match self {
             AlreadyComplete(p) => p.next(),
@@ -770,8 +770,8 @@ mod tests {
         type BlockingReader = oio::BlockingReader;
         type Writer = oio::Writer;
         type BlockingWriter = oio::BlockingWriter;
-        type Pager = oio::Pager;
-        type BlockingPager = oio::BlockingLister;
+        type Lister = oio::Lister;
+        type BlockingLister = oio::BlockingLister;
 
         fn info(&self) -> AccessorInfo {
             let mut info = AccessorInfo::default();
@@ -808,7 +808,7 @@ mod tests {
             Ok(RpDelete {})
         }
 
-        async fn list(&self, _: &str, _: OpList) -> Result<(RpList, Self::Pager)> {
+        async fn list(&self, _: &str, _: OpList) -> Result<(RpList, Self::Lister)> {
             Ok((RpList {}, Box::new(())))
         }
 
diff --git a/core/src/layers/concurrent_limit.rs b/core/src/layers/concurrent_limit.rs
index a9794960b..00f9a9a8c 100644
--- a/core/src/layers/concurrent_limit.rs
+++ b/core/src/layers/concurrent_limit.rs
@@ -86,8 +86,8 @@ impl<A: Accessor> LayeredAccessor for ConcurrentLimitAccessor<A> {
     type BlockingReader = ConcurrentLimitWrapper<A::BlockingReader>;
     type Writer = ConcurrentLimitWrapper<A::Writer>;
     type BlockingWriter = ConcurrentLimitWrapper<A::BlockingWriter>;
-    type Pager = ConcurrentLimitWrapper<A::Pager>;
-    type BlockingPager = ConcurrentLimitWrapper<A::BlockingPager>;
+    type Lister = ConcurrentLimitWrapper<A::Lister>;
+    type BlockingLister = ConcurrentLimitWrapper<A::BlockingLister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -151,7 +151,7 @@ impl<A: Accessor> LayeredAccessor for ConcurrentLimitAccessor<A> {
         self.inner.delete(path, args).await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let permit = self
             .semaphore
             .clone()
@@ -226,7 +226,7 @@ impl<A: Accessor> LayeredAccessor for ConcurrentLimitAccessor<A> {
         self.inner.blocking_delete(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let permit = self
             .semaphore
             .clone()
diff --git a/core/src/layers/error_context.rs b/core/src/layers/error_context.rs
index a48eb299a..3278d502c 100644
--- a/core/src/layers/error_context.rs
+++ b/core/src/layers/error_context.rs
@@ -70,8 +70,8 @@ impl<A: Accessor> LayeredAccessor for ErrorContextAccessor<A> {
     type BlockingReader = ErrorContextWrapper<A::BlockingReader>;
     type Writer = ErrorContextWrapper<A::Writer>;
     type BlockingWriter = ErrorContextWrapper<A::BlockingWriter>;
-    type Pager = ErrorContextWrapper<A::Pager>;
-    type BlockingPager = ErrorContextWrapper<A::BlockingPager>;
+    type Lister = ErrorContextWrapper<A::Lister>;
+    type BlockingLister = ErrorContextWrapper<A::BlockingLister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -183,7 +183,7 @@ impl<A: Accessor> LayeredAccessor for ErrorContextAccessor<A> {
             .await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner
             .list(path, args)
             .map_ok(|(rp, p)| {
@@ -320,7 +320,7 @@ impl<A: Accessor> LayeredAccessor for ErrorContextAccessor<A> {
         })
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner
             .blocking_list(path, args)
             .map(|(rp, os)| {
diff --git a/core/src/layers/immutable_index.rs b/core/src/layers/immutable_index.rs
index 65481401e..6137687b8 100644
--- a/core/src/layers/immutable_index.rs
+++ b/core/src/layers/immutable_index.rs
@@ -140,8 +140,8 @@ impl<A: Accessor> LayeredAccessor for ImmutableIndexAccessor<A> {
     type BlockingReader = A::BlockingReader;
     type Writer = A::Writer;
     type BlockingWriter = A::BlockingWriter;
-    type Pager = ImmutableDir;
-    type BlockingPager = ImmutableDir;
+    type Lister = ImmutableDir;
+    type BlockingLister = ImmutableDir;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -163,7 +163,7 @@ impl<A: Accessor> LayeredAccessor for ImmutableIndexAccessor<A> {
         self.inner.read(path, args).await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let mut path = path;
         if path == "/" {
             path = ""
@@ -190,7 +190,7 @@ impl<A: Accessor> LayeredAccessor for ImmutableIndexAccessor<A> {
         self.inner.blocking_write(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let mut path = path;
         if path == "/" {
             path = ""
diff --git a/core/src/layers/logging.rs b/core/src/layers/logging.rs
index 17bf4cf9a..b556cc7aa 100644
--- a/core/src/layers/logging.rs
+++ b/core/src/layers/logging.rs
@@ -218,8 +218,8 @@ impl<A: Accessor> LayeredAccessor for LoggingAccessor<A> {
     type BlockingReader = LoggingReader<A::BlockingReader>;
     type Writer = LoggingWriter<A::Writer>;
     type BlockingWriter = LoggingWriter<A::BlockingWriter>;
-    type Pager = LoggingPager<A::Pager>;
-    type BlockingPager = LoggingPager<A::BlockingPager>;
+    type Lister = LoggingLister<A::Lister>;
+    type BlockingLister = LoggingLister<A::BlockingLister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -525,7 +525,7 @@ impl<A: Accessor> LayeredAccessor for LoggingAccessor<A> {
             .await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         debug!(
             target: LOGGING_TARGET,
             "service={} operation={} path={} -> started",
@@ -545,7 +545,7 @@ impl<A: Accessor> LayeredAccessor for LoggingAccessor<A> {
                         Operation::List,
                         path
                     );
-                    let streamer = LoggingPager::new(self.ctx.clone(), path, Operation::List, v);
+                    let streamer = LoggingLister::new(self.ctx.clone(), path, Operation::List, v);
                     Ok((rp, streamer))
                 }
                 Err(err) => {
@@ -914,7 +914,7 @@ impl<A: Accessor> LayeredAccessor for LoggingAccessor<A> {
             })
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         debug!(
             target: LOGGING_TARGET,
             "service={} operation={} path={} -> started",
@@ -933,7 +933,7 @@ impl<A: Accessor> LayeredAccessor for LoggingAccessor<A> {
                     Operation::BlockingList,
                     path
                 );
-                let li = LoggingPager::new(self.ctx.clone(), path, Operation::BlockingList, v);
+                let li = LoggingLister::new(self.ctx.clone(), path, Operation::BlockingList, v);
                 (rp, li)
             })
             .map_err(|err| {
@@ -1431,7 +1431,7 @@ impl<W: oio::BlockingWrite> oio::BlockingWrite for LoggingWriter<W> {
     }
 }
 
-pub struct LoggingPager<P> {
+pub struct LoggingLister<P> {
     ctx: LoggingContext,
     path: String,
     op: Operation,
@@ -1440,7 +1440,7 @@ pub struct LoggingPager<P> {
     inner: P,
 }
 
-impl<P> LoggingPager<P> {
+impl<P> LoggingLister<P> {
     fn new(ctx: LoggingContext, path: &str, op: Operation, inner: P) -> Self {
         Self {
             ctx,
@@ -1452,7 +1452,7 @@ impl<P> LoggingPager<P> {
     }
 }
 
-impl<P> Drop for LoggingPager<P> {
+impl<P> Drop for LoggingLister<P> {
     fn drop(&mut self) {
         if self.finished {
             debug!(
@@ -1475,7 +1475,7 @@ impl<P> Drop for LoggingPager<P> {
 }
 
 #[async_trait]
-impl<P: oio::List> oio::List for LoggingPager<P> {
+impl<P: oio::List> oio::List for LoggingLister<P> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let res = self.inner.next().await;
 
@@ -1519,7 +1519,7 @@ impl<P: oio::List> oio::List for LoggingPager<P> {
     }
 }
 
-impl<P: oio::BlockingList> oio::BlockingList for LoggingPager<P> {
+impl<P: oio::BlockingList> oio::BlockingList for LoggingLister<P> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let res = self.inner.next();
 
diff --git a/core/src/layers/madsim.rs b/core/src/layers/madsim.rs
index a7c64df9f..9eb75da2d 100644
--- a/core/src/layers/madsim.rs
+++ b/core/src/layers/madsim.rs
@@ -149,8 +149,8 @@ impl LayeredAccessor for MadsimAccessor {
     type BlockingReader = ();
     type Writer = MadsimWriter;
     type BlockingWriter = ();
-    type Pager = MadsimPager;
-    type BlockingPager = ();
+    type Lister = MadsimLister;
+    type BlockingLister = ();
 
     fn inner(&self) -> &Self::Inner {
         &()
@@ -217,7 +217,7 @@ impl LayeredAccessor for MadsimAccessor {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> crate::Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> crate::Result<(RpList, Self::Lister)> {
         Err(Error::new(
             ErrorKind::Unsupported,
             "will be supported in the future",
@@ -250,7 +250,7 @@ impl LayeredAccessor for MadsimAccessor {
         &self,
         path: &str,
         args: OpList,
-    ) -> crate::Result<(RpList, Self::BlockingPager)> {
+    ) -> crate::Result<(RpList, Self::BlockingLister)> {
         Err(Error::new(
             ErrorKind::Unsupported,
             "will not be supported in MadsimLayer",
@@ -331,10 +331,10 @@ impl oio::Write for MadsimWriter {
     }
 }
 
-pub struct MadsimPager {}
+pub struct MadsimLister {}
 
 #[async_trait]
-impl oio::List for MadsimPager {
+impl oio::List for MadsimLister {
     async fn next(&mut self) -> crate::Result<Option<Vec<Entry>>> {
         Err(Error::new(
             ErrorKind::Unsupported,
diff --git a/core/src/layers/metrics.rs b/core/src/layers/metrics.rs
index bcbb72131..b9c67b54e 100644
--- a/core/src/layers/metrics.rs
+++ b/core/src/layers/metrics.rs
@@ -412,8 +412,8 @@ impl<A: Accessor> LayeredAccessor for MetricsAccessor<A> {
     type BlockingReader = MetricWrapper<A::BlockingReader>;
     type Writer = MetricWrapper<A::Writer>;
     type BlockingWriter = MetricWrapper<A::BlockingWriter>;
-    type Pager = A::Pager;
-    type BlockingPager = A::BlockingPager;
+    type Lister = A::Lister;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -547,7 +547,7 @@ impl<A: Accessor> LayeredAccessor for MetricsAccessor<A> {
             .await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.handle.requests_total_list.increment(1);
 
         let start = Instant::now();
@@ -709,7 +709,7 @@ impl<A: Accessor> LayeredAccessor for MetricsAccessor<A> {
         })
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.handle.requests_total_blocking_list.increment(1);
 
         let start = Instant::now();
diff --git a/core/src/layers/minitrace.rs b/core/src/layers/minitrace.rs
index 25573f125..26df33004 100644
--- a/core/src/layers/minitrace.rs
+++ b/core/src/layers/minitrace.rs
@@ -136,8 +136,8 @@ impl<A: Accessor> LayeredAccessor for MinitraceAccessor<A> {
     type BlockingReader = MinitraceWrapper<A::BlockingReader>;
     type Writer = MinitraceWrapper<A::Writer>;
     type BlockingWriter = MinitraceWrapper<A::BlockingWriter>;
-    type Pager = MinitraceWrapper<A::Pager>;
-    type BlockingPager = MinitraceWrapper<A::BlockingPager>;
+    type Lister = MinitraceWrapper<A::Lister>;
+    type BlockingLister = MinitraceWrapper<A::BlockingLister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -204,7 +204,7 @@ impl<A: Accessor> LayeredAccessor for MinitraceAccessor<A> {
     }
 
     #[trace(enter_on_poll = true)]
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner
             .list(path, args)
             .map(|v| {
@@ -274,7 +274,7 @@ impl<A: Accessor> LayeredAccessor for MinitraceAccessor<A> {
     }
 
     #[trace]
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner.blocking_list(path, args).map(|(rp, it)| {
             (
                 rp,
diff --git a/core/src/layers/oteltrace.rs b/core/src/layers/oteltrace.rs
index 87a53c8b3..0244e3190 100644
--- a/core/src/layers/oteltrace.rs
+++ b/core/src/layers/oteltrace.rs
@@ -73,8 +73,8 @@ impl<A: Accessor> LayeredAccessor for OtelTraceAccessor<A> {
     type BlockingReader = OtelTraceWrapper<A::BlockingReader>;
     type Writer = OtelTraceWrapper<A::Writer>;
     type BlockingWriter = OtelTraceWrapper<A::BlockingWriter>;
-    type Pager = OtelTraceWrapper<A::Pager>;
-    type BlockingPager = OtelTraceWrapper<A::BlockingPager>;
+    type Lister = OtelTraceWrapper<A::Lister>;
+    type BlockingLister = OtelTraceWrapper<A::BlockingLister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -154,7 +154,7 @@ impl<A: Accessor> LayeredAccessor for OtelTraceAccessor<A> {
         self.inner().delete(path, args).with_context(cx).await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("list");
         span.set_attribute(KeyValue::new("path", path.to_string()));
@@ -254,7 +254,7 @@ impl<A: Accessor> LayeredAccessor for OtelTraceAccessor<A> {
         })
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let tracer = global::tracer("opendal");
         let mut span = tracer.start("blocking_list");
         span.set_attribute(KeyValue::new("path", path.to_string()));
diff --git a/core/src/layers/prometheus.rs b/core/src/layers/prometheus.rs
index f26a4af2b..41b7bfc68 100644
--- a/core/src/layers/prometheus.rs
+++ b/core/src/layers/prometheus.rs
@@ -275,8 +275,8 @@ impl<A: Accessor> LayeredAccessor for PrometheusAccessor<A> {
     type BlockingReader = PrometheusMetricWrapper<A::BlockingReader>;
     type Writer = PrometheusMetricWrapper<A::Writer>;
     type BlockingWriter = PrometheusMetricWrapper<A::BlockingWriter>;
-    type Pager = A::Pager;
-    type BlockingPager = A::BlockingPager;
+    type Lister = A::Lister;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -429,7 +429,7 @@ impl<A: Accessor> LayeredAccessor for PrometheusAccessor<A> {
         })
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let labels = self.stats.generate_metric_label(
             self.scheme.into_static(),
             Operation::List.into_static(),
@@ -633,7 +633,7 @@ impl<A: Accessor> LayeredAccessor for PrometheusAccessor<A> {
         })
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let labels = self.stats.generate_metric_label(
             self.scheme.into_static(),
             Operation::BlockingList.into_static(),
diff --git a/core/src/layers/prometheus_client.rs b/core/src/layers/prometheus_client.rs
index 9cb4b69d1..fa9e7ec3d 100644
--- a/core/src/layers/prometheus_client.rs
+++ b/core/src/layers/prometheus_client.rs
@@ -214,8 +214,8 @@ impl<A: Accessor> LayeredAccessor for PrometheusAccessor<A> {
     type BlockingReader = PrometheusMetricWrapper<A::BlockingReader>;
     type Writer = PrometheusMetricWrapper<A::Writer>;
     type BlockingWriter = PrometheusMetricWrapper<A::BlockingWriter>;
-    type Pager = A::Pager;
-    type BlockingPager = A::BlockingPager;
+    type Lister = A::Lister;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -336,7 +336,7 @@ impl<A: Accessor> LayeredAccessor for PrometheusAccessor<A> {
         })
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.metrics
             .increment_request_total(self.scheme, Operation::List);
         let start_time = Instant::now();
@@ -493,7 +493,7 @@ impl<A: Accessor> LayeredAccessor for PrometheusAccessor<A> {
         })
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.metrics
             .increment_request_total(self.scheme, Operation::BlockingList);
         let start_time = Instant::now();
diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs
index 8f5ea76ee..d0162ccdf 100644
--- a/core/src/layers/retry.rs
+++ b/core/src/layers/retry.rs
@@ -284,8 +284,8 @@ impl<A: Accessor, I: RetryInterceptor> LayeredAccessor for RetryAccessor<A, I> {
     type BlockingReader = RetryWrapper<A::BlockingReader, I>;
     type Writer = RetryWrapper<A::Writer, I>;
     type BlockingWriter = RetryWrapper<A::BlockingWriter, I>;
-    type Pager = RetryWrapper<A::Pager, I>;
-    type BlockingPager = RetryWrapper<A::BlockingPager, I>;
+    type Lister = RetryWrapper<A::Lister, I>;
+    type BlockingLister = RetryWrapper<A::BlockingLister, I>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -432,7 +432,7 @@ impl<A: Accessor, I: RetryInterceptor> LayeredAccessor for RetryAccessor<A, I> {
             .await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         { || self.inner.list(path, args.clone()) }
             .retry(&self.builder)
             .when(|e| e.is_temporary())
@@ -445,9 +445,9 @@ impl<A: Accessor, I: RetryInterceptor> LayeredAccessor for RetryAccessor<A, I> {
             })
             .map(|v| {
                 v.map(|(l, p)| {
-                    let pager =
+                    let lister =
                         RetryWrapper::new(p, self.notify.clone(), path, self.builder.clone());
-                    (l, pager)
+                    (l, lister)
                 })
                 .map_err(|e| e.set_persistent())
             })
@@ -622,7 +622,7 @@ impl<A: Accessor, I: RetryInterceptor> LayeredAccessor for RetryAccessor<A, I> {
             .map_err(|e| e.set_persistent())
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         { || self.inner.blocking_list(path, args.clone()) }
             .retry(&self.builder)
             .when(|e| e.is_temporary())
@@ -1145,8 +1145,8 @@ mod tests {
         type BlockingReader = ();
         type Writer = ();
         type BlockingWriter = ();
-        type Pager = MockPager;
-        type BlockingPager = ();
+        type Lister = MockLister;
+        type BlockingLister = ();
 
         fn info(&self) -> AccessorInfo {
             let mut am = AccessorInfo::default();
@@ -1172,9 +1172,9 @@ mod tests {
             ))
         }
 
-        async fn list(&self, _: &str, _: OpList) -> Result<(RpList, Self::Pager)> {
-            let pager = MockPager::default();
-            Ok((RpList::default(), pager))
+        async fn list(&self, _: &str, _: OpList) -> Result<(RpList, Self::Lister)> {
+            let lister = MockLister::default();
+            Ok((RpList::default(), lister))
         }
 
         async fn batch(&self, op: OpBatch) -> Result<RpBatch> {
@@ -1291,17 +1291,17 @@ mod tests {
     }
 
     #[derive(Debug, Clone, Default)]
-    struct MockPager {
+    struct MockLister {
         attempt: usize,
     }
     #[async_trait]
-    impl oio::List for MockPager {
+    impl oio::List for MockLister {
         async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
             self.attempt += 1;
             match self.attempt {
                 1 => Err(Error::new(
                     ErrorKind::RateLimited,
-                    "retryable rate limited error from pager",
+                    "retryable rate limited error from lister",
                 )
                 .set_temporary()),
                 2 => {
diff --git a/core/src/layers/throttle.rs b/core/src/layers/throttle.rs
index 708d5980b..d76428b39 100644
--- a/core/src/layers/throttle.rs
+++ b/core/src/layers/throttle.rs
@@ -120,8 +120,8 @@ impl<A: Accessor> LayeredAccessor for ThrottleAccessor<A> {
     type BlockingReader = ThrottleWrapper<A::BlockingReader>;
     type Writer = ThrottleWrapper<A::Writer>;
     type BlockingWriter = ThrottleWrapper<A::BlockingWriter>;
-    type Pager = A::Pager;
-    type BlockingPager = A::BlockingPager;
+    type Lister = A::Lister;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -145,7 +145,7 @@ impl<A: Accessor> LayeredAccessor for ThrottleAccessor<A> {
             .map(|(rp, w)| (rp, ThrottleWrapper::new(w, limiter)))
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner.list(path, args).await
     }
 
@@ -165,7 +165,7 @@ impl<A: Accessor> LayeredAccessor for ThrottleAccessor<A> {
             .map(|(rp, w)| (rp, ThrottleWrapper::new(w, limiter)))
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner.blocking_list(path, args)
     }
 }
diff --git a/core/src/layers/timeout.rs b/core/src/layers/timeout.rs
index 9540b6792..64b55ff18 100644
--- a/core/src/layers/timeout.rs
+++ b/core/src/layers/timeout.rs
@@ -146,8 +146,8 @@ impl<A: Accessor> LayeredAccessor for TimeoutAccessor<A> {
     type BlockingReader = A::BlockingReader;
     type Writer = TimeoutWrapper<A::Writer>;
     type BlockingWriter = A::BlockingWriter;
-    type Pager = TimeoutWrapper<A::Pager>;
-    type BlockingPager = A::BlockingPager;
+    type Lister = TimeoutWrapper<A::Lister>;
+    type BlockingLister = A::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -177,7 +177,7 @@ impl<A: Accessor> LayeredAccessor for TimeoutAccessor<A> {
             .map(|(rp, r)| (rp, TimeoutWrapper::new(r, self.timeout, self.speed)))
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         tokio::time::timeout(self.timeout, self.inner.list(path, args))
             .await
             .map_err(|_| {
@@ -197,7 +197,7 @@ impl<A: Accessor> LayeredAccessor for TimeoutAccessor<A> {
         self.inner.blocking_write(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner.blocking_list(path, args)
     }
 }
diff --git a/core/src/layers/tracing.rs b/core/src/layers/tracing.rs
index 1506d2e89..418be8235 100644
--- a/core/src/layers/tracing.rs
+++ b/core/src/layers/tracing.rs
@@ -137,8 +137,8 @@ impl<A: Accessor> LayeredAccessor for TracingAccessor<A> {
     type BlockingReader = TracingWrapper<A::BlockingReader>;
     type Writer = TracingWrapper<A::Writer>;
     type BlockingWriter = TracingWrapper<A::BlockingWriter>;
-    type Pager = TracingWrapper<A::Pager>;
-    type BlockingPager = TracingWrapper<A::BlockingPager>;
+    type Lister = TracingWrapper<A::Lister>;
+    type BlockingLister = TracingWrapper<A::BlockingLister>;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -191,7 +191,7 @@ impl<A: Accessor> LayeredAccessor for TracingAccessor<A> {
     }
 
     #[tracing::instrument(level = "debug", skip(self))]
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner
             .list(path, args)
             .map(|v| v.map(|(rp, s)| (rp, TracingWrapper::new(Span::current(), s))))
@@ -248,7 +248,7 @@ impl<A: Accessor> LayeredAccessor for TracingAccessor<A> {
     }
 
     #[tracing::instrument(level = "debug", skip(self))]
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner
             .blocking_list(path, args)
             .map(|(rp, it)| (rp, TracingWrapper::new(Span::current(), it)))
diff --git a/core/src/layers/type_eraser.rs b/core/src/layers/type_eraser.rs
index 4d02e2c7a..68cb24859 100644
--- a/core/src/layers/type_eraser.rs
+++ b/core/src/layers/type_eraser.rs
@@ -59,8 +59,8 @@ impl<A: Accessor> LayeredAccessor for TypeEraseAccessor<A> {
     type BlockingReader = oio::BlockingReader;
     type Writer = oio::Writer;
     type BlockingWriter = oio::BlockingWriter;
-    type Pager = oio::Pager;
-    type BlockingPager = oio::BlockingLister;
+    type Lister = oio::Lister;
+    type BlockingLister = oio::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -80,11 +80,11 @@ impl<A: Accessor> LayeredAccessor for TypeEraseAccessor<A> {
             .map(|(rp, w)| (rp, Box::new(w) as oio::Writer))
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.inner
             .list(path, args)
             .await
-            .map(|(rp, p)| (rp, Box::new(p) as oio::Pager))
+            .map(|(rp, p)| (rp, Box::new(p) as oio::Lister))
     }
 
     fn blocking_read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::BlockingReader)> {
@@ -99,7 +99,7 @@ impl<A: Accessor> LayeredAccessor for TypeEraseAccessor<A> {
             .map(|(rp, w)| (rp, Box::new(w) as oio::BlockingWriter))
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.inner
             .blocking_list(path, args)
             .map(|(rp, p)| (rp, Box::new(p) as oio::BlockingLister))
diff --git a/core/src/raw/accessor.rs b/core/src/raw/accessor.rs
index ec8540137..8f8ee4517 100644
--- a/core/src/raw/accessor.rs
+++ b/core/src/raw/accessor.rs
@@ -65,11 +65,11 @@ pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
     /// BlockingWriter is the associated writer the could return in
     /// `blocking_write` operation.
     type BlockingWriter: oio::BlockingWrite;
-    /// Pager is the associated page that return in `list` operation.
-    type Pager: oio::List;
-    /// BlockingPager is the associated pager that could return in
+    /// Lister is the associated page that return in `list` operation.
+    type Lister: oio::List;
+    /// BlockingLister is the associated lister that could return in
     /// `blocking_list` operation.
-    type BlockingPager: oio::BlockingList;
+    type BlockingLister: oio::BlockingList;
 
     /// Invoke the `info` operation to get metadata of accessor.
     ///
@@ -209,7 +209,7 @@ pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
     ///
     /// - Input path MUST be dir path, DON'T NEED to check mode.
     /// - List non-exist dir should return Empty.
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let (_, _) = (path, args);
 
         Err(Error::new(
@@ -353,7 +353,7 @@ pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
     /// # Behavior
     ///
     /// - List non-exist dir should return Empty.
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let (_, _) = (path, args);
 
         Err(Error::new(
@@ -370,8 +370,8 @@ impl Accessor for () {
     type BlockingReader = ();
     type Writer = ();
     type BlockingWriter = ();
-    type Pager = ();
-    type BlockingPager = ();
+    type Lister = ();
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         AccessorInfo {
@@ -392,8 +392,8 @@ impl<T: Accessor + ?Sized> Accessor for Arc<T> {
     type BlockingReader = T::BlockingReader;
     type Writer = T::Writer;
     type BlockingWriter = T::BlockingWriter;
-    type Pager = T::Pager;
-    type BlockingPager = T::BlockingPager;
+    type Lister = T::Lister;
+    type BlockingLister = T::BlockingLister;
 
     fn info(&self) -> AccessorInfo {
         self.as_ref().info()
@@ -424,7 +424,7 @@ impl<T: Accessor + ?Sized> Accessor for Arc<T> {
     async fn delete(&self, path: &str, args: OpDelete) -> Result<RpDelete> {
         self.as_ref().delete(path, args).await
     }
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         self.as_ref().list(path, args).await
     }
 
@@ -460,7 +460,7 @@ impl<T: Accessor + ?Sized> Accessor for Arc<T> {
     fn blocking_delete(&self, path: &str, args: OpDelete) -> Result<RpDelete> {
         self.as_ref().blocking_delete(path, args)
     }
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         self.as_ref().blocking_list(path, args)
     }
 }
@@ -472,8 +472,8 @@ pub type FusedAccessor = Arc<
         BlockingReader = oio::BlockingReader,
         Writer = oio::Writer,
         BlockingWriter = oio::BlockingWriter,
-        Pager = oio::Pager,
-        BlockingPager = oio::BlockingLister,
+        Lister = oio::Lister,
+        BlockingLister = oio::BlockingLister,
     >,
 >;
 
diff --git a/core/src/raw/adapters/kv/backend.rs b/core/src/raw/adapters/kv/backend.rs
index 142fde11e..4360e6f39 100644
--- a/core/src/raw/adapters/kv/backend.rs
+++ b/core/src/raw/adapters/kv/backend.rs
@@ -68,8 +68,8 @@ impl<S: Adapter> Accessor for Backend<S> {
     type BlockingReader = oio::Cursor;
     type Writer = KvWriter<S>;
     type BlockingWriter = KvWriter<S>;
-    type Pager = KvPager;
-    type BlockingPager = KvPager;
+    type Lister = KvLister;
+    type BlockingLister = KvLister;
 
     fn info(&self) -> AccessorInfo {
         let mut am: AccessorInfo = self.kv.metadata().into();
@@ -202,20 +202,20 @@ impl<S: Adapter> Accessor for Backend<S> {
         Ok(RpDelete::default())
     }
 
-    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Lister)> {
         let p = build_abs_path(&self.root, path);
         let res = self.kv.scan(&p).await?;
-        let pager = KvPager::new(&self.root, res);
+        let lister = KvLister::new(&self.root, res);
 
-        Ok((RpList::default(), pager))
+        Ok((RpList::default(), lister))
     }
 
-    fn blocking_list(&self, path: &str, _: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, _: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let p = build_abs_path(&self.root, path);
         let res = self.kv.blocking_scan(&p)?;
-        let pager = KvPager::new(&self.root, res);
+        let lister = KvLister::new(&self.root, res);
 
-        Ok((RpList::default(), pager))
+        Ok((RpList::default(), lister))
     }
 
     async fn rename(&self, from: &str, to: &str, _: OpRename) -> Result<RpRename> {
@@ -301,12 +301,12 @@ where
     }
 }
 
-pub struct KvPager {
+pub struct KvLister {
     root: String,
     inner: Option<Vec<String>>,
 }
 
-impl KvPager {
+impl KvLister {
     fn new(root: &str, inner: Vec<String>) -> Self {
         Self {
             root: root.to_string(),
@@ -335,13 +335,13 @@ impl KvPager {
 }
 
 #[async_trait]
-impl oio::List for KvPager {
+impl oio::List for KvLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
 }
 
-impl oio::BlockingList for KvPager {
+impl oio::BlockingList for KvLister {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
diff --git a/core/src/raw/adapters/typed_kv/backend.rs b/core/src/raw/adapters/typed_kv/backend.rs
index 210c7d1cc..2a1da5966 100644
--- a/core/src/raw/adapters/typed_kv/backend.rs
+++ b/core/src/raw/adapters/typed_kv/backend.rs
@@ -62,8 +62,8 @@ impl<S: Adapter> Accessor for Backend<S> {
     type BlockingReader = oio::Cursor;
     type Writer = KvWriter<S>;
     type BlockingWriter = KvWriter<S>;
-    type Pager = KvPager;
-    type BlockingPager = KvPager;
+    type Lister = KvLister;
+    type BlockingLister = KvLister;
 
     fn info(&self) -> AccessorInfo {
         let kv_info = self.kv.info();
@@ -205,20 +205,20 @@ impl<S: Adapter> Accessor for Backend<S> {
         Ok(RpDelete::default())
     }
 
-    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Lister)> {
         let p = build_abs_path(&self.root, path);
         let res = self.kv.scan(&p).await?;
-        let pager = KvPager::new(&self.root, res);
+        let lister = KvLister::new(&self.root, res);
 
-        Ok((RpList::default(), pager))
+        Ok((RpList::default(), lister))
     }
 
-    fn blocking_list(&self, path: &str, _: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, _: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let p = build_abs_path(&self.root, path);
         let res = self.kv.blocking_scan(&p)?;
-        let pager = KvPager::new(&self.root, res);
+        let lister = KvLister::new(&self.root, res);
 
-        Ok((RpList::default(), pager))
+        Ok((RpList::default(), lister))
     }
 
     async fn rename(&self, from: &str, to: &str, _: OpRename) -> Result<RpRename> {
@@ -302,12 +302,12 @@ where
     }
 }
 
-pub struct KvPager {
+pub struct KvLister {
     root: String,
     inner: Option<Vec<String>>,
 }
 
-impl KvPager {
+impl KvLister {
     fn new(root: &str, inner: Vec<String>) -> Self {
         Self {
             root: root.to_string(),
@@ -336,13 +336,13 @@ impl KvPager {
 }
 
 #[async_trait]
-impl oio::List for KvPager {
+impl oio::List for KvLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
 }
 
-impl oio::BlockingList for KvPager {
+impl oio::BlockingList for KvLister {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
diff --git a/core/src/raw/layer.rs b/core/src/raw/layer.rs
index fa5d0add3..48619c9be 100644
--- a/core/src/raw/layer.rs
+++ b/core/src/raw/layer.rs
@@ -61,8 +61,8 @@ use crate::*;
 ///     type BlockingReader = A::BlockingReader;
 ///     type Writer = A::Writer;
 ///     type BlockingWriter = A::BlockingWriter;
-///     type Pager = A::Pager;
-///     type BlockingPager = A::BlockingPager;
+///     type Lister = A::Lister;
+///     type BlockingLister = A::BlockingLister;
 ///
 ///     fn inner(&self) -> &Self::Inner {
 ///         &self.inner
@@ -92,11 +92,11 @@ use crate::*;
 ///         self.inner.blocking_write(path, args)
 ///     }
 ///
-///     async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+///     async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
 ///         self.inner.list(path, args).await
 ///     }
 ///
-///     fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+///     fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
 ///         self.inner.blocking_list(path, args)
 ///     }
 /// }
@@ -132,8 +132,8 @@ pub trait LayeredAccessor: Send + Sync + Debug + Unpin + 'static {
     type BlockingReader: oio::BlockingRead;
     type Writer: oio::Write;
     type BlockingWriter: oio::BlockingWrite;
-    type Pager: oio::List;
-    type BlockingPager: oio::BlockingList;
+    type Lister: oio::List;
+    type BlockingLister: oio::BlockingList;
 
     fn inner(&self) -> &Self::Inner;
 
@@ -165,7 +165,7 @@ pub trait LayeredAccessor: Send + Sync + Debug + Unpin + 'static {
         self.inner().delete(path, args).await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)>;
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)>;
 
     async fn batch(&self, args: OpBatch) -> Result<RpBatch> {
         self.inner().batch(args).await
@@ -199,7 +199,7 @@ pub trait LayeredAccessor: Send + Sync + Debug + Unpin + 'static {
         self.inner().blocking_delete(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)>;
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)>;
 }
 
 #[async_trait]
@@ -208,8 +208,8 @@ impl<L: LayeredAccessor> Accessor for L {
     type BlockingReader = L::BlockingReader;
     type Writer = L::Writer;
     type BlockingWriter = L::BlockingWriter;
-    type Pager = L::Pager;
-    type BlockingPager = L::BlockingPager;
+    type Lister = L::Lister;
+    type BlockingLister = L::BlockingLister;
 
     fn info(&self) -> AccessorInfo {
         (self as &L).metadata()
@@ -243,7 +243,7 @@ impl<L: LayeredAccessor> Accessor for L {
         (self as &L).delete(path, args).await
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         (self as &L).list(path, args).await
     }
 
@@ -283,7 +283,7 @@ impl<L: LayeredAccessor> Accessor for L {
         (self as &L).blocking_delete(path, args)
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         (self as &L).blocking_list(path, args)
     }
 }
@@ -321,8 +321,8 @@ mod tests {
         type BlockingReader = ();
         type Writer = ();
         type BlockingWriter = ();
-        type Pager = ();
-        type BlockingPager = ();
+        type Lister = ();
+        type BlockingLister = ();
 
         fn info(&self) -> AccessorInfo {
             let mut am = AccessorInfo::default();
diff --git a/core/src/raw/oio/list/api.rs b/core/src/raw/oio/list/api.rs
index 222109848..c08f5d294 100644
--- a/core/src/raw/oio/list/api.rs
+++ b/core/src/raw/oio/list/api.rs
@@ -23,7 +23,7 @@ use async_trait::async_trait;
 use crate::raw::oio::Entry;
 use crate::*;
 
-/// PageOperation is the name for APIs of pager.
+/// PageOperation is the name for APIs of lister.
 #[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
 #[non_exhaustive]
 pub enum ListOperation {
@@ -68,7 +68,7 @@ pub trait List: Send + Sync + 'static {
 }
 
 /// The boxed version of [`List`]
-pub type Pager = Box<dyn List>;
+pub type Lister = Box<dyn List>;
 
 #[async_trait]
 impl<P: List + ?Sized> List for Box<P> {
diff --git a/core/src/raw/oio/list/into_flat_page.rs b/core/src/raw/oio/list/into_flat_page.rs
index 6eebfc35e..ee9966b4c 100644
--- a/core/src/raw/oio/list/into_flat_page.rs
+++ b/core/src/raw/oio/list/into_flat_page.rs
@@ -23,8 +23,8 @@ use async_trait::async_trait;
 use crate::raw::*;
 use crate::*;
 
-/// to_flat_pager is used to make a hierarchy pager flat.
-pub fn into_flat_page<A: Accessor, P>(acc: A, path: &str, size: usize) -> FlatPager<A, P> {
+/// to_flat_lister is used to make a hierarchy lister flat.
+pub fn into_flat_page<A: Accessor, P>(acc: A, path: &str, size: usize) -> FlatLister<A, P> {
     #[cfg(debug_assertions)]
     {
         let meta = acc.info();
@@ -34,17 +34,17 @@ pub fn into_flat_page<A: Accessor, P>(acc: A, path: &str, size: usize) -> FlatPa
         );
     }
 
-    FlatPager {
+    FlatLister {
         acc,
         size,
         root: path.to_string(),
         dirs: VecDeque::from([oio::Entry::new(path, Metadata::new(EntryMode::DIR))]),
-        pagers: vec![],
+        listers: vec![],
         res: Vec::with_capacity(size),
     }
 }
 
-/// ToFlatPager will walk dir in bottom up way:
+/// ToFlatLister will walk dir in bottom up way:
 ///
 /// - List nested dir first
 /// - Go back into parent dirs one by one
@@ -61,7 +61,7 @@ pub fn into_flat_page<A: Accessor, P>(acc: A, path: &str, size: usize) -> FlatPa
 /// └── file_a
 /// ```
 ///
-/// ToFlatPager will output entries like:
+/// ToFlatLister will output entries like:
 ///
 /// ```txt
 /// dir_x/dir_y/dir_z/file_c
@@ -77,33 +77,33 @@ pub fn into_flat_page<A: Accessor, P>(acc: A, path: &str, size: usize) -> FlatPa
 /// There is no guarantee about the order between files and dirs at the same level.
 /// We only make sure the nested dirs will show up before parent dirs.
 ///
-/// Especially, for storage services that can't return dirs first, ToFlatPager
+/// Especially, for storage services that can't return dirs first, ToFlatLister
 /// may output parent dirs' files before nested dirs, this is expected because files
 /// always output directly while listing.
-pub struct FlatPager<A: Accessor, P> {
+pub struct FlatLister<A: Accessor, P> {
     acc: A,
     size: usize,
     root: String,
     dirs: VecDeque<oio::Entry>,
-    pagers: Vec<(P, oio::Entry, Vec<oio::Entry>)>,
+    listers: Vec<(P, oio::Entry, Vec<oio::Entry>)>,
     res: Vec<oio::Entry>,
 }
 
 #[async_trait]
-impl<A, P> oio::List for FlatPager<A, P>
+impl<A, P> oio::List for FlatLister<A, P>
 where
-    A: Accessor<Pager = P>,
+    A: Accessor<Lister = P>,
     P: oio::List,
 {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         loop {
             if let Some(de) = self.dirs.pop_back() {
                 let (_, op) = self.acc.list(de.path(), OpList::new()).await?;
-                self.pagers.push((op, de, vec![]))
+                self.listers.push((op, de, vec![]))
             }
 
-            let (mut pager, de, mut buf) = match self.pagers.pop() {
-                Some((pager, de, buf)) => (pager, de, buf),
+            let (mut lister, de, mut buf) = match self.listers.pop() {
+                Some((lister, de, buf)) => (lister, de, buf),
                 None => {
                     if !self.res.is_empty() {
                         return Ok(Some(mem::take(&mut self.res)));
@@ -113,7 +113,7 @@ where
             };
 
             if buf.is_empty() {
-                match pager.next().await? {
+                match lister.next().await? {
                     Some(v) => {
                         buf = v;
                     }
@@ -132,13 +132,13 @@ where
                 if let Some(oe) = buf.pop_front() {
                     if oe.mode().is_dir() {
                         self.dirs.push_back(oe);
-                        self.pagers.push((pager, de, buf.into()));
+                        self.listers.push((lister, de, buf.into()));
                         break;
                     } else {
                         self.res.push(oe)
                     }
                 } else {
-                    self.pagers.push((pager, de, vec![]));
+                    self.listers.push((lister, de, vec![]));
                     break;
                 }
             }
@@ -150,20 +150,20 @@ where
     }
 }
 
-impl<A, P> oio::BlockingList for FlatPager<A, P>
+impl<A, P> oio::BlockingList for FlatLister<A, P>
 where
-    A: Accessor<BlockingPager = P>,
+    A: Accessor<BlockingLister = P>,
     P: oio::BlockingList,
 {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         loop {
             if let Some(de) = self.dirs.pop_back() {
                 let (_, op) = self.acc.blocking_list(de.path(), OpList::new())?;
-                self.pagers.push((op, de, vec![]))
+                self.listers.push((op, de, vec![]))
             }
 
-            let (mut pager, de, mut buf) = match self.pagers.pop() {
-                Some((pager, de, buf)) => (pager, de, buf),
+            let (mut lister, de, mut buf) = match self.listers.pop() {
+                Some((lister, de, buf)) => (lister, de, buf),
                 None => {
                     if !self.res.is_empty() {
                         return Ok(Some(mem::take(&mut self.res)));
@@ -173,7 +173,7 @@ where
             };
 
             if buf.is_empty() {
-                match pager.next()? {
+                match lister.next()? {
                     Some(v) => {
                         buf = v;
                     }
@@ -192,13 +192,13 @@ where
                 if let Some(oe) = buf.pop_front() {
                     if oe.mode().is_dir() {
                         self.dirs.push_back(oe);
-                        self.pagers.push((pager, de, buf.into()));
+                        self.listers.push((lister, de, buf.into()));
                         break;
                     } else {
                         self.res.push(oe)
                     }
                 } else {
-                    self.pagers.push((pager, de, vec![]));
+                    self.listers.push((lister, de, vec![]));
                     break;
                 }
             }
@@ -235,10 +235,10 @@ mod tests {
             Self { map }
         }
 
-        fn get(&self, path: &str) -> MockPager {
+        fn get(&self, path: &str) -> MockLister {
             let inner = self.map.get(path).expect("must have value").to_vec();
 
-            MockPager { inner, done: false }
+            MockLister { inner, done: false }
         }
     }
 
@@ -248,8 +248,8 @@ mod tests {
         type BlockingReader = ();
         type Writer = ();
         type BlockingWriter = ();
-        type Pager = ();
-        type BlockingPager = MockPager;
+        type Lister = ();
+        type BlockingLister = MockLister;
 
         fn info(&self) -> AccessorInfo {
             let mut am = AccessorInfo::default();
@@ -259,18 +259,18 @@ mod tests {
             am
         }
 
-        fn blocking_list(&self, path: &str, _: OpList) -> Result<(RpList, Self::BlockingPager)> {
+        fn blocking_list(&self, path: &str, _: OpList) -> Result<(RpList, Self::BlockingLister)> {
             debug!("visit path: {path}");
             Ok((RpList::default(), self.get(path)))
         }
     }
 
-    struct MockPager {
+    struct MockLister {
         inner: Vec<&'static str>,
         done: bool,
     }
 
-    impl BlockingList for MockPager {
+    impl BlockingList for MockLister {
         fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
             if self.done {
                 return Ok(None);
@@ -298,11 +298,11 @@ mod tests {
         let _ = tracing_subscriber::fmt().with_test_writer().try_init();
 
         let acc = MockService::new();
-        let mut pager = into_flat_page(acc, "x/", 10);
+        let mut lister = into_flat_page(acc, "x/", 10);
 
         let mut entries = Vec::default();
 
-        while let Some(e) = pager.next()? {
+        while let Some(e) = lister.next()? {
             entries.extend_from_slice(&e)
         }
 
diff --git a/core/src/raw/oio/list/into_hierarchy_pager.rs b/core/src/raw/oio/list/into_hierarchy_pager.rs
index bb54b7551..2971ad2a1 100644
--- a/core/src/raw/oio/list/into_hierarchy_pager.rs
+++ b/core/src/raw/oio/list/into_hierarchy_pager.rs
@@ -22,38 +22,38 @@ use async_trait::async_trait;
 use crate::raw::*;
 use crate::*;
 
-/// to_hierarchy_pager is used to make a hierarchy pager flat.
-pub fn into_hierarchy_page<P>(pager: P, path: &str) -> HierarchyPager<P> {
+/// to_hierarchy_lister is used to make a hierarchy lister flat.
+pub fn into_hierarchy_page<P>(lister: P, path: &str) -> HierarchyLister<P> {
     let path = if path == "/" {
         "".to_string()
     } else {
         path.to_string()
     };
 
-    HierarchyPager {
-        pager,
+    HierarchyLister {
+        lister,
         path,
         visited: HashSet::default(),
     }
 }
 
-/// ToHierarchyPager will convert a flat page to hierarchy by filter
+/// ToHierarchyLister will convert a flat page to hierarchy by filter
 /// not needed entries.
 ///
 /// # Notes
 ///
-/// ToHierarchyPager filter entries after fetch entries. So it's possible
+/// ToHierarchyLister filter entries after fetch entries. So it's possible
 /// to return an empty vec. It doesn't mean the all pages have been
 /// returned.
 ///
 /// Please keep calling next_page until we returned `Ok(None)`
-pub struct HierarchyPager<P> {
-    pager: P,
+pub struct HierarchyLister<P> {
+    lister: P,
     path: String,
     visited: HashSet<String>,
 }
 
-impl<P> HierarchyPager<P> {
+impl<P> HierarchyLister<P> {
     /// TODO: use retain_mut instead after we bump MSRV to 1.61.
     fn filter_entries(&mut self, entries: Vec<oio::Entry>) -> Vec<oio::Entry> {
         entries
@@ -117,9 +117,9 @@ impl<P> HierarchyPager<P> {
 }
 
 #[async_trait]
-impl<P: oio::List> oio::List for HierarchyPager<P> {
+impl<P: oio::List> oio::List for HierarchyLister<P> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
-        let page = self.pager.next().await?;
+        let page = self.lister.next().await?;
 
         let entries = if let Some(entries) = page {
             entries
@@ -133,9 +133,9 @@ impl<P: oio::List> oio::List for HierarchyPager<P> {
     }
 }
 
-impl<P: oio::BlockingList> oio::BlockingList for HierarchyPager<P> {
+impl<P: oio::BlockingList> oio::BlockingList for HierarchyLister<P> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
-        let page = self.pager.next()?;
+        let page = self.lister.next()?;
 
         let entries = if let Some(entries) = page {
             entries
@@ -159,12 +159,12 @@ mod tests {
 
     use super::*;
 
-    struct MockPager {
+    struct MockLister {
         inner: Vec<&'static str>,
         done: bool,
     }
 
-    impl MockPager {
+    impl MockLister {
         fn new(inner: &[&'static str]) -> Self {
             Self {
                 inner: inner.to_vec(),
@@ -173,7 +173,7 @@ mod tests {
         }
     }
 
-    impl BlockingList for MockPager {
+    impl BlockingList for MockLister {
         fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
             if self.done {
                 return Ok(None);
@@ -200,13 +200,13 @@ mod tests {
     fn test_blocking_list() -> Result<()> {
         let _ = tracing_subscriber::fmt().with_test_writer().try_init();
 
-        let pager = MockPager::new(&["x/x/", "x/y/", "y/", "x/x/x", "y/y", "xy/", "z", "y/a"]);
-        let mut pager = into_hierarchy_page(pager, "");
+        let lister = MockLister::new(&["x/x/", "x/y/", "y/", "x/x/x", "y/y", "xy/", "z", "y/a"]);
+        let mut lister = into_hierarchy_page(lister, "");
 
         let mut entries = Vec::default();
 
         let mut set = HashSet::new();
-        while let Some(e) = pager.next()? {
+        while let Some(e) = lister.next()? {
             for i in &e {
                 debug!("got path {}", i.path());
                 assert!(
diff --git a/core/src/raw/oio/list/mod.rs b/core/src/raw/oio/list/mod.rs
index 8e3c34656..0a4b0e39e 100644
--- a/core/src/raw/oio/list/mod.rs
+++ b/core/src/raw/oio/list/mod.rs
@@ -20,12 +20,12 @@ pub use api::BlockingList;
 pub use api::BlockingLister;
 pub use api::List;
 pub use api::ListOperation;
-pub use api::Pager;
+pub use api::Lister;
 
 mod into_flat_page;
 pub use into_flat_page::into_flat_page;
-pub use into_flat_page::FlatPager;
+pub use into_flat_page::FlatLister;
 
 mod into_hierarchy_pager;
 pub use into_hierarchy_pager::into_hierarchy_page;
-pub use into_hierarchy_pager::HierarchyPager;
+pub use into_hierarchy_pager::HierarchyLister;
diff --git a/core/src/raw/oio/read/api.rs b/core/src/raw/oio/read/api.rs
index 0b9aaf770..098599855 100644
--- a/core/src/raw/oio/read/api.rs
+++ b/core/src/raw/oio/read/api.rs
@@ -28,7 +28,7 @@ use pin_project::pin_project;
 
 use crate::*;
 
-/// PageOperation is the name for APIs of pager.
+/// PageOperation is the name for APIs of lister.
 #[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
 #[non_exhaustive]
 pub enum ReadOperation {
diff --git a/core/src/raw/oio/read/range_read.rs b/core/src/raw/oio/read/range_read.rs
index 0447aba8f..3759c3dee 100644
--- a/core/src/raw/oio/read/range_read.rs
+++ b/core/src/raw/oio/read/range_read.rs
@@ -640,8 +640,8 @@ mod tests {
         type BlockingReader = ();
         type Writer = ();
         type BlockingWriter = ();
-        type Pager = ();
-        type BlockingPager = ();
+        type Lister = ();
+        type BlockingLister = ();
 
         fn info(&self) -> AccessorInfo {
             let mut am = AccessorInfo::default();
diff --git a/core/src/services/alluxio/backend.rs b/core/src/services/alluxio/backend.rs
index e047bf89c..d5c9b3a12 100644
--- a/core/src/services/alluxio/backend.rs
+++ b/core/src/services/alluxio/backend.rs
@@ -29,7 +29,7 @@ use crate::*;
 
 use super::writer::AlluxioWriter;
 use super::writer::AlluxioWriters;
-use super::{core::AlluxioCore, pager::AlluxioPager};
+use super::{core::AlluxioCore, lister::AlluxioLister};
 
 /// Config for alluxio services support.
 #[derive(Default, Deserialize)]
@@ -185,8 +185,8 @@ impl Accessor for AlluxioBackend {
     type BlockingReader = ();
     type Writer = AlluxioWriters;
     type BlockingWriter = ();
-    type Pager = AlluxioPager;
-    type BlockingPager = ();
+    type Lister = AlluxioLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -252,10 +252,10 @@ impl Accessor for AlluxioBackend {
         Ok(RpDelete::default())
     }
 
-    async fn list(&self, path: &str, _args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, _args: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            AlluxioPager::new(self.core.clone(), path),
+            AlluxioLister::new(self.core.clone(), path),
         ))
     }
 }
diff --git a/core/src/services/alluxio/lister.rs b/core/src/services/alluxio/lister.rs
index e6deb84c6..c1efa6b3a 100644
--- a/core/src/services/alluxio/lister.rs
+++ b/core/src/services/alluxio/lister.rs
@@ -25,7 +25,7 @@ use crate::raw::*;
 use crate::ErrorKind;
 use crate::Result;
 
-pub struct AlluxioPager {
+pub struct AlluxioLister {
     core: Arc<AlluxioCore>,
 
     path: String,
@@ -33,9 +33,9 @@ pub struct AlluxioPager {
     done: bool,
 }
 
-impl AlluxioPager {
+impl AlluxioLister {
     pub(super) fn new(core: Arc<AlluxioCore>, path: &str) -> Self {
-        AlluxioPager {
+        AlluxioLister {
             core,
             path: path.to_string(),
             done: false,
@@ -44,7 +44,7 @@ impl AlluxioPager {
 }
 
 #[async_trait]
-impl oio::List for AlluxioPager {
+impl oio::List for AlluxioLister {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/alluxio/mod.rs b/core/src/services/alluxio/mod.rs
index 707df837a..95e0216d3 100644
--- a/core/src/services/alluxio/mod.rs
+++ b/core/src/services/alluxio/mod.rs
@@ -21,5 +21,5 @@ pub use backend::AlluxioConfig;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/azblob/backend.rs b/core/src/services/azblob/backend.rs
index acd29e74d..a87907477 100644
--- a/core/src/services/azblob/backend.rs
+++ b/core/src/services/azblob/backend.rs
@@ -34,7 +34,7 @@ use sha2::Digest;
 use sha2::Sha256;
 
 use super::error::parse_error;
-use super::pager::AzblobPager;
+use super::lister::AzblobLister;
 use super::writer::AzblobWriter;
 use crate::raw::*;
 use crate::services::azblob::core::AzblobCore;
@@ -546,8 +546,8 @@ impl Accessor for AzblobBackend {
     type BlockingReader = ();
     type Writer = AzblobWriters;
     type BlockingWriter = ();
-    type Pager = AzblobPager;
-    type BlockingPager = ();
+    type Lister = AzblobLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -688,8 +688,8 @@ impl Accessor for AzblobBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
-        let op = AzblobPager::new(
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
+        let op = AzblobLister::new(
             self.core.clone(),
             path.to_string(),
             args.recursive(),
diff --git a/core/src/services/azblob/lister.rs b/core/src/services/azblob/lister.rs
index a3d03692c..25ccc1248 100644
--- a/core/src/services/azblob/lister.rs
+++ b/core/src/services/azblob/lister.rs
@@ -27,7 +27,7 @@ use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
 
-pub struct AzblobPager {
+pub struct AzblobLister {
     core: Arc<AzblobCore>,
 
     path: String,
@@ -38,7 +38,7 @@ pub struct AzblobPager {
     done: bool,
 }
 
-impl AzblobPager {
+impl AzblobLister {
     pub fn new(core: Arc<AzblobCore>, path: String, recursive: bool, limit: Option<usize>) -> Self {
         let delimiter = if recursive { "" } else { "/" };
 
@@ -55,7 +55,7 @@ impl AzblobPager {
 }
 
 #[async_trait]
-impl oio::List for AzblobPager {
+impl oio::List for AzblobLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/azblob/mod.rs b/core/src/services/azblob/mod.rs
index efc6e42f0..da314f5b3 100644
--- a/core/src/services/azblob/mod.rs
+++ b/core/src/services/azblob/mod.rs
@@ -21,5 +21,5 @@ pub use backend::AzblobConfig;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/azdls/backend.rs b/core/src/services/azdls/backend.rs
index 909bbd571..f5e08abe4 100644
--- a/core/src/services/azdls/backend.rs
+++ b/core/src/services/azdls/backend.rs
@@ -29,7 +29,7 @@ use reqsign::AzureStorageSigner;
 
 use super::core::AzdlsCore;
 use super::error::parse_error;
-use super::pager::AzdlsPager;
+use super::lister::AzdlsLister;
 use super::writer::AzdlsWriter;
 use crate::raw::*;
 use crate::services::azdls::writer::AzdlsWriters;
@@ -233,8 +233,8 @@ impl Accessor for AzdlsBackend {
     type BlockingReader = ();
     type Writer = AzdlsWriters;
     type BlockingWriter = ();
-    type Pager = AzdlsPager;
-    type BlockingPager = ();
+    type Lister = AzdlsLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -365,8 +365,8 @@ impl Accessor for AzdlsBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
-        let op = AzdlsPager::new(self.core.clone(), path.to_string(), args.limit());
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
+        let op = AzdlsLister::new(self.core.clone(), path.to_string(), args.limit());
 
         Ok((RpList::default(), op))
     }
diff --git a/core/src/services/azdls/lister.rs b/core/src/services/azdls/lister.rs
index 01593e68f..a624aa31e 100644
--- a/core/src/services/azdls/lister.rs
+++ b/core/src/services/azdls/lister.rs
@@ -26,7 +26,7 @@ use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
 
-pub struct AzdlsPager {
+pub struct AzdlsLister {
     core: Arc<AzdlsCore>,
 
     path: String,
@@ -36,7 +36,7 @@ pub struct AzdlsPager {
     done: bool,
 }
 
-impl AzdlsPager {
+impl AzdlsLister {
     pub fn new(core: Arc<AzdlsCore>, path: String, limit: Option<usize>) -> Self {
         Self {
             core,
@@ -50,7 +50,7 @@ impl AzdlsPager {
 }
 
 #[async_trait]
-impl oio::List for AzdlsPager {
+impl oio::List for AzdlsLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/azdls/mod.rs b/core/src/services/azdls/mod.rs
index 0207e1f6c..4284e4595 100644
--- a/core/src/services/azdls/mod.rs
+++ b/core/src/services/azdls/mod.rs
@@ -20,5 +20,5 @@ pub use backend::AzdlsBuilder as Azdls;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/azfile/backend.rs b/core/src/services/azfile/backend.rs
index 612edb286..d11b34efd 100644
--- a/core/src/services/azfile/backend.rs
+++ b/core/src/services/azfile/backend.rs
@@ -28,7 +28,7 @@ use reqsign::AzureStorageLoader;
 use reqsign::AzureStorageSigner;
 
 use crate::raw::*;
-use crate::services::azfile::pager::AzfilePager;
+use crate::services::azfile::lister::AzfileLister;
 use crate::*;
 
 use super::core::AzfileCore;
@@ -251,8 +251,8 @@ impl Accessor for AzfileBackend {
     type BlockingReader = ();
     type Writer = AzfileWriters;
     type BlockingWriter = ();
-    type Pager = AzfilePager;
-    type BlockingPager = ();
+    type Lister = AzfileLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -395,8 +395,8 @@ impl Accessor for AzfileBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
-        let op = AzfilePager::new(self.core.clone(), path.to_string(), args.limit());
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
+        let op = AzfileLister::new(self.core.clone(), path.to_string(), args.limit());
 
         Ok((RpList::default(), op))
     }
diff --git a/core/src/services/azfile/lister.rs b/core/src/services/azfile/lister.rs
index 2172fd0c7..cd17aef33 100644
--- a/core/src/services/azfile/lister.rs
+++ b/core/src/services/azfile/lister.rs
@@ -28,7 +28,7 @@ use crate::*;
 use super::core::AzfileCore;
 use super::error::parse_error;
 
-pub struct AzfilePager {
+pub struct AzfileLister {
     core: Arc<AzfileCore>,
     path: String,
     limit: Option<usize>,
@@ -36,7 +36,7 @@ pub struct AzfilePager {
     continuation: String,
 }
 
-impl AzfilePager {
+impl AzfileLister {
     pub fn new(core: Arc<AzfileCore>, path: String, limit: Option<usize>) -> Self {
         Self {
             core,
@@ -49,7 +49,7 @@ impl AzfilePager {
 }
 
 #[async_trait]
-impl oio::List for AzfilePager {
+impl oio::List for AzfileLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/azfile/mod.rs b/core/src/services/azfile/mod.rs
index 8aeebac0f..0ae9da729 100644
--- a/core/src/services/azfile/mod.rs
+++ b/core/src/services/azfile/mod.rs
@@ -20,5 +20,5 @@ pub use backend::AzfileBuilder as Azfile;
 mod backend;
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/cos/backend.rs b/core/src/services/cos/backend.rs
index f03311f45..dbf2f9b1f 100644
--- a/core/src/services/cos/backend.rs
+++ b/core/src/services/cos/backend.rs
@@ -29,7 +29,7 @@ use reqsign::TencentCosSigner;
 
 use super::core::CosCore;
 use super::error::parse_error;
-use super::pager::CosPager;
+use super::lister::CosLister;
 use super::writer::CosWriter;
 use crate::raw::*;
 use crate::services::cos::writer::CosWriters;
@@ -245,8 +245,8 @@ impl Accessor for CosBackend {
     type BlockingReader = ();
     type Writer = CosWriters;
     type BlockingWriter = ();
-    type Pager = CosPager;
-    type BlockingPager = ();
+    type Lister = CosLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -421,10 +421,10 @@ impl Accessor for CosBackend {
         )))
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            CosPager::new(self.core.clone(), path, args.recursive(), args.limit()),
+            CosLister::new(self.core.clone(), path, args.recursive(), args.limit()),
         ))
     }
 }
diff --git a/core/src/services/cos/lister.rs b/core/src/services/cos/lister.rs
index f72b8dec6..55d4bd812 100644
--- a/core/src/services/cos/lister.rs
+++ b/core/src/services/cos/lister.rs
@@ -31,7 +31,7 @@ use crate::ErrorKind;
 use crate::Metadata;
 use crate::Result;
 
-pub struct CosPager {
+pub struct CosLister {
     core: Arc<CosCore>,
     path: String,
     delimiter: &'static str,
@@ -41,7 +41,7 @@ pub struct CosPager {
     done: bool,
 }
 
-impl CosPager {
+impl CosLister {
     pub fn new(core: Arc<CosCore>, path: &str, recursive: bool, limit: Option<usize>) -> Self {
         let delimiter = if recursive { "" } else { "/" };
         Self {
@@ -57,7 +57,7 @@ impl CosPager {
 }
 
 #[async_trait]
-impl oio::List for CosPager {
+impl oio::List for CosLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/cos/mod.rs b/core/src/services/cos/mod.rs
index b51de4b7e..780c2c479 100644
--- a/core/src/services/cos/mod.rs
+++ b/core/src/services/cos/mod.rs
@@ -20,5 +20,5 @@ pub use backend::CosBuilder as Cos;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/dbfs/backend.rs b/core/src/services/dbfs/backend.rs
index afebda36b..4b13e10ba 100644
--- a/core/src/services/dbfs/backend.rs
+++ b/core/src/services/dbfs/backend.rs
@@ -30,7 +30,7 @@ use crate::*;
 
 use super::core::DbfsCore;
 use super::error::parse_error;
-use super::pager::DbfsPager;
+use super::lister::DbfsLister;
 use super::reader::DbfsReader;
 use super::writer::DbfsWriter;
 
@@ -158,8 +158,8 @@ impl Accessor for DbfsBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<DbfsWriter>;
     type BlockingWriter = ();
-    type Pager = DbfsPager;
-    type BlockingPager = ();
+    type Lister = DbfsLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -275,8 +275,8 @@ impl Accessor for DbfsBackend {
         }
     }
 
-    async fn list(&self, path: &str, _args: OpList) -> Result<(RpList, Self::Pager)> {
-        let op = DbfsPager::new(self.core.clone(), path.to_string());
+    async fn list(&self, path: &str, _args: OpList) -> Result<(RpList, Self::Lister)> {
+        let op = DbfsLister::new(self.core.clone(), path.to_string());
 
         Ok((RpList::default(), op))
     }
diff --git a/core/src/services/dbfs/lister.rs b/core/src/services/dbfs/lister.rs
index 5b65694fd..fd27b912b 100644
--- a/core/src/services/dbfs/lister.rs
+++ b/core/src/services/dbfs/lister.rs
@@ -27,13 +27,13 @@ use crate::*;
 
 use super::error::parse_error;
 
-pub struct DbfsPager {
+pub struct DbfsLister {
     core: Arc<DbfsCore>,
     path: String,
     done: bool,
 }
 
-impl DbfsPager {
+impl DbfsLister {
     pub fn new(core: Arc<DbfsCore>, path: String) -> Self {
         Self {
             core,
@@ -44,7 +44,7 @@ impl DbfsPager {
 }
 
 #[async_trait]
-impl oio::List for DbfsPager {
+impl oio::List for DbfsLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/dbfs/mod.rs b/core/src/services/dbfs/mod.rs
index bb7205031..5a310d088 100644
--- a/core/src/services/dbfs/mod.rs
+++ b/core/src/services/dbfs/mod.rs
@@ -20,6 +20,6 @@ pub use backend::DbfsBuilder as Dbfs;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod reader;
 mod writer;
diff --git a/core/src/services/dropbox/backend.rs b/core/src/services/dropbox/backend.rs
index 498bb22cd..6aef1c9f7 100644
--- a/core/src/services/dropbox/backend.rs
+++ b/core/src/services/dropbox/backend.rs
@@ -52,8 +52,8 @@ impl Accessor for DropboxBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<DropboxWriter>;
     type BlockingWriter = ();
-    type Pager = ();
-    type BlockingPager = ();
+    type Lister = ();
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut ma = AccessorInfo::default();
diff --git a/core/src/services/fs/backend.rs b/core/src/services/fs/backend.rs
index 874acfce4..c3dad8bc5 100644
--- a/core/src/services/fs/backend.rs
+++ b/core/src/services/fs/backend.rs
@@ -24,7 +24,7 @@ use chrono::DateTime;
 use log::debug;
 use uuid::Uuid;
 
-use super::pager::FsPager;
+use super::lister::FsLister;
 use super::writer::FsWriter;
 use crate::raw::*;
 use crate::*;
@@ -248,8 +248,8 @@ impl Accessor for FsBackend {
     type BlockingReader = oio::StdReader<std::fs::File>;
     type Writer = FsWriter<tokio::fs::File>;
     type BlockingWriter = FsWriter<std::fs::File>;
-    type Pager = Option<FsPager<tokio::fs::ReadDir>>;
-    type BlockingPager = Option<FsPager<std::fs::ReadDir>>;
+    type Lister = Option<FsLister<tokio::fs::ReadDir>>;
+    type BlockingLister = Option<FsLister<std::fs::ReadDir>>;
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -446,7 +446,7 @@ impl Accessor for FsBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let p = self.root.join(path.trim_end_matches('/'));
 
         let f = match tokio::fs::read_dir(&p).await {
@@ -460,7 +460,7 @@ impl Accessor for FsBackend {
             }
         };
 
-        let rd = FsPager::new(&self.root, f, args.limit());
+        let rd = FsLister::new(&self.root, f, args.limit());
 
         Ok((RpList::default(), Some(rd)))
     }
@@ -617,7 +617,7 @@ impl Accessor for FsBackend {
         }
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let p = self.root.join(path.trim_end_matches('/'));
 
         let f = match std::fs::read_dir(p) {
@@ -631,7 +631,7 @@ impl Accessor for FsBackend {
             }
         };
 
-        let rd = FsPager::new(&self.root, f, args.limit());
+        let rd = FsLister::new(&self.root, f, args.limit());
 
         Ok((RpList::default(), Some(rd)))
     }
diff --git a/core/src/services/fs/lister.rs b/core/src/services/fs/lister.rs
index 4413d1ffe..403f674e8 100644
--- a/core/src/services/fs/lister.rs
+++ b/core/src/services/fs/lister.rs
@@ -25,14 +25,14 @@ use crate::EntryMode;
 use crate::Metadata;
 use crate::Result;
 
-pub struct FsPager<P> {
+pub struct FsLister<P> {
     root: PathBuf,
 
     size: usize,
     rd: P,
 }
 
-impl<P> FsPager<P> {
+impl<P> FsLister<P> {
     pub fn new(root: &Path, rd: P, limit: Option<usize>) -> Self {
         Self {
             root: root.to_owned(),
@@ -43,7 +43,7 @@ impl<P> FsPager<P> {
 }
 
 #[async_trait]
-impl oio::List for FsPager<tokio::fs::ReadDir> {
+impl oio::List for FsLister<tokio::fs::ReadDir> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
@@ -84,7 +84,7 @@ impl oio::List for FsPager<tokio::fs::ReadDir> {
     }
 }
 
-impl oio::BlockingList for FsPager<std::fs::ReadDir> {
+impl oio::BlockingList for FsLister<std::fs::ReadDir> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
diff --git a/core/src/services/fs/mod.rs b/core/src/services/fs/mod.rs
index 28aae0814..fd51bffc9 100644
--- a/core/src/services/fs/mod.rs
+++ b/core/src/services/fs/mod.rs
@@ -18,5 +18,5 @@
 mod backend;
 pub use backend::FsBuilder as Fs;
 
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/ftp/backend.rs b/core/src/services/ftp/backend.rs
index 0b25fd68c..787da112f 100644
--- a/core/src/services/ftp/backend.rs
+++ b/core/src/services/ftp/backend.rs
@@ -37,7 +37,7 @@ use suppaftp::FtpStream;
 use suppaftp::Status;
 use tokio::sync::OnceCell;
 
-use super::pager::FtpPager;
+use super::lister::FtpLister;
 use super::util::FtpReader;
 use super::writer::FtpWriter;
 use crate::raw::*;
@@ -284,8 +284,8 @@ impl Accessor for FtpBackend {
     type BlockingReader = ();
     type Writer = FtpWriters;
     type BlockingWriter = ();
-    type Pager = FtpPager;
-    type BlockingPager = ();
+    type Lister = FtpLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -444,7 +444,7 @@ impl Accessor for FtpBackend {
         Ok(RpDelete::default())
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let mut ftp_stream = self.ftp_connect(Operation::List).await?;
 
         let pathname = if path == "/" { None } else { Some(path) };
@@ -452,7 +452,7 @@ impl Accessor for FtpBackend {
 
         Ok((
             RpList::default(),
-            FtpPager::new(if path == "/" { "" } else { path }, files, args.limit()),
+            FtpLister::new(if path == "/" { "" } else { path }, files, args.limit()),
         ))
     }
 }
diff --git a/core/src/services/ftp/lister.rs b/core/src/services/ftp/lister.rs
index cb0e4d83f..ba0892e8c 100644
--- a/core/src/services/ftp/lister.rs
+++ b/core/src/services/ftp/lister.rs
@@ -25,13 +25,13 @@ use suppaftp::list::File;
 use crate::raw::*;
 use crate::*;
 
-pub struct FtpPager {
+pub struct FtpLister {
     path: String,
     size: usize,
     file_iter: IntoIter<String>,
 }
 
-impl FtpPager {
+impl FtpLister {
     pub fn new(path: &str, files: Vec<String>, limit: Option<usize>) -> Self {
         Self {
             path: path.to_string(),
@@ -42,7 +42,7 @@ impl FtpPager {
 }
 
 #[async_trait]
-impl oio::List for FtpPager {
+impl oio::List for FtpLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
diff --git a/core/src/services/ftp/mod.rs b/core/src/services/ftp/mod.rs
index 963732fd4..85d3d8da9 100644
--- a/core/src/services/ftp/mod.rs
+++ b/core/src/services/ftp/mod.rs
@@ -20,6 +20,6 @@ pub use backend::FtpBuilder as Ftp;
 pub use backend::FtpConfig;
 
 mod err;
-mod pager;
+mod lister;
 mod util;
 mod writer;
diff --git a/core/src/services/gcs/backend.rs b/core/src/services/gcs/backend.rs
index 8fb6eb9a4..c2340b7c5 100644
--- a/core/src/services/gcs/backend.rs
+++ b/core/src/services/gcs/backend.rs
@@ -32,7 +32,7 @@ use serde_json;
 
 use super::core::GcsCore;
 use super::error::parse_error;
-use super::pager::GcsPager;
+use super::lister::GcsLister;
 use super::writer::GcsWriter;
 use crate::raw::*;
 use crate::services::gcs::writer::GcsWriters;
@@ -312,8 +312,8 @@ impl Accessor for GcsBackend {
     type BlockingReader = ();
     type Writer = GcsWriters;
     type BlockingWriter = ();
-    type Pager = GcsPager;
-    type BlockingPager = ();
+    type Lister = GcsLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -471,10 +471,10 @@ impl Accessor for GcsBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            GcsPager::new(
+            GcsLister::new(
                 self.core.clone(),
                 path,
                 args.recursive(),
diff --git a/core/src/services/gcs/lister.rs b/core/src/services/gcs/lister.rs
index 3f27b31ba..97496f353 100644
--- a/core/src/services/gcs/lister.rs
+++ b/core/src/services/gcs/lister.rs
@@ -26,9 +26,9 @@ use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
 
-/// GcsPager takes over task of listing objects and
+/// GcsLister takes over task of listing objects and
 /// helps walking directory
-pub struct GcsPager {
+pub struct GcsLister {
     core: Arc<GcsCore>,
 
     path: String,
@@ -43,7 +43,7 @@ pub struct GcsPager {
     done: bool,
 }
 
-impl GcsPager {
+impl GcsLister {
     /// Generate a new directory walker
     pub fn new(
         core: Arc<GcsCore>,
@@ -68,7 +68,7 @@ impl GcsPager {
 }
 
 #[async_trait]
-impl oio::List for GcsPager {
+impl oio::List for GcsLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/gcs/mod.rs b/core/src/services/gcs/mod.rs
index 6f95267c4..4552a46f9 100644
--- a/core/src/services/gcs/mod.rs
+++ b/core/src/services/gcs/mod.rs
@@ -20,6 +20,6 @@ pub use backend::GcsBuilder as Gcs;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod uri;
 mod writer;
diff --git a/core/src/services/gdrive/backend.rs b/core/src/services/gdrive/backend.rs
index 029f79a08..f0d9da1b1 100644
--- a/core/src/services/gdrive/backend.rs
+++ b/core/src/services/gdrive/backend.rs
@@ -27,7 +27,7 @@ use serde_json::json;
 
 use super::core::GdriveCore;
 use super::error::parse_error;
-use super::pager::GdrivePager;
+use super::lister::GdriveLister;
 use super::writer::GdriveWriter;
 use crate::raw::*;
 use crate::services::gdrive::core::GdriveFile;
@@ -45,8 +45,8 @@ impl Accessor for GdriveBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<GdriveWriter>;
     type BlockingWriter = ();
-    type Pager = GdrivePager;
-    type BlockingPager = ();
+    type Lister = GdriveLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut ma = AccessorInfo::default();
@@ -212,10 +212,10 @@ impl Accessor for GdriveBackend {
         }
     }
 
-    async fn list(&self, path: &str, _args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, _args: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            GdrivePager::new(path.into(), self.core.clone()),
+            GdriveLister::new(path.into(), self.core.clone()),
         ))
     }
 
diff --git a/core/src/services/gdrive/lister.rs b/core/src/services/gdrive/lister.rs
index 7cc60744d..53d8f86c4 100644
--- a/core/src/services/gdrive/lister.rs
+++ b/core/src/services/gdrive/lister.rs
@@ -30,14 +30,14 @@ use crate::raw::oio::{self};
 use crate::EntryMode;
 use crate::Metadata;
 use crate::Result;
-pub struct GdrivePager {
+pub struct GdriveLister {
     path: String,
     core: Arc<GdriveCore>,
     next_page_token: Option<String>,
     done: bool,
 }
 
-impl GdrivePager {
+impl GdriveLister {
     pub fn new(path: String, core: Arc<GdriveCore>) -> Self {
         Self {
             path,
@@ -49,7 +49,7 @@ impl GdrivePager {
 }
 
 #[async_trait]
-impl oio::List for GdrivePager {
+impl oio::List for GdriveLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/gdrive/mod.rs b/core/src/services/gdrive/mod.rs
index 2ef0caaec..015f177b2 100644
--- a/core/src/services/gdrive/mod.rs
+++ b/core/src/services/gdrive/mod.rs
@@ -21,5 +21,5 @@ mod core;
 mod error;
 
 pub use builder::GdriveBuilder as Gdrive;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/ghac/backend.rs b/core/src/services/ghac/backend.rs
index b163a8f90..92d105892 100644
--- a/core/src/services/ghac/backend.rs
+++ b/core/src/services/ghac/backend.rs
@@ -230,8 +230,8 @@ impl Accessor for GhacBackend {
     type BlockingReader = ();
     type Writer = GhacWriter;
     type BlockingWriter = ();
-    type Pager = ();
-    type BlockingPager = ();
+    type Lister = ();
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
diff --git a/core/src/services/hdfs/backend.rs b/core/src/services/hdfs/backend.rs
index cbcaea45f..acb8d452f 100644
--- a/core/src/services/hdfs/backend.rs
+++ b/core/src/services/hdfs/backend.rs
@@ -24,7 +24,7 @@ use std::sync::Arc;
 use async_trait::async_trait;
 use log::debug;
 
-use super::pager::HdfsPager;
+use super::lister::HdfsLister;
 use super::writer::HdfsWriter;
 use crate::raw::*;
 use crate::*;
@@ -161,8 +161,8 @@ impl Accessor for HdfsBackend {
     type BlockingReader = oio::StdReader<hdrs::File>;
     type Writer = HdfsWriter<hdrs::AsyncFile>;
     type BlockingWriter = HdfsWriter<hdrs::File>;
-    type Pager = Option<HdfsPager>;
-    type BlockingPager = Option<HdfsPager>;
+    type Lister = Option<HdfsLister>;
+    type BlockingLister = Option<HdfsLister>;
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -296,7 +296,7 @@ impl Accessor for HdfsBackend {
         Ok(RpDelete::default())
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let p = build_rooted_abs_path(&self.root, path);
 
         let f = match self.client.read_dir(&p) {
@@ -310,7 +310,7 @@ impl Accessor for HdfsBackend {
             }
         };
 
-        let rd = HdfsPager::new(&self.root, f, args.limit());
+        let rd = HdfsLister::new(&self.root, f, args.limit());
 
         Ok((RpList::default(), Some(rd)))
     }
@@ -413,7 +413,7 @@ impl Accessor for HdfsBackend {
         Ok(RpDelete::default())
     }
 
-    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
+    fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingLister)> {
         let p = build_rooted_abs_path(&self.root, path);
 
         let f = match self.client.read_dir(&p) {
@@ -427,7 +427,7 @@ impl Accessor for HdfsBackend {
             }
         };
 
-        let rd = HdfsPager::new(&self.root, f, args.limit());
+        let rd = HdfsLister::new(&self.root, f, args.limit());
 
         Ok((RpList::default(), Some(rd)))
     }
diff --git a/core/src/services/hdfs/lister.rs b/core/src/services/hdfs/lister.rs
index edd14439e..5e31c1e14 100644
--- a/core/src/services/hdfs/lister.rs
+++ b/core/src/services/hdfs/lister.rs
@@ -22,14 +22,14 @@ use crate::EntryMode;
 use crate::Metadata;
 use crate::Result;
 
-pub struct HdfsPager {
+pub struct HdfsLister {
     root: String,
 
     size: usize,
     rd: hdrs::Readdir,
 }
 
-impl HdfsPager {
+impl HdfsLister {
     pub fn new(root: &str, rd: hdrs::Readdir, limit: Option<usize>) -> Self {
         Self {
             root: root.to_string(),
@@ -41,7 +41,7 @@ impl HdfsPager {
 }
 
 #[async_trait]
-impl oio::List for HdfsPager {
+impl oio::List for HdfsLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
@@ -72,7 +72,7 @@ impl oio::List for HdfsPager {
     }
 }
 
-impl oio::BlockingList for HdfsPager {
+impl oio::BlockingList for HdfsLister {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
diff --git a/core/src/services/hdfs/mod.rs b/core/src/services/hdfs/mod.rs
index 996a654fa..da4ae5c63 100644
--- a/core/src/services/hdfs/mod.rs
+++ b/core/src/services/hdfs/mod.rs
@@ -18,5 +18,5 @@
 mod backend;
 pub use backend::HdfsBuilder as Hdfs;
 
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/http/backend.rs b/core/src/services/http/backend.rs
index 879f691b2..b10eba4a8 100644
--- a/core/src/services/http/backend.rs
+++ b/core/src/services/http/backend.rs
@@ -228,8 +228,8 @@ impl Accessor for HttpBackend {
     type BlockingReader = ();
     type Writer = ();
     type BlockingWriter = ();
-    type Pager = ();
-    type BlockingPager = ();
+    type Lister = ();
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut ma = AccessorInfo::default();
diff --git a/core/src/services/ipfs/backend.rs b/core/src/services/ipfs/backend.rs
index 6b8f52310..2c1681dbe 100644
--- a/core/src/services/ipfs/backend.rs
+++ b/core/src/services/ipfs/backend.rs
@@ -165,8 +165,8 @@ impl Accessor for IpfsBackend {
     type BlockingReader = ();
     type Writer = ();
     type BlockingWriter = ();
-    type Pager = DirStream;
-    type BlockingPager = ();
+    type Lister = DirStream;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut ma = AccessorInfo::default();
@@ -350,7 +350,7 @@ impl Accessor for IpfsBackend {
         }
     }
 
-    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
             DirStream::new(Arc::new(self.clone()), path),
diff --git a/core/src/services/ipmfs/backend.rs b/core/src/services/ipmfs/backend.rs
index ef39c17f0..26c06d569 100644
--- a/core/src/services/ipmfs/backend.rs
+++ b/core/src/services/ipmfs/backend.rs
@@ -27,7 +27,7 @@ use http::StatusCode;
 use serde::Deserialize;
 
 use super::error::parse_error;
-use super::pager::IpmfsPager;
+use super::lister::IpmfsLister;
 use super::writer::IpmfsWriter;
 use crate::raw::*;
 use crate::*;
@@ -66,8 +66,8 @@ impl Accessor for IpmfsBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<IpmfsWriter>;
     type BlockingWriter = ();
-    type Pager = IpmfsPager;
-    type BlockingPager = ();
+    type Lister = IpmfsLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -170,10 +170,10 @@ impl Accessor for IpmfsBackend {
         }
     }
 
-    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, _: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            IpmfsPager::new(Arc::new(self.clone()), &self.root, path),
+            IpmfsLister::new(Arc::new(self.clone()), &self.root, path),
         ))
     }
 }
diff --git a/core/src/services/ipmfs/lister.rs b/core/src/services/ipmfs/lister.rs
index 61c60e6cf..535c982b1 100644
--- a/core/src/services/ipmfs/lister.rs
+++ b/core/src/services/ipmfs/lister.rs
@@ -28,14 +28,14 @@ use crate::EntryMode;
 use crate::Metadata;
 use crate::Result;
 
-pub struct IpmfsPager {
+pub struct IpmfsLister {
     backend: Arc<IpmfsBackend>,
     root: String,
     path: String,
     consumed: bool,
 }
 
-impl IpmfsPager {
+impl IpmfsLister {
     pub fn new(backend: Arc<IpmfsBackend>, root: &str, path: &str) -> Self {
         Self {
             backend,
@@ -47,7 +47,7 @@ impl IpmfsPager {
 }
 
 #[async_trait]
-impl oio::List for IpmfsPager {
+impl oio::List for IpmfsLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.consumed {
             return Ok(None);
diff --git a/core/src/services/ipmfs/mod.rs b/core/src/services/ipmfs/mod.rs
index b788d6482..2a7ce5c0a 100644
--- a/core/src/services/ipmfs/mod.rs
+++ b/core/src/services/ipmfs/mod.rs
@@ -20,5 +20,5 @@ mod builder;
 pub use builder::IpmfsBuilder as Ipmfs;
 
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/obs/backend.rs b/core/src/services/obs/backend.rs
index f28363af8..6cfe43e4f 100644
--- a/core/src/services/obs/backend.rs
+++ b/core/src/services/obs/backend.rs
@@ -29,7 +29,7 @@ use reqsign::HuaweicloudObsSigner;
 
 use super::core::ObsCore;
 use super::error::parse_error;
-use super::pager::ObsPager;
+use super::lister::ObsLister;
 use super::writer::ObsWriter;
 use crate::raw::*;
 use crate::services::obs::writer::ObsWriters;
@@ -252,8 +252,8 @@ impl Accessor for ObsBackend {
     type BlockingReader = ();
     type Writer = ObsWriters;
     type BlockingWriter = ();
-    type Pager = ObsPager;
-    type BlockingPager = ();
+    type Lister = ObsLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -427,10 +427,10 @@ impl Accessor for ObsBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            ObsPager::new(self.core.clone(), path, args.recursive(), args.limit()),
+            ObsLister::new(self.core.clone(), path, args.recursive(), args.limit()),
         ))
     }
 }
diff --git a/core/src/services/obs/lister.rs b/core/src/services/obs/lister.rs
index 7aa7ae82b..c96f51e3e 100644
--- a/core/src/services/obs/lister.rs
+++ b/core/src/services/obs/lister.rs
@@ -31,7 +31,7 @@ use crate::ErrorKind;
 use crate::Metadata;
 use crate::Result;
 
-pub struct ObsPager {
+pub struct ObsLister {
     core: Arc<ObsCore>,
     path: String,
     delimiter: &'static str,
@@ -41,7 +41,7 @@ pub struct ObsPager {
     done: bool,
 }
 
-impl ObsPager {
+impl ObsLister {
     pub fn new(core: Arc<ObsCore>, path: &str, recursive: bool, limit: Option<usize>) -> Self {
         let delimiter = if recursive { "" } else { "/" };
 
@@ -58,7 +58,7 @@ impl ObsPager {
 }
 
 #[async_trait]
-impl oio::List for ObsPager {
+impl oio::List for ObsLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/obs/mod.rs b/core/src/services/obs/mod.rs
index 9e44b65ef..f8a78290f 100644
--- a/core/src/services/obs/mod.rs
+++ b/core/src/services/obs/mod.rs
@@ -20,5 +20,5 @@ pub use backend::ObsBuilder as Obs;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/onedrive/backend.rs b/core/src/services/onedrive/backend.rs
index 8ed92ab4a..bef175735 100644
--- a/core/src/services/onedrive/backend.rs
+++ b/core/src/services/onedrive/backend.rs
@@ -29,7 +29,7 @@ use super::graph_model::CreateDirPayload;
 use super::graph_model::ItemType;
 use super::graph_model::OneDriveUploadSessionCreationRequestBody;
 use super::graph_model::OnedriveGetItemBody;
-use super::pager::OnedrivePager;
+use super::lister::OnedriveLister;
 use super::writer::OneDriveWriter;
 use crate::raw::*;
 use crate::*;
@@ -66,8 +66,8 @@ impl Accessor for OnedriveBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<OneDriveWriter>;
     type BlockingWriter = ();
-    type Pager = OnedrivePager;
-    type BlockingPager = ();
+    type Lister = OnedriveLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut ma = AccessorInfo::default();
@@ -162,10 +162,11 @@ impl Accessor for OnedriveBackend {
         }
     }
 
-    async fn list(&self, path: &str, _op_list: OpList) -> Result<(RpList, Self::Pager)> {
-        let pager: OnedrivePager = OnedrivePager::new(self.root.clone(), path.into(), self.clone());
+    async fn list(&self, path: &str, _op_list: OpList) -> Result<(RpList, Self::Lister)> {
+        let lister: OnedriveLister =
+            OnedriveLister::new(self.root.clone(), path.into(), self.clone());
 
-        Ok((RpList::default(), pager))
+        Ok((RpList::default(), lister))
     }
 
     async fn create_dir(&self, path: &str, _: OpCreateDir) -> Result<RpCreateDir> {
diff --git a/core/src/services/onedrive/lister.rs b/core/src/services/onedrive/lister.rs
index b87a07252..90daeb866 100644
--- a/core/src/services/onedrive/lister.rs
+++ b/core/src/services/onedrive/lister.rs
@@ -32,7 +32,7 @@ use crate::EntryMode;
 use crate::Metadata;
 use crate::Result;
 
-pub struct OnedrivePager {
+pub struct OnedriveLister {
     root: String,
     path: String,
     backend: OnedriveBackend,
@@ -40,7 +40,7 @@ pub struct OnedrivePager {
     done: bool,
 }
 
-impl OnedrivePager {
+impl OnedriveLister {
     const DRIVE_ROOT_PREFIX: &'static str = "/drive/root:";
 
     pub(crate) fn new(root: String, path: String, backend: OnedriveBackend) -> Self {
@@ -55,7 +55,7 @@ impl OnedrivePager {
 }
 
 #[async_trait]
-impl oio::List for OnedrivePager {
+impl oio::List for OnedriveLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
@@ -112,7 +112,7 @@ impl oio::List for OnedrivePager {
     }
 }
 
-impl OnedrivePager {
+impl OnedriveLister {
     async fn onedrive_get(&mut self) -> Result<Response<IncomingAsyncBody>> {
         let request_url = if let Some(next_link) = &self.next_link {
             let next_link_clone = next_link.clone();
diff --git a/core/src/services/onedrive/mod.rs b/core/src/services/onedrive/mod.rs
index 8a0160019..359f1d84e 100644
--- a/core/src/services/onedrive/mod.rs
+++ b/core/src/services/onedrive/mod.rs
@@ -21,5 +21,5 @@ mod error;
 mod graph_model;
 
 pub use builder::OnedriveBuilder as Onedrive;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/oss/backend.rs b/core/src/services/oss/backend.rs
index 8fd43971b..c5fc3441c 100644
--- a/core/src/services/oss/backend.rs
+++ b/core/src/services/oss/backend.rs
@@ -32,7 +32,7 @@ use reqsign::AliyunOssSigner;
 
 use super::core::*;
 use super::error::parse_error;
-use super::pager::OssPager;
+use super::lister::OssLister;
 use super::writer::OssWriter;
 use crate::raw::*;
 use crate::services::oss::writer::OssWriters;
@@ -380,8 +380,8 @@ impl Accessor for OssBackend {
     type BlockingReader = ();
     type Writer = OssWriters;
     type BlockingWriter = ();
-    type Pager = OssPager;
-    type BlockingPager = ();
+    type Lister = OssLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -544,10 +544,10 @@ impl Accessor for OssBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            OssPager::new(
+            OssLister::new(
                 self.core.clone(),
                 path,
                 args.recursive(),
diff --git a/core/src/services/oss/lister.rs b/core/src/services/oss/lister.rs
index 67d217abe..7b4b0bce3 100644
--- a/core/src/services/oss/lister.rs
+++ b/core/src/services/oss/lister.rs
@@ -32,7 +32,7 @@ use crate::ErrorKind;
 use crate::Metadata;
 use crate::Result;
 
-pub struct OssPager {
+pub struct OssLister {
     core: Arc<OssCore>,
 
     path: String,
@@ -46,7 +46,7 @@ pub struct OssPager {
     done: bool,
 }
 
-impl OssPager {
+impl OssLister {
     pub fn new(
         core: Arc<OssCore>,
         path: &str,
@@ -69,7 +69,7 @@ impl OssPager {
 }
 
 #[async_trait]
-impl oio::List for OssPager {
+impl oio::List for OssLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/oss/mod.rs b/core/src/services/oss/mod.rs
index 9bfd1692c..3954a9885 100644
--- a/core/src/services/oss/mod.rs
+++ b/core/src/services/oss/mod.rs
@@ -20,5 +20,5 @@ pub use backend::OssBuilder as Oss;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs
index 49cff44b3..7e1ccfc85 100644
--- a/core/src/services/s3/backend.rs
+++ b/core/src/services/s3/backend.rs
@@ -41,7 +41,7 @@ use serde::Deserialize;
 use super::core::*;
 use super::error::parse_error;
 use super::error::parse_s3_error_code;
-use super::pager::S3Pager;
+use super::lister::S3Lister;
 use super::writer::S3Writer;
 use super::writer::S3Writers;
 use crate::raw::*;
@@ -969,8 +969,8 @@ impl Accessor for S3Backend {
     type BlockingReader = ();
     type Writer = S3Writers;
     type BlockingWriter = ();
-    type Pager = S3Pager;
-    type BlockingPager = ();
+    type Lister = S3Lister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -1133,10 +1133,10 @@ impl Accessor for S3Backend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         Ok((
             RpList::default(),
-            S3Pager::new(
+            S3Lister::new(
                 self.core.clone(),
                 path,
                 args.recursive(),
diff --git a/core/src/services/s3/lister.rs b/core/src/services/s3/lister.rs
index 4c5c4f10c..431abd8f1 100644
--- a/core/src/services/s3/lister.rs
+++ b/core/src/services/s3/lister.rs
@@ -29,7 +29,7 @@ use crate::EntryMode;
 use crate::Metadata;
 use crate::Result;
 
-pub struct S3Pager {
+pub struct S3Lister {
     core: Arc<S3Core>,
 
     path: String,
@@ -43,7 +43,7 @@ pub struct S3Pager {
     done: bool,
 }
 
-impl S3Pager {
+impl S3Lister {
     pub fn new(
         core: Arc<S3Core>,
         path: &str,
@@ -67,7 +67,7 @@ impl S3Pager {
 }
 
 #[async_trait]
-impl oio::List for S3Pager {
+impl oio::List for S3Lister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/s3/mod.rs b/core/src/services/s3/mod.rs
index 9e343f9c1..4e2f283cb 100644
--- a/core/src/services/s3/mod.rs
+++ b/core/src/services/s3/mod.rs
@@ -21,5 +21,5 @@ pub use backend::S3Config;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/sftp/backend.rs b/core/src/services/sftp/backend.rs
index 7152f0267..76f792e19 100644
--- a/core/src/services/sftp/backend.rs
+++ b/core/src/services/sftp/backend.rs
@@ -33,7 +33,7 @@ use openssh_sftp_client::SftpOptions;
 
 use super::error::is_not_found;
 use super::error::is_sftp_protocol_error;
-use super::pager::SftpPager;
+use super::lister::SftpLister;
 use super::writer::SftpWriter;
 use crate::raw::*;
 use crate::*;
@@ -247,8 +247,8 @@ impl Accessor for SftpBackend {
     type BlockingReader = ();
     type Writer = SftpWriter;
     type BlockingWriter = ();
-    type Pager = Option<SftpPager>;
-    type BlockingPager = ();
+    type Lister = Option<SftpLister>;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -446,7 +446,7 @@ impl Accessor for SftpBackend {
         Ok(RpDelete::default())
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         let client = self.connect().await?;
         let mut fs = client.fs();
         fs.set_cwd(&self.root);
@@ -467,7 +467,7 @@ impl Accessor for SftpBackend {
 
         Ok((
             RpList::default(),
-            Some(SftpPager::new(dir, path.to_owned(), args.limit())),
+            Some(SftpLister::new(dir, path.to_owned(), args.limit())),
         ))
     }
 }
diff --git a/core/src/services/sftp/lister.rs b/core/src/services/sftp/lister.rs
index db445e918..b130629ca 100644
--- a/core/src/services/sftp/lister.rs
+++ b/core/src/services/sftp/lister.rs
@@ -25,19 +25,19 @@ use openssh_sftp_client::fs::ReadDir;
 use crate::raw::oio;
 use crate::Result;
 
-pub struct SftpPager {
+pub struct SftpLister {
     dir: Pin<Box<ReadDir>>,
     prefix: String,
     limit: usize,
 }
 
-impl SftpPager {
+impl SftpLister {
     pub fn new(dir: ReadDir, path: String, limit: Option<usize>) -> Self {
         let prefix = if path == "/" { "".to_owned() } else { path };
 
         let limit = limit.unwrap_or(usize::MAX);
 
-        SftpPager {
+        SftpLister {
             dir: Box::pin(dir),
             prefix,
             limit,
@@ -46,7 +46,7 @@ impl SftpPager {
 }
 
 #[async_trait]
-impl oio::List for SftpPager {
+impl oio::List for SftpLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.limit == 0 {
             return Ok(None);
diff --git a/core/src/services/sftp/mod.rs b/core/src/services/sftp/mod.rs
index 8672e88da..fcc74afc2 100644
--- a/core/src/services/sftp/mod.rs
+++ b/core/src/services/sftp/mod.rs
@@ -20,6 +20,6 @@ pub use backend::SftpConfig;
 
 mod backend;
 mod error;
-mod pager;
+mod lister;
 mod utils;
 mod writer;
diff --git a/core/src/services/supabase/backend.rs b/core/src/services/supabase/backend.rs
index b96bbd3ef..3831ed0a0 100644
--- a/core/src/services/supabase/backend.rs
+++ b/core/src/services/supabase/backend.rs
@@ -160,9 +160,9 @@ impl Accessor for SupabaseBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<SupabaseWriter>;
     type BlockingWriter = ();
-    // todo: implement Pager to support list and scan
-    type Pager = ();
-    type BlockingPager = ();
+    // todo: implement Lister to support list and scan
+    type Lister = ();
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
diff --git a/core/src/services/swift/backend.rs b/core/src/services/swift/backend.rs
index 50cec342c..6f6b22dba 100644
--- a/core/src/services/swift/backend.rs
+++ b/core/src/services/swift/backend.rs
@@ -26,7 +26,7 @@ use log::debug;
 
 use super::core::SwiftCore;
 use super::error::parse_error;
-use super::pager::SwiftPager;
+use super::lister::SwiftLister;
 use super::writer::SwiftWriter;
 use crate::raw::*;
 use crate::*;
@@ -218,8 +218,8 @@ impl Accessor for SwiftBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<SwiftWriter>;
     type BlockingWriter = ();
-    type Pager = SwiftPager;
-    type BlockingPager = ();
+    type Lister = SwiftLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -328,8 +328,8 @@ impl Accessor for SwiftBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
-        let op = SwiftPager::new(self.core.clone(), path.to_string(), args.recursive());
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
+        let op = SwiftLister::new(self.core.clone(), path.to_string(), args.recursive());
 
         Ok((RpList::default(), op))
     }
diff --git a/core/src/services/swift/lister.rs b/core/src/services/swift/lister.rs
index 96da007f6..d69bb42b5 100644
--- a/core/src/services/swift/lister.rs
+++ b/core/src/services/swift/lister.rs
@@ -25,14 +25,14 @@ use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
 
-pub struct SwiftPager {
+pub struct SwiftLister {
     core: Arc<SwiftCore>,
     path: String,
     delimiter: &'static str,
     done: bool,
 }
 
-impl SwiftPager {
+impl SwiftLister {
     pub fn new(core: Arc<SwiftCore>, path: String, recursive: bool) -> Self {
         let delimiter = if recursive { "" } else { "/" };
         Self {
@@ -45,7 +45,7 @@ impl SwiftPager {
 }
 
 #[async_trait]
-impl oio::List for SwiftPager {
+impl oio::List for SwiftLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/swift/mod.rs b/core/src/services/swift/mod.rs
index 7e5f93525..9cfeb92e0 100644
--- a/core/src/services/swift/mod.rs
+++ b/core/src/services/swift/mod.rs
@@ -20,5 +20,5 @@ pub use backend::SwiftBuilder as Swift;
 
 mod core;
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/vercel_artifacts/backend.rs b/core/src/services/vercel_artifacts/backend.rs
index f205d3cc4..9af126444 100644
--- a/core/src/services/vercel_artifacts/backend.rs
+++ b/core/src/services/vercel_artifacts/backend.rs
@@ -49,8 +49,8 @@ impl Accessor for VercelArtifactsBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<VercelArtifactsWriter>;
     type BlockingWriter = ();
-    type Pager = ();
-    type BlockingPager = ();
+    type Lister = ();
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut ma = AccessorInfo::default();
diff --git a/core/src/services/webdav/backend.rs b/core/src/services/webdav/backend.rs
index 310c1a0fe..09e0f839a 100644
--- a/core/src/services/webdav/backend.rs
+++ b/core/src/services/webdav/backend.rs
@@ -31,8 +31,8 @@ use http::StatusCode;
 use log::debug;
 
 use super::error::parse_error;
-use super::pager::Multistatus;
-use super::pager::WebdavPager;
+use super::lister::Multistatus;
+use super::lister::WebdavLister;
 use super::writer::WebdavWriter;
 use crate::raw::*;
 use crate::*;
@@ -223,8 +223,8 @@ impl Accessor for WebdavBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<WebdavWriter>;
     type BlockingWriter = ();
-    type Pager = Option<WebdavPager>;
-    type BlockingPager = ();
+    type Lister = Option<WebdavLister>;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut ma = AccessorInfo::default();
@@ -378,7 +378,7 @@ impl Accessor for WebdavBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         if args.recursive() {
             return Err(Error::new(
                 ErrorKind::Unsupported,
@@ -400,7 +400,7 @@ impl Accessor for WebdavBackend {
 
                 Ok((
                     RpList::default(),
-                    Some(WebdavPager::new(&self.base_dir, &self.root, path, result)),
+                    Some(WebdavLister::new(&self.base_dir, &self.root, path, result)),
                 ))
             }
             StatusCode::NOT_FOUND if path.ends_with('/') => Ok((RpList::default(), None)),
diff --git a/core/src/services/webdav/lister.rs b/core/src/services/webdav/lister.rs
index b70200557..84e97aca6 100644
--- a/core/src/services/webdav/lister.rs
+++ b/core/src/services/webdav/lister.rs
@@ -22,14 +22,14 @@ use serde::Deserialize;
 
 use crate::raw::*;
 use crate::*;
-pub struct WebdavPager {
+pub struct WebdavLister {
     base_dir: String,
     root: String,
     path: String,
     multistates: Multistatus,
 }
 
-impl WebdavPager {
+impl WebdavLister {
     pub fn new(base_dir: &str, root: &str, path: &str, multistates: Multistatus) -> Self {
         Self {
             base_dir: base_dir.to_string(),
@@ -41,7 +41,7 @@ impl WebdavPager {
 }
 
 #[async_trait]
-impl oio::List for WebdavPager {
+impl oio::List for WebdavLister {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.multistates.response.is_empty() {
             return Ok(None);
diff --git a/core/src/services/webdav/mod.rs b/core/src/services/webdav/mod.rs
index 2b46724bb..d8d72c449 100644
--- a/core/src/services/webdav/mod.rs
+++ b/core/src/services/webdav/mod.rs
@@ -19,5 +19,5 @@ mod backend;
 pub use backend::WebdavBuilder as Webdav;
 
 mod error;
-mod pager;
+mod lister;
 mod writer;
diff --git a/core/src/services/webhdfs/backend.rs b/core/src/services/webhdfs/backend.rs
index b80423b6d..3352e47d0 100644
--- a/core/src/services/webhdfs/backend.rs
+++ b/core/src/services/webhdfs/backend.rs
@@ -29,12 +29,12 @@ use tokio::sync::OnceCell;
 
 use super::error::parse_error;
 use super::error::parse_error_msg;
+use super::lister::WebhdfsLister;
 use super::message::BooleanResp;
 use super::message::DirectoryListingWrapper;
 use super::message::FileStatusType;
 use super::message::FileStatusWrapper;
 use super::message::FileStatusesWrapper;
-use super::pager::WebhdfsPager;
 use super::writer::WebhdfsWriter;
 use crate::raw::*;
 use crate::*;
@@ -402,8 +402,8 @@ impl Accessor for WebhdfsBackend {
     type BlockingReader = ();
     type Writer = oio::OneShotWriter<WebhdfsWriter>;
     type BlockingWriter = ();
-    type Pager = WebhdfsPager;
-    type BlockingPager = ();
+    type Lister = WebhdfsLister;
+    type BlockingLister = ();
 
     fn info(&self) -> AccessorInfo {
         let mut am = AccessorInfo::default();
@@ -540,7 +540,7 @@ impl Accessor for WebhdfsBackend {
         }
     }
 
-    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Pager)> {
+    async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
         if args.recursive() {
             return Err(Error::new(
                 ErrorKind::Unsupported,
@@ -560,12 +560,12 @@ impl Accessor for WebhdfsBackend {
                         .map_err(new_json_deserialize_error)?
                         .directory_listing;
                     let file_statuses = directory_listing.partial_listing.file_statuses.file_status;
-                    let mut objects = WebhdfsPager::new(self.clone(), path, file_statuses);
+                    let mut objects = WebhdfsLister::new(self.clone(), path, file_statuses);
                     objects.set_remaining_entries(directory_listing.remaining_entries);
                     Ok((RpList::default(), objects))
                 }
                 StatusCode::NOT_FOUND => {
-                    let objects = WebhdfsPager::new(self.clone(), path, vec![]);
+                    let objects = WebhdfsLister::new(self.clone(), path, vec![]);
                     Ok((RpList::default(), objects))
                 }
                 _ => Err(parse_error(resp).await?),
@@ -580,11 +580,11 @@ impl Accessor for WebhdfsBackend {
                         .map_err(new_json_deserialize_error)?
                         .file_statuses
                         .file_status;
-                    let objects = WebhdfsPager::new(self.clone(), path, file_statuses);
+                    let objects = WebhdfsLister::new(self.clone(), path, file_statuses);
                     Ok((RpList::default(), objects))
                 }
                 StatusCode::NOT_FOUND => {
-                    let objects = WebhdfsPager::new(self.clone(), path, vec![]);
+                    let objects = WebhdfsLister::new(self.clone(), path, vec![]);
                     Ok((RpList::default(), objects))
                 }
                 _ => Err(parse_error(resp).await?),
diff --git a/core/src/services/webhdfs/lister.rs b/core/src/services/webhdfs/lister.rs
index 734754ed9..8c6579a5d 100644
--- a/core/src/services/webhdfs/lister.rs
+++ b/core/src/services/webhdfs/lister.rs
@@ -26,7 +26,7 @@ use super::message::FileStatusType;
 use crate::raw::*;
 use crate::*;
 
-pub struct WebhdfsPager {
+pub struct WebhdfsLister {
     backend: WebhdfsBackend,
     path: String,
     statuses: Vec<FileStatus>,
@@ -34,7 +34,7 @@ pub struct WebhdfsPager {
     remaining_entries: u32,
 }
 
-impl WebhdfsPager {
+impl WebhdfsLister {
     pub fn new(backend: WebhdfsBackend, path: &str, statuses: Vec<FileStatus>) -> Self {
         Self {
             backend,
@@ -51,7 +51,7 @@ impl WebhdfsPager {
 }
 
 #[async_trait]
-impl oio::List for WebhdfsPager {
+impl oio::List for WebhdfsLister {
     /// Returns the next page of entries.
     ///
     /// Note: default list status with batch, calling next will query for next batch if `remaining_entries` > 0.
@@ -98,7 +98,7 @@ impl oio::List for WebhdfsPager {
     }
 }
 
-impl WebhdfsPager {
+impl WebhdfsLister {
     /// Returns the next page of entries.
     fn webhdfs_get_next_list_statuses(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut entries = Vec::with_capacity(self.statuses.len());
diff --git a/core/src/services/webhdfs/mod.rs b/core/src/services/webhdfs/mod.rs
index 3a461ef8b..3bfbbc77d 100644
--- a/core/src/services/webhdfs/mod.rs
+++ b/core/src/services/webhdfs/mod.rs
@@ -19,6 +19,6 @@ mod backend;
 pub use backend::WebhdfsBuilder as Webhdfs;
 
 mod error;
+mod lister;
 mod message;
-mod pager;
 mod writer;
diff --git a/core/src/types/list.rs b/core/src/types/list.rs
index a61c4aa23..ac01496b3 100644
--- a/core/src/types/list.rs
+++ b/core/src/types/list.rs
@@ -30,7 +30,7 @@ use crate::raw::*;
 use crate::*;
 
 /// Future constructed by listing.
-type ListFuture = BoxFuture<'static, (oio::Pager, Result<Option<Vec<oio::Entry>>>)>;
+type ListFuture = BoxFuture<'static, (oio::Lister, Result<Option<Vec<oio::Entry>>>)>;
 /// Future constructed by stating.
 type StatFuture = BoxFuture<'static, (String, Result<RpStat>)>;
 
@@ -46,7 +46,7 @@ pub struct Lister {
     required_metakey: FlagSet<Metakey>,
 
     buf: VecDeque<oio::Entry>,
-    pager: Option<oio::Pager>,
+    lister: Option<oio::Lister>,
     listing: Option<ListFuture>,
     stating: Option<StatFuture>,
 }
@@ -60,14 +60,14 @@ impl Lister {
     /// Create a new lister.
     pub(crate) async fn create(acc: FusedAccessor, path: &str, args: OpList) -> Result<Self> {
         let required_metakey = args.metakey();
-        let (_, pager) = acc.list(path, args).await?;
+        let (_, lister) = acc.list(path, args).await?;
 
         Ok(Self {
             acc,
             required_metakey,
 
             buf: VecDeque::new(),
-            pager: Some(pager),
+            lister: Some(lister),
             listing: None,
             stating: None,
         })
@@ -113,7 +113,7 @@ impl Stream for Lister {
 
             return match res? {
                 Some(oes) => {
-                    self.pager = Some(op);
+                    self.lister = Some(op);
                     self.buf = oes.into();
                     self.poll_next(cx)
                 }
@@ -121,12 +121,12 @@ impl Stream for Lister {
             };
         }
 
-        match self.pager.take() {
-            Some(mut pager) => {
+        match self.lister.take() {
+            Some(mut lister) => {
                 let fut = async move {
-                    let res = pager.next().await;
+                    let res = lister.next().await;
 
-                    (pager, res)
+                    (lister, res)
                 };
                 self.listing = Some(Box::pin(fut));
                 self.poll_next(cx)
@@ -145,7 +145,7 @@ pub struct BlockingLister {
     /// required_metakey is the metakey required by users.
     required_metakey: FlagSet<Metakey>,
 
-    pager: Option<oio::BlockingLister>,
+    lister: Option<oio::BlockingLister>,
     buf: VecDeque<oio::Entry>,
 }
 
@@ -158,14 +158,14 @@ impl BlockingLister {
     /// Create a new lister.
     pub(crate) fn create(acc: FusedAccessor, path: &str, args: OpList) -> Result<Self> {
         let required_metakey = args.metakey();
-        let (_, pager) = acc.blocking_list(path, args)?;
+        let (_, lister) = acc.blocking_list(path, args)?;
 
         Ok(Self {
             acc,
             required_metakey,
 
             buf: VecDeque::new(),
-            pager: Some(pager),
+            lister: Some(lister),
         })
     }
 }
@@ -189,18 +189,18 @@ impl Iterator for BlockingLister {
             return Some(Ok(Entry::new(path, metadata)));
         }
 
-        let pager = match self.pager.as_mut() {
-            Some(pager) => pager,
+        let lister = match self.lister.as_mut() {
+            Some(lister) => lister,
             None => return None,
         };
 
-        self.buf = match pager.next() {
+        self.buf = match lister.next() {
             // Ideally, the convert from `Vec` to `VecDeque` will not do reallocation.
             //
             // However, this could be changed as described in [impl<T, A> From<Vec<T, A>> for VecDeque<T, A>](https://doc.rust-lang.org/std/collections/struct.VecDeque.html#impl-From%3CVec%3CT%2C%20A%3E%3E-for-VecDeque%3CT%2C%20A%3E)
             Ok(Some(entries)) => entries.into(),
             Ok(None) => {
-                self.pager = None;
+                self.lister = None;
                 return None;
             }
             Err(err) => return Some(Err(err)),


(incubator-opendal) 02/04: Rename pager to lister

Posted by xu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch refactor-list
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git

commit e4d4dc2ca82de1bd7561fb33fff98814b458f244
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Tue Nov 14 23:51:09 2023 +0800

    Rename pager to lister
    
    Signed-off-by: Xuanwo <gi...@xuanwo.io>
---
 core/src/services/alluxio/{pager.rs => lister.rs}  | 0
 core/src/services/azblob/{pager.rs => lister.rs}   | 0
 core/src/services/azdls/{pager.rs => lister.rs}    | 0
 core/src/services/azfile/{pager.rs => lister.rs}   | 0
 core/src/services/cos/{pager.rs => lister.rs}      | 0
 core/src/services/dbfs/{pager.rs => lister.rs}     | 0
 core/src/services/fs/{pager.rs => lister.rs}       | 0
 core/src/services/ftp/{pager.rs => lister.rs}      | 0
 core/src/services/gcs/{pager.rs => lister.rs}      | 0
 core/src/services/gdrive/{pager.rs => lister.rs}   | 0
 core/src/services/hdfs/{pager.rs => lister.rs}     | 0
 core/src/services/ipmfs/{pager.rs => lister.rs}    | 0
 core/src/services/obs/{pager.rs => lister.rs}      | 0
 core/src/services/onedrive/{pager.rs => lister.rs} | 0
 core/src/services/oss/{pager.rs => lister.rs}      | 0
 core/src/services/s3/{pager.rs => lister.rs}       | 0
 core/src/services/sftp/{pager.rs => lister.rs}     | 0
 core/src/services/swift/{pager.rs => lister.rs}    | 0
 core/src/services/webdav/{pager.rs => lister.rs}   | 0
 core/src/services/webhdfs/{pager.rs => lister.rs}  | 0
 20 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/core/src/services/alluxio/pager.rs b/core/src/services/alluxio/lister.rs
similarity index 100%
rename from core/src/services/alluxio/pager.rs
rename to core/src/services/alluxio/lister.rs
diff --git a/core/src/services/azblob/pager.rs b/core/src/services/azblob/lister.rs
similarity index 100%
rename from core/src/services/azblob/pager.rs
rename to core/src/services/azblob/lister.rs
diff --git a/core/src/services/azdls/pager.rs b/core/src/services/azdls/lister.rs
similarity index 100%
rename from core/src/services/azdls/pager.rs
rename to core/src/services/azdls/lister.rs
diff --git a/core/src/services/azfile/pager.rs b/core/src/services/azfile/lister.rs
similarity index 100%
rename from core/src/services/azfile/pager.rs
rename to core/src/services/azfile/lister.rs
diff --git a/core/src/services/cos/pager.rs b/core/src/services/cos/lister.rs
similarity index 100%
rename from core/src/services/cos/pager.rs
rename to core/src/services/cos/lister.rs
diff --git a/core/src/services/dbfs/pager.rs b/core/src/services/dbfs/lister.rs
similarity index 100%
rename from core/src/services/dbfs/pager.rs
rename to core/src/services/dbfs/lister.rs
diff --git a/core/src/services/fs/pager.rs b/core/src/services/fs/lister.rs
similarity index 100%
rename from core/src/services/fs/pager.rs
rename to core/src/services/fs/lister.rs
diff --git a/core/src/services/ftp/pager.rs b/core/src/services/ftp/lister.rs
similarity index 100%
rename from core/src/services/ftp/pager.rs
rename to core/src/services/ftp/lister.rs
diff --git a/core/src/services/gcs/pager.rs b/core/src/services/gcs/lister.rs
similarity index 100%
rename from core/src/services/gcs/pager.rs
rename to core/src/services/gcs/lister.rs
diff --git a/core/src/services/gdrive/pager.rs b/core/src/services/gdrive/lister.rs
similarity index 100%
rename from core/src/services/gdrive/pager.rs
rename to core/src/services/gdrive/lister.rs
diff --git a/core/src/services/hdfs/pager.rs b/core/src/services/hdfs/lister.rs
similarity index 100%
rename from core/src/services/hdfs/pager.rs
rename to core/src/services/hdfs/lister.rs
diff --git a/core/src/services/ipmfs/pager.rs b/core/src/services/ipmfs/lister.rs
similarity index 100%
rename from core/src/services/ipmfs/pager.rs
rename to core/src/services/ipmfs/lister.rs
diff --git a/core/src/services/obs/pager.rs b/core/src/services/obs/lister.rs
similarity index 100%
rename from core/src/services/obs/pager.rs
rename to core/src/services/obs/lister.rs
diff --git a/core/src/services/onedrive/pager.rs b/core/src/services/onedrive/lister.rs
similarity index 100%
rename from core/src/services/onedrive/pager.rs
rename to core/src/services/onedrive/lister.rs
diff --git a/core/src/services/oss/pager.rs b/core/src/services/oss/lister.rs
similarity index 100%
rename from core/src/services/oss/pager.rs
rename to core/src/services/oss/lister.rs
diff --git a/core/src/services/s3/pager.rs b/core/src/services/s3/lister.rs
similarity index 100%
rename from core/src/services/s3/pager.rs
rename to core/src/services/s3/lister.rs
diff --git a/core/src/services/sftp/pager.rs b/core/src/services/sftp/lister.rs
similarity index 100%
rename from core/src/services/sftp/pager.rs
rename to core/src/services/sftp/lister.rs
diff --git a/core/src/services/swift/pager.rs b/core/src/services/swift/lister.rs
similarity index 100%
rename from core/src/services/swift/pager.rs
rename to core/src/services/swift/lister.rs
diff --git a/core/src/services/webdav/pager.rs b/core/src/services/webdav/lister.rs
similarity index 100%
rename from core/src/services/webdav/pager.rs
rename to core/src/services/webdav/lister.rs
diff --git a/core/src/services/webhdfs/pager.rs b/core/src/services/webhdfs/lister.rs
similarity index 100%
rename from core/src/services/webhdfs/pager.rs
rename to core/src/services/webhdfs/lister.rs


(incubator-opendal) 01/04: Rename API to list

Posted by xu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch refactor-list
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git

commit 438b0db3de9168797dff97b4800d4d9421dd3d17
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Tue Nov 14 23:47:46 2023 +0800

    Rename API to list
    
    Signed-off-by: Xuanwo <gi...@xuanwo.io>
---
 core/src/layers/blocking.rs                        |  2 +-
 core/src/layers/complete.rs                        | 10 ++---
 core/src/layers/concurrent_limit.rs                |  4 +-
 core/src/layers/error_context.rs                   | 10 ++---
 core/src/layers/immutable_index.rs                 |  4 +-
 core/src/layers/logging.rs                         |  4 +-
 core/src/layers/madsim.rs                          |  2 +-
 core/src/layers/minitrace.rs                       | 10 ++---
 core/src/layers/oteltrace.rs                       |  4 +-
 core/src/layers/retry.rs                           | 12 +++---
 core/src/layers/timeout.rs                         |  6 +--
 core/src/layers/tracing.rs                         |  4 +-
 core/src/layers/type_eraser.rs                     |  4 +-
 core/src/raw/accessor.rs                           |  6 +--
 core/src/raw/adapters/kv/backend.rs                |  4 +-
 core/src/raw/adapters/typed_kv/backend.rs          |  4 +-
 core/src/raw/layer.rs                              |  4 +-
 core/src/raw/oio/{page => list}/api.rs             | 49 +++++++++++-----------
 core/src/raw/oio/{page => list}/into_flat_page.rs  | 12 +++---
 .../raw/oio/{page => list}/into_hierarchy_pager.rs |  8 ++--
 core/src/raw/oio/{page => list}/mod.rs             |  8 ++--
 core/src/raw/oio/mod.rs                            |  4 +-
 core/src/services/alluxio/pager.rs                 |  2 +-
 core/src/services/azblob/pager.rs                  |  2 +-
 core/src/services/azdls/pager.rs                   |  2 +-
 core/src/services/azfile/pager.rs                  |  2 +-
 core/src/services/cos/pager.rs                     |  2 +-
 core/src/services/dbfs/pager.rs                    |  2 +-
 core/src/services/fs/pager.rs                      |  4 +-
 core/src/services/ftp/pager.rs                     |  2 +-
 core/src/services/gcs/pager.rs                     |  2 +-
 core/src/services/gdrive/pager.rs                  |  2 +-
 core/src/services/hdfs/pager.rs                    |  4 +-
 core/src/services/ipfs/backend.rs                  |  2 +-
 core/src/services/ipmfs/pager.rs                   |  2 +-
 core/src/services/obs/pager.rs                     |  2 +-
 core/src/services/onedrive/pager.rs                |  2 +-
 core/src/services/oss/pager.rs                     |  2 +-
 core/src/services/s3/pager.rs                      |  2 +-
 core/src/services/sftp/pager.rs                    |  2 +-
 core/src/services/swift/pager.rs                   |  2 +-
 core/src/services/webdav/pager.rs                  |  2 +-
 core/src/services/webhdfs/pager.rs                 |  2 +-
 core/src/types/list.rs                             |  2 +-
 44 files changed, 111 insertions(+), 112 deletions(-)

diff --git a/core/src/layers/blocking.rs b/core/src/layers/blocking.rs
index 9fbf7c006..dc69dde94 100644
--- a/core/src/layers/blocking.rs
+++ b/core/src/layers/blocking.rs
@@ -313,7 +313,7 @@ impl<I: oio::Write + 'static> oio::BlockingWrite for BlockingWrapper<I> {
     }
 }
 
-impl<I: oio::Page> oio::BlockingPage for BlockingWrapper<I> {
+impl<I: oio::List> oio::BlockingList for BlockingWrapper<I> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.handle.block_on(self.inner.next())
     }
diff --git a/core/src/layers/complete.rs b/core/src/layers/complete.rs
index 5e22c4d1a..31aeb6238 100644
--- a/core/src/layers/complete.rs
+++ b/core/src/layers/complete.rs
@@ -634,10 +634,10 @@ pub enum CompletePager<A: Accessor, P> {
 }
 
 #[async_trait]
-impl<A, P> oio::Page for CompletePager<A, P>
+impl<A, P> oio::List for CompletePager<A, P>
 where
     A: Accessor<Pager = P>,
-    P: oio::Page,
+    P: oio::List,
 {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         use CompletePager::*;
@@ -650,10 +650,10 @@ where
     }
 }
 
-impl<A, P> oio::BlockingPage for CompletePager<A, P>
+impl<A, P> oio::BlockingList for CompletePager<A, P>
 where
     A: Accessor<BlockingPager = P>,
-    P: oio::BlockingPage,
+    P: oio::BlockingList,
 {
     fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         use CompletePager::*;
@@ -771,7 +771,7 @@ mod tests {
         type Writer = oio::Writer;
         type BlockingWriter = oio::BlockingWriter;
         type Pager = oio::Pager;
-        type BlockingPager = oio::BlockingPager;
+        type BlockingPager = oio::BlockingLister;
 
         fn info(&self) -> AccessorInfo {
             let mut info = AccessorInfo::default();
diff --git a/core/src/layers/concurrent_limit.rs b/core/src/layers/concurrent_limit.rs
index c20ef4108..a9794960b 100644
--- a/core/src/layers/concurrent_limit.rs
+++ b/core/src/layers/concurrent_limit.rs
@@ -309,13 +309,13 @@ impl<R: oio::BlockingWrite> oio::BlockingWrite for ConcurrentLimitWrapper<R> {
 }
 
 #[async_trait]
-impl<R: oio::Page> oio::Page for ConcurrentLimitWrapper<R> {
+impl<R: oio::List> oio::List for ConcurrentLimitWrapper<R> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next().await
     }
 }
 
-impl<R: oio::BlockingPage> oio::BlockingPage for ConcurrentLimitWrapper<R> {
+impl<R: oio::BlockingList> oio::BlockingList for ConcurrentLimitWrapper<R> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next()
     }
diff --git a/core/src/layers/error_context.rs b/core/src/layers/error_context.rs
index 9dae975f9..a48eb299a 100644
--- a/core/src/layers/error_context.rs
+++ b/core/src/layers/error_context.rs
@@ -25,7 +25,7 @@ use async_trait::async_trait;
 use bytes::Bytes;
 use futures::TryFutureExt;
 
-use crate::raw::oio::PageOperation;
+use crate::raw::oio::ListOperation;
 use crate::raw::oio::ReadOperation;
 use crate::raw::oio::WriteOperation;
 use crate::raw::*;
@@ -452,20 +452,20 @@ impl<T: oio::BlockingWrite> oio::BlockingWrite for ErrorContextWrapper<T> {
 }
 
 #[async_trait::async_trait]
-impl<T: oio::Page> oio::Page for ErrorContextWrapper<T> {
+impl<T: oio::List> oio::List for ErrorContextWrapper<T> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next().await.map_err(|err| {
-            err.with_operation(PageOperation::Next)
+            err.with_operation(ListOperation::Next)
                 .with_context("service", self.scheme)
                 .with_context("path", &self.path)
         })
     }
 }
 
-impl<T: oio::BlockingPage> oio::BlockingPage for ErrorContextWrapper<T> {
+impl<T: oio::BlockingList> oio::BlockingList for ErrorContextWrapper<T> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next().map_err(|err| {
-            err.with_operation(PageOperation::BlockingNext)
+            err.with_operation(ListOperation::BlockingNext)
                 .with_context("service", self.scheme)
                 .with_context("path", &self.path)
         })
diff --git a/core/src/layers/immutable_index.rs b/core/src/layers/immutable_index.rs
index 0186267cd..65481401e 100644
--- a/core/src/layers/immutable_index.rs
+++ b/core/src/layers/immutable_index.rs
@@ -239,13 +239,13 @@ impl ImmutableDir {
 }
 
 #[async_trait]
-impl oio::Page for ImmutableDir {
+impl oio::List for ImmutableDir {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
 }
 
-impl oio::BlockingPage for ImmutableDir {
+impl oio::BlockingList for ImmutableDir {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
diff --git a/core/src/layers/logging.rs b/core/src/layers/logging.rs
index 78ebc8d4c..17bf4cf9a 100644
--- a/core/src/layers/logging.rs
+++ b/core/src/layers/logging.rs
@@ -1475,7 +1475,7 @@ impl<P> Drop for LoggingPager<P> {
 }
 
 #[async_trait]
-impl<P: oio::Page> oio::Page for LoggingPager<P> {
+impl<P: oio::List> oio::List for LoggingPager<P> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let res = self.inner.next().await;
 
@@ -1519,7 +1519,7 @@ impl<P: oio::Page> oio::Page for LoggingPager<P> {
     }
 }
 
-impl<P: oio::BlockingPage> oio::BlockingPage for LoggingPager<P> {
+impl<P: oio::BlockingList> oio::BlockingList for LoggingPager<P> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let res = self.inner.next();
 
diff --git a/core/src/layers/madsim.rs b/core/src/layers/madsim.rs
index 1d1253baf..a7c64df9f 100644
--- a/core/src/layers/madsim.rs
+++ b/core/src/layers/madsim.rs
@@ -334,7 +334,7 @@ impl oio::Write for MadsimWriter {
 pub struct MadsimPager {}
 
 #[async_trait]
-impl oio::Page for MadsimPager {
+impl oio::List for MadsimPager {
     async fn next(&mut self) -> crate::Result<Option<Vec<Entry>>> {
         Err(Error::new(
             ErrorKind::Unsupported,
diff --git a/core/src/layers/minitrace.rs b/core/src/layers/minitrace.rs
index 00e1239d2..25573f125 100644
--- a/core/src/layers/minitrace.rs
+++ b/core/src/layers/minitrace.rs
@@ -25,7 +25,7 @@ use bytes::Bytes;
 use futures::FutureExt;
 use minitrace::prelude::*;
 
-use crate::raw::oio::PageOperation;
+use crate::raw::oio::ListOperation;
 use crate::raw::oio::ReadOperation;
 use crate::raw::oio::WriteOperation;
 use crate::raw::*;
@@ -371,22 +371,22 @@ impl<R: oio::BlockingWrite> oio::BlockingWrite for MinitraceWrapper<R> {
 }
 
 #[async_trait]
-impl<R: oio::Page> oio::Page for MinitraceWrapper<R> {
+impl<R: oio::List> oio::List for MinitraceWrapper<R> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner
             .next()
             .in_span(Span::enter_with_parent(
-                PageOperation::Next.into_static(),
+                ListOperation::Next.into_static(),
                 &self.span,
             ))
             .await
     }
 }
 
-impl<R: oio::BlockingPage> oio::BlockingPage for MinitraceWrapper<R> {
+impl<R: oio::BlockingList> oio::BlockingList for MinitraceWrapper<R> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let _g = self.span.set_local_parent();
-        let _span = LocalSpan::enter_with_local_parent(PageOperation::BlockingNext.into_static());
+        let _span = LocalSpan::enter_with_local_parent(ListOperation::BlockingNext.into_static());
         self.inner.next()
     }
 }
diff --git a/core/src/layers/oteltrace.rs b/core/src/layers/oteltrace.rs
index 1591ae6af..87a53c8b3 100644
--- a/core/src/layers/oteltrace.rs
+++ b/core/src/layers/oteltrace.rs
@@ -330,13 +330,13 @@ impl<R: oio::BlockingWrite> oio::BlockingWrite for OtelTraceWrapper<R> {
 }
 
 #[async_trait]
-impl<R: oio::Page> oio::Page for OtelTraceWrapper<R> {
+impl<R: oio::List> oio::List for OtelTraceWrapper<R> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next().await
     }
 }
 
-impl<R: oio::BlockingPage> oio::BlockingPage for OtelTraceWrapper<R> {
+impl<R: oio::BlockingList> oio::BlockingList for OtelTraceWrapper<R> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next()
     }
diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs
index 96c6e144a..8f5ea76ee 100644
--- a/core/src/layers/retry.rs
+++ b/core/src/layers/retry.rs
@@ -35,7 +35,7 @@ use bytes::Bytes;
 use futures::FutureExt;
 use log::warn;
 
-use crate::raw::oio::PageOperation;
+use crate::raw::oio::ListOperation;
 use crate::raw::oio::ReadOperation;
 use crate::raw::oio::WriteOperation;
 use crate::raw::*;
@@ -1050,7 +1050,7 @@ impl<R: oio::BlockingWrite, I: RetryInterceptor> oio::BlockingWrite for RetryWra
 }
 
 #[async_trait]
-impl<P: oio::Page, I: RetryInterceptor> oio::Page for RetryWrapper<P, I> {
+impl<P: oio::List, I: RetryInterceptor> oio::List for RetryWrapper<P, I> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut backoff = self.builder.build();
 
@@ -1065,7 +1065,7 @@ impl<P: oio::Page, I: RetryInterceptor> oio::Page for RetryWrapper<P, I> {
                             &e,
                             dur,
                             &[
-                                ("operation", PageOperation::Next.into_static()),
+                                ("operation", ListOperation::Next.into_static()),
                                 ("path", &self.path),
                             ],
                         );
@@ -1078,7 +1078,7 @@ impl<P: oio::Page, I: RetryInterceptor> oio::Page for RetryWrapper<P, I> {
     }
 }
 
-impl<P: oio::BlockingPage, I: RetryInterceptor> oio::BlockingPage for RetryWrapper<P, I> {
+impl<P: oio::BlockingList, I: RetryInterceptor> oio::BlockingList for RetryWrapper<P, I> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         { || self.inner.next() }
             .retry(&self.builder)
@@ -1088,7 +1088,7 @@ impl<P: oio::BlockingPage, I: RetryInterceptor> oio::BlockingPage for RetryWrapp
                     err,
                     dur,
                     &[
-                        ("operation", PageOperation::BlockingNext.into_static()),
+                        ("operation", ListOperation::BlockingNext.into_static()),
                         ("path", &self.path),
                     ],
                 );
@@ -1295,7 +1295,7 @@ mod tests {
         attempt: usize,
     }
     #[async_trait]
-    impl oio::Page for MockPager {
+    impl oio::List for MockPager {
         async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
             self.attempt += 1;
             match self.attempt {
diff --git a/core/src/layers/timeout.rs b/core/src/layers/timeout.rs
index 2cabf36af..9540b6792 100644
--- a/core/src/layers/timeout.rs
+++ b/core/src/layers/timeout.rs
@@ -24,7 +24,7 @@ use std::time::Instant;
 use async_trait::async_trait;
 use bytes::Bytes;
 
-use crate::raw::oio::PageOperation;
+use crate::raw::oio::ListOperation;
 use crate::raw::oio::ReadOperation;
 use crate::raw::oio::WriteOperation;
 use crate::raw::*;
@@ -416,13 +416,13 @@ impl<R: oio::Write> oio::Write for TimeoutWrapper<R> {
 }
 
 #[async_trait]
-impl<R: oio::Page> oio::Page for TimeoutWrapper<R> {
+impl<R: oio::List> oio::List for TimeoutWrapper<R> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         tokio::time::timeout(self.timeout, self.inner.next())
             .await
             .map_err(|_| {
                 Error::new(ErrorKind::Unexpected, "operation timeout")
-                    .with_operation(PageOperation::Next)
+                    .with_operation(ListOperation::Next)
                     .with_context("timeout", self.timeout.as_secs_f64().to_string())
                     .set_temporary()
             })?
diff --git a/core/src/layers/tracing.rs b/core/src/layers/tracing.rs
index 9bb0b54c2..1506d2e89 100644
--- a/core/src/layers/tracing.rs
+++ b/core/src/layers/tracing.rs
@@ -364,14 +364,14 @@ impl<R: oio::BlockingWrite> oio::BlockingWrite for TracingWrapper<R> {
 }
 
 #[async_trait]
-impl<R: oio::Page> oio::Page for TracingWrapper<R> {
+impl<R: oio::List> oio::List for TracingWrapper<R> {
     #[tracing::instrument(parent = &self.span, level = "debug", skip_all)]
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next().await
     }
 }
 
-impl<R: oio::BlockingPage> oio::BlockingPage for TracingWrapper<R> {
+impl<R: oio::BlockingList> oio::BlockingList for TracingWrapper<R> {
     #[tracing::instrument(parent = &self.span, level = "debug", skip_all)]
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         self.inner.next()
diff --git a/core/src/layers/type_eraser.rs b/core/src/layers/type_eraser.rs
index 9561700c7..4d02e2c7a 100644
--- a/core/src/layers/type_eraser.rs
+++ b/core/src/layers/type_eraser.rs
@@ -60,7 +60,7 @@ impl<A: Accessor> LayeredAccessor for TypeEraseAccessor<A> {
     type Writer = oio::Writer;
     type BlockingWriter = oio::BlockingWriter;
     type Pager = oio::Pager;
-    type BlockingPager = oio::BlockingPager;
+    type BlockingPager = oio::BlockingLister;
 
     fn inner(&self) -> &Self::Inner {
         &self.inner
@@ -102,6 +102,6 @@ impl<A: Accessor> LayeredAccessor for TypeEraseAccessor<A> {
     fn blocking_list(&self, path: &str, args: OpList) -> Result<(RpList, Self::BlockingPager)> {
         self.inner
             .blocking_list(path, args)
-            .map(|(rp, p)| (rp, Box::new(p) as oio::BlockingPager))
+            .map(|(rp, p)| (rp, Box::new(p) as oio::BlockingLister))
     }
 }
diff --git a/core/src/raw/accessor.rs b/core/src/raw/accessor.rs
index 6fed93b58..ec8540137 100644
--- a/core/src/raw/accessor.rs
+++ b/core/src/raw/accessor.rs
@@ -66,10 +66,10 @@ pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
     /// `blocking_write` operation.
     type BlockingWriter: oio::BlockingWrite;
     /// Pager is the associated page that return in `list` operation.
-    type Pager: oio::Page;
+    type Pager: oio::List;
     /// BlockingPager is the associated pager that could return in
     /// `blocking_list` operation.
-    type BlockingPager: oio::BlockingPage;
+    type BlockingPager: oio::BlockingList;
 
     /// Invoke the `info` operation to get metadata of accessor.
     ///
@@ -473,7 +473,7 @@ pub type FusedAccessor = Arc<
         Writer = oio::Writer,
         BlockingWriter = oio::BlockingWriter,
         Pager = oio::Pager,
-        BlockingPager = oio::BlockingPager,
+        BlockingPager = oio::BlockingLister,
     >,
 >;
 
diff --git a/core/src/raw/adapters/kv/backend.rs b/core/src/raw/adapters/kv/backend.rs
index a05dee052..142fde11e 100644
--- a/core/src/raw/adapters/kv/backend.rs
+++ b/core/src/raw/adapters/kv/backend.rs
@@ -335,13 +335,13 @@ impl KvPager {
 }
 
 #[async_trait]
-impl oio::Page for KvPager {
+impl oio::List for KvPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
 }
 
-impl oio::BlockingPage for KvPager {
+impl oio::BlockingList for KvPager {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
diff --git a/core/src/raw/adapters/typed_kv/backend.rs b/core/src/raw/adapters/typed_kv/backend.rs
index 8d2343026..210c7d1cc 100644
--- a/core/src/raw/adapters/typed_kv/backend.rs
+++ b/core/src/raw/adapters/typed_kv/backend.rs
@@ -336,13 +336,13 @@ impl KvPager {
 }
 
 #[async_trait]
-impl oio::Page for KvPager {
+impl oio::List for KvPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
 }
 
-impl oio::BlockingPage for KvPager {
+impl oio::BlockingList for KvPager {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         Ok(self.inner_next_page())
     }
diff --git a/core/src/raw/layer.rs b/core/src/raw/layer.rs
index 7d0c40a20..fa5d0add3 100644
--- a/core/src/raw/layer.rs
+++ b/core/src/raw/layer.rs
@@ -132,8 +132,8 @@ pub trait LayeredAccessor: Send + Sync + Debug + Unpin + 'static {
     type BlockingReader: oio::BlockingRead;
     type Writer: oio::Write;
     type BlockingWriter: oio::BlockingWrite;
-    type Pager: oio::Page;
-    type BlockingPager: oio::BlockingPage;
+    type Pager: oio::List;
+    type BlockingPager: oio::BlockingList;
 
     fn inner(&self) -> &Self::Inner;
 
diff --git a/core/src/raw/oio/page/api.rs b/core/src/raw/oio/list/api.rs
similarity index 72%
rename from core/src/raw/oio/page/api.rs
rename to core/src/raw/oio/list/api.rs
index 62a265404..222109848 100644
--- a/core/src/raw/oio/page/api.rs
+++ b/core/src/raw/oio/list/api.rs
@@ -26,41 +26,40 @@ use crate::*;
 /// PageOperation is the name for APIs of pager.
 #[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)]
 #[non_exhaustive]
-pub enum PageOperation {
-    /// Operation for [`Page::next`]
+pub enum ListOperation {
+    /// Operation for [`List::next`]
     Next,
-    /// Operation for [`BlockingPage::next`]
+    /// Operation for [`BlockingList::next`]
     BlockingNext,
 }
 
-impl PageOperation {
+impl ListOperation {
     /// Convert self into static str.
     pub fn into_static(self) -> &'static str {
         self.into()
     }
 }
 
-impl Display for PageOperation {
+impl Display for ListOperation {
     fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
         write!(f, "{}", self.into_static())
     }
 }
 
-impl From<PageOperation> for &'static str {
-    fn from(v: PageOperation) -> &'static str {
-        use PageOperation::*;
+impl From<ListOperation> for &'static str {
+    fn from(v: ListOperation) -> &'static str {
+        use ListOperation::*;
 
         match v {
-            Next => "Pager::next",
-            BlockingNext => "BlockingPager::next",
+            Next => "List::next",
+            BlockingNext => "List::next",
         }
     }
 }
 
-/// Page trait is used by [`raw::Accessor`] to implement `list`
-/// or `scan` operation.
+/// Page trait is used by [`raw::Accessor`] to implement `list` operation.
 #[async_trait]
-pub trait Page: Send + Sync + 'static {
+pub trait List: Send + Sync + 'static {
     /// Fetch a new page of [`Entry`]
     ///
     /// `Ok(None)` means all pages have been returned. Any following call
@@ -68,25 +67,25 @@ pub trait Page: Send + Sync + 'static {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>>;
 }
 
-/// The boxed version of [`Page`]
-pub type Pager = Box<dyn Page>;
+/// The boxed version of [`List`]
+pub type Pager = Box<dyn List>;
 
 #[async_trait]
-impl<P: Page + ?Sized> Page for Box<P> {
+impl<P: List + ?Sized> List for Box<P> {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         (**self).next().await
     }
 }
 
 #[async_trait]
-impl Page for () {
+impl List for () {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         Ok(None)
     }
 }
 
 #[async_trait]
-impl<P: Page> Page for Option<P> {
+impl<P: List> List for Option<P> {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         match self {
             Some(p) => p.next().await,
@@ -95,8 +94,8 @@ impl<P: Page> Page for Option<P> {
     }
 }
 
-/// BlockingPage is the blocking version of [`Page`].
-pub trait BlockingPage: Send + 'static {
+/// BlockingList is the blocking version of [`List`].
+pub trait BlockingList: Send + 'static {
     /// Fetch a new page of [`Entry`]
     ///
     /// `Ok(None)` means all pages have been returned. Any following call
@@ -104,22 +103,22 @@ pub trait BlockingPage: Send + 'static {
     fn next(&mut self) -> Result<Option<Vec<Entry>>>;
 }
 
-/// BlockingPager is a boxed [`BlockingPage`]
-pub type BlockingPager = Box<dyn BlockingPage>;
+/// BlockingLister is a boxed [`BlockingList`]
+pub type BlockingLister = Box<dyn BlockingList>;
 
-impl<P: BlockingPage + ?Sized> BlockingPage for Box<P> {
+impl<P: BlockingList + ?Sized> BlockingList for Box<P> {
     fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         (**self).next()
     }
 }
 
-impl BlockingPage for () {
+impl BlockingList for () {
     fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         Ok(None)
     }
 }
 
-impl<P: BlockingPage> BlockingPage for Option<P> {
+impl<P: BlockingList> BlockingList for Option<P> {
     fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         match self {
             Some(p) => p.next(),
diff --git a/core/src/raw/oio/page/into_flat_page.rs b/core/src/raw/oio/list/into_flat_page.rs
similarity index 97%
rename from core/src/raw/oio/page/into_flat_page.rs
rename to core/src/raw/oio/list/into_flat_page.rs
index 4af725043..6eebfc35e 100644
--- a/core/src/raw/oio/page/into_flat_page.rs
+++ b/core/src/raw/oio/list/into_flat_page.rs
@@ -90,10 +90,10 @@ pub struct FlatPager<A: Accessor, P> {
 }
 
 #[async_trait]
-impl<A, P> oio::Page for FlatPager<A, P>
+impl<A, P> oio::List for FlatPager<A, P>
 where
     A: Accessor<Pager = P>,
-    P: oio::Page,
+    P: oio::List,
 {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         loop {
@@ -150,10 +150,10 @@ where
     }
 }
 
-impl<A, P> oio::BlockingPage for FlatPager<A, P>
+impl<A, P> oio::BlockingList for FlatPager<A, P>
 where
     A: Accessor<BlockingPager = P>,
-    P: oio::BlockingPage,
+    P: oio::BlockingList,
 {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         loop {
@@ -216,7 +216,7 @@ mod tests {
     use std::vec;
 
     use log::debug;
-    use oio::BlockingPage;
+    use oio::BlockingList;
 
     use super::*;
 
@@ -270,7 +270,7 @@ mod tests {
         done: bool,
     }
 
-    impl BlockingPage for MockPager {
+    impl BlockingList for MockPager {
         fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
             if self.done {
                 return Ok(None);
diff --git a/core/src/raw/oio/page/into_hierarchy_pager.rs b/core/src/raw/oio/list/into_hierarchy_pager.rs
similarity index 97%
rename from core/src/raw/oio/page/into_hierarchy_pager.rs
rename to core/src/raw/oio/list/into_hierarchy_pager.rs
index 10a5449d6..bb54b7551 100644
--- a/core/src/raw/oio/page/into_hierarchy_pager.rs
+++ b/core/src/raw/oio/list/into_hierarchy_pager.rs
@@ -117,7 +117,7 @@ impl<P> HierarchyPager<P> {
 }
 
 #[async_trait]
-impl<P: oio::Page> oio::Page for HierarchyPager<P> {
+impl<P: oio::List> oio::List for HierarchyPager<P> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let page = self.pager.next().await?;
 
@@ -133,7 +133,7 @@ impl<P: oio::Page> oio::Page for HierarchyPager<P> {
     }
 }
 
-impl<P: oio::BlockingPage> oio::BlockingPage for HierarchyPager<P> {
+impl<P: oio::BlockingList> oio::BlockingList for HierarchyPager<P> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let page = self.pager.next()?;
 
@@ -155,7 +155,7 @@ mod tests {
     use std::collections::HashSet;
 
     use log::debug;
-    use oio::BlockingPage;
+    use oio::BlockingList;
 
     use super::*;
 
@@ -173,7 +173,7 @@ mod tests {
         }
     }
 
-    impl BlockingPage for MockPager {
+    impl BlockingList for MockPager {
         fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
             if self.done {
                 return Ok(None);
diff --git a/core/src/raw/oio/page/mod.rs b/core/src/raw/oio/list/mod.rs
similarity index 91%
rename from core/src/raw/oio/page/mod.rs
rename to core/src/raw/oio/list/mod.rs
index 26be17451..8e3c34656 100644
--- a/core/src/raw/oio/page/mod.rs
+++ b/core/src/raw/oio/list/mod.rs
@@ -16,10 +16,10 @@
 // under the License.
 
 mod api;
-pub use api::BlockingPage;
-pub use api::BlockingPager;
-pub use api::Page;
-pub use api::PageOperation;
+pub use api::BlockingList;
+pub use api::BlockingLister;
+pub use api::List;
+pub use api::ListOperation;
 pub use api::Pager;
 
 mod into_flat_page;
diff --git a/core/src/raw/oio/mod.rs b/core/src/raw/oio/mod.rs
index 9e52acfd2..7a10a8331 100644
--- a/core/src/raw/oio/mod.rs
+++ b/core/src/raw/oio/mod.rs
@@ -31,8 +31,8 @@ pub use write::*;
 mod stream;
 pub use stream::*;
 
-mod page;
-pub use page::*;
+mod list;
+pub use list::*;
 
 mod cursor;
 pub use cursor::Cursor;
diff --git a/core/src/services/alluxio/pager.rs b/core/src/services/alluxio/pager.rs
index 64483751b..e6deb84c6 100644
--- a/core/src/services/alluxio/pager.rs
+++ b/core/src/services/alluxio/pager.rs
@@ -44,7 +44,7 @@ impl AlluxioPager {
 }
 
 #[async_trait]
-impl oio::Page for AlluxioPager {
+impl oio::List for AlluxioPager {
     async fn next(&mut self) -> Result<Option<Vec<Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/azblob/pager.rs b/core/src/services/azblob/pager.rs
index 19c11bf36..a3d03692c 100644
--- a/core/src/services/azblob/pager.rs
+++ b/core/src/services/azblob/pager.rs
@@ -55,7 +55,7 @@ impl AzblobPager {
 }
 
 #[async_trait]
-impl oio::Page for AzblobPager {
+impl oio::List for AzblobPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/azdls/pager.rs b/core/src/services/azdls/pager.rs
index 19f67d007..01593e68f 100644
--- a/core/src/services/azdls/pager.rs
+++ b/core/src/services/azdls/pager.rs
@@ -50,7 +50,7 @@ impl AzdlsPager {
 }
 
 #[async_trait]
-impl oio::Page for AzdlsPager {
+impl oio::List for AzdlsPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/azfile/pager.rs b/core/src/services/azfile/pager.rs
index 8272d19f0..2172fd0c7 100644
--- a/core/src/services/azfile/pager.rs
+++ b/core/src/services/azfile/pager.rs
@@ -49,7 +49,7 @@ impl AzfilePager {
 }
 
 #[async_trait]
-impl oio::Page for AzfilePager {
+impl oio::List for AzfilePager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/cos/pager.rs b/core/src/services/cos/pager.rs
index f2b38d791..f72b8dec6 100644
--- a/core/src/services/cos/pager.rs
+++ b/core/src/services/cos/pager.rs
@@ -57,7 +57,7 @@ impl CosPager {
 }
 
 #[async_trait]
-impl oio::Page for CosPager {
+impl oio::List for CosPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/dbfs/pager.rs b/core/src/services/dbfs/pager.rs
index 58aef5d75..5b65694fd 100644
--- a/core/src/services/dbfs/pager.rs
+++ b/core/src/services/dbfs/pager.rs
@@ -44,7 +44,7 @@ impl DbfsPager {
 }
 
 #[async_trait]
-impl oio::Page for DbfsPager {
+impl oio::List for DbfsPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/fs/pager.rs b/core/src/services/fs/pager.rs
index 1c1e1fcce..4413d1ffe 100644
--- a/core/src/services/fs/pager.rs
+++ b/core/src/services/fs/pager.rs
@@ -43,7 +43,7 @@ impl<P> FsPager<P> {
 }
 
 #[async_trait]
-impl oio::Page for FsPager<tokio::fs::ReadDir> {
+impl oio::List for FsPager<tokio::fs::ReadDir> {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
@@ -84,7 +84,7 @@ impl oio::Page for FsPager<tokio::fs::ReadDir> {
     }
 }
 
-impl oio::BlockingPage for FsPager<std::fs::ReadDir> {
+impl oio::BlockingList for FsPager<std::fs::ReadDir> {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
diff --git a/core/src/services/ftp/pager.rs b/core/src/services/ftp/pager.rs
index e1e1c0af1..cb0e4d83f 100644
--- a/core/src/services/ftp/pager.rs
+++ b/core/src/services/ftp/pager.rs
@@ -42,7 +42,7 @@ impl FtpPager {
 }
 
 #[async_trait]
-impl oio::Page for FtpPager {
+impl oio::List for FtpPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
diff --git a/core/src/services/gcs/pager.rs b/core/src/services/gcs/pager.rs
index 5c4fdc50d..3f27b31ba 100644
--- a/core/src/services/gcs/pager.rs
+++ b/core/src/services/gcs/pager.rs
@@ -68,7 +68,7 @@ impl GcsPager {
 }
 
 #[async_trait]
-impl oio::Page for GcsPager {
+impl oio::List for GcsPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/gdrive/pager.rs b/core/src/services/gdrive/pager.rs
index a3c836592..7cc60744d 100644
--- a/core/src/services/gdrive/pager.rs
+++ b/core/src/services/gdrive/pager.rs
@@ -49,7 +49,7 @@ impl GdrivePager {
 }
 
 #[async_trait]
-impl oio::Page for GdrivePager {
+impl oio::List for GdrivePager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/hdfs/pager.rs b/core/src/services/hdfs/pager.rs
index 28b8ca5f9..edd14439e 100644
--- a/core/src/services/hdfs/pager.rs
+++ b/core/src/services/hdfs/pager.rs
@@ -41,7 +41,7 @@ impl HdfsPager {
 }
 
 #[async_trait]
-impl oio::Page for HdfsPager {
+impl oio::List for HdfsPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
@@ -72,7 +72,7 @@ impl oio::Page for HdfsPager {
     }
 }
 
-impl oio::BlockingPage for HdfsPager {
+impl oio::BlockingList for HdfsPager {
     fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         let mut oes: Vec<oio::Entry> = Vec::with_capacity(self.size);
 
diff --git a/core/src/services/ipfs/backend.rs b/core/src/services/ipfs/backend.rs
index 8dcf8610e..6b8f52310 100644
--- a/core/src/services/ipfs/backend.rs
+++ b/core/src/services/ipfs/backend.rs
@@ -429,7 +429,7 @@ impl DirStream {
 }
 
 #[async_trait]
-impl oio::Page for DirStream {
+impl oio::List for DirStream {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.consumed {
             return Ok(None);
diff --git a/core/src/services/ipmfs/pager.rs b/core/src/services/ipmfs/pager.rs
index ac5b157d9..61c60e6cf 100644
--- a/core/src/services/ipmfs/pager.rs
+++ b/core/src/services/ipmfs/pager.rs
@@ -47,7 +47,7 @@ impl IpmfsPager {
 }
 
 #[async_trait]
-impl oio::Page for IpmfsPager {
+impl oio::List for IpmfsPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.consumed {
             return Ok(None);
diff --git a/core/src/services/obs/pager.rs b/core/src/services/obs/pager.rs
index 9908d95f7..7aa7ae82b 100644
--- a/core/src/services/obs/pager.rs
+++ b/core/src/services/obs/pager.rs
@@ -58,7 +58,7 @@ impl ObsPager {
 }
 
 #[async_trait]
-impl oio::Page for ObsPager {
+impl oio::List for ObsPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/onedrive/pager.rs b/core/src/services/onedrive/pager.rs
index c960c843e..b87a07252 100644
--- a/core/src/services/onedrive/pager.rs
+++ b/core/src/services/onedrive/pager.rs
@@ -55,7 +55,7 @@ impl OnedrivePager {
 }
 
 #[async_trait]
-impl oio::Page for OnedrivePager {
+impl oio::List for OnedrivePager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/oss/pager.rs b/core/src/services/oss/pager.rs
index d865b4ec0..67d217abe 100644
--- a/core/src/services/oss/pager.rs
+++ b/core/src/services/oss/pager.rs
@@ -69,7 +69,7 @@ impl OssPager {
 }
 
 #[async_trait]
-impl oio::Page for OssPager {
+impl oio::List for OssPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/s3/pager.rs b/core/src/services/s3/pager.rs
index 55ebec1a3..4c5c4f10c 100644
--- a/core/src/services/s3/pager.rs
+++ b/core/src/services/s3/pager.rs
@@ -67,7 +67,7 @@ impl S3Pager {
 }
 
 #[async_trait]
-impl oio::Page for S3Pager {
+impl oio::List for S3Pager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/sftp/pager.rs b/core/src/services/sftp/pager.rs
index 81c0e22bc..db445e918 100644
--- a/core/src/services/sftp/pager.rs
+++ b/core/src/services/sftp/pager.rs
@@ -46,7 +46,7 @@ impl SftpPager {
 }
 
 #[async_trait]
-impl oio::Page for SftpPager {
+impl oio::List for SftpPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.limit == 0 {
             return Ok(None);
diff --git a/core/src/services/swift/pager.rs b/core/src/services/swift/pager.rs
index 62ff2304b..96da007f6 100644
--- a/core/src/services/swift/pager.rs
+++ b/core/src/services/swift/pager.rs
@@ -45,7 +45,7 @@ impl SwiftPager {
 }
 
 #[async_trait]
-impl oio::Page for SwiftPager {
+impl oio::List for SwiftPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.done {
             return Ok(None);
diff --git a/core/src/services/webdav/pager.rs b/core/src/services/webdav/pager.rs
index 519cae33f..b70200557 100644
--- a/core/src/services/webdav/pager.rs
+++ b/core/src/services/webdav/pager.rs
@@ -41,7 +41,7 @@ impl WebdavPager {
 }
 
 #[async_trait]
-impl oio::Page for WebdavPager {
+impl oio::List for WebdavPager {
     async fn next(&mut self) -> Result<Option<Vec<oio::Entry>>> {
         if self.multistates.response.is_empty() {
             return Ok(None);
diff --git a/core/src/services/webhdfs/pager.rs b/core/src/services/webhdfs/pager.rs
index c55252c3d..734754ed9 100644
--- a/core/src/services/webhdfs/pager.rs
+++ b/core/src/services/webhdfs/pager.rs
@@ -51,7 +51,7 @@ impl WebhdfsPager {
 }
 
 #[async_trait]
-impl oio::Page for WebhdfsPager {
+impl oio::List for WebhdfsPager {
     /// Returns the next page of entries.
     ///
     /// Note: default list status with batch, calling next will query for next batch if `remaining_entries` > 0.
diff --git a/core/src/types/list.rs b/core/src/types/list.rs
index 5d0325b47..a61c4aa23 100644
--- a/core/src/types/list.rs
+++ b/core/src/types/list.rs
@@ -145,7 +145,7 @@ pub struct BlockingLister {
     /// required_metakey is the metakey required by users.
     required_metakey: FlagSet<Metakey>,
 
-    pager: Option<oio::BlockingPager>,
+    pager: Option<oio::BlockingLister>,
     buf: VecDeque<oio::Entry>,
 }
 


(incubator-opendal) 04/04: Fix

Posted by xu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch refactor-list
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git

commit da8d22ce9f21b416f1942b7ae9b1dc0dbaa9a386
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Tue Nov 14 23:55:56 2023 +0800

    Fix
    
    Signed-off-by: Xuanwo <gi...@xuanwo.io>
---
 core/src/docs/internals/accessor.rs | 8 ++++----
 core/src/raw/accessor.rs            | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/core/src/docs/internals/accessor.rs b/core/src/docs/internals/accessor.rs
index 667e63ffc..7cd50823b 100644
--- a/core/src/docs/internals/accessor.rs
+++ b/core/src/docs/internals/accessor.rs
@@ -29,10 +29,10 @@
 //! #[async_trait]
 //! //                  <----------Trait Bound-------------->
 //! pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
-//!     type Reader: oio::Read;                 // --+
-//!     type BlockingReader: oio::BlockingRead; //   +--> Associated Type
-//!     type Lister: oio::Page;                  //   +
-//!     type BlockingLister: oio::BlockingPage;  // --+
+//!     type Reader: oio::Read;                    // --+
+//!     type BlockingReader: oio::BlockingRead;    //   +--> Associated Type
+//!     type Lister: oio::Lister;                  //   +
+//!     type BlockingLister: oio::BlockingLister;  // --+
 //!
 //!     // APIs
 //!     async fn hello(&self, path: &str, args: OpCreate) -> Result<RpCreate>;
diff --git a/core/src/raw/accessor.rs b/core/src/raw/accessor.rs
index 8f8ee4517..5ff1ab802 100644
--- a/core/src/raw/accessor.rs
+++ b/core/src/raw/accessor.rs
@@ -65,7 +65,7 @@ pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
     /// BlockingWriter is the associated writer the could return in
     /// `blocking_write` operation.
     type BlockingWriter: oio::BlockingWrite;
-    /// Lister is the associated page that return in `list` operation.
+    /// Lister is the associated lister that return in `list` operation.
     type Lister: oio::List;
     /// BlockingLister is the associated lister that could return in
     /// `blocking_list` operation.