Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

feat(api)!: standardize list RPCs on opaque page tokens

未关闭
#3,047 2 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

@gmenher 已经在做这个了。

开始于 2026年9月15日。

评估

这个 Issue 还没有评估数据。

描述

User Story

As an API or SDK client, I want every list operation to expose consistent continuation tokens, so that I can enumerate resources completely and safely while the underlying collection changes.

Problem Statement

OpenShell list RPCs currently use inconsistent pagination. Several accept limit and offset but return no total, continuation token, or truncation signal. Other public list RPCs have no pagination fields at all. A client cannot reliably distinguish a complete result from a truncated page, and offset-based paging is unstable when records are inserted or removed between requests.

Impact / Why This Matters

Clients must guess that a full-sized response implies another page, manually advance offsets, and risk omissions or duplicates under concurrent mutation. SDK authors repeat this logic differently, and callers cannot build dependable inventory, cleanup, or reconciliation workflows.

Proposed Design

Adopt one public list contract across gateway resources:

  • Requests use page_size and an opaque page_token.
  • Responses include next_page_token, empty only when enumeration is complete.
  • Tokens bind the query scope and ordering needed to continue safely.
  • Each resource defines a stable deterministic order.
  • SDK iterators follow tokens until completion while still allowing callers to fetch one page.
  • Invalid, expired, or query-mismatched tokens return documented errors.

The token encoding and persistence implementation remain internal.

Acceptance Criteria

  • Every public List RPC either implements the standard pagination contract or explicitly documents why its result set is bounded.
  • Paginated requests use consistent field names and validation limits.
  • Responses expose next_page_token; clients never infer completion from page length.
  • Ordering and concurrent insertion/deletion semantics are documented.
  • Rust, Python, TypeScript, and Go SDKs expose consistent one-page and full-iteration behavior.
  • Regression tests enumerate more than one page without omission or duplication.
  • Offset-based fields are removed or migrated with reserved names/tags and documented breaking-change guidance.

Alternatives Considered

Keep offset pagination and add total_size. This signals truncation but remains unstable during concurrent mutation and makes totals potentially expensive. Add only a truncation boolean. This still leaves clients without a safe continuation mechanism. Leave smaller lists unpaginated. This creates another permanent API exception and unbounded growth risk.

Agent Investigation

Current public list requests and responses in proto/openshell.proto use several combinations of limit, offset, and no pagination. Internal persistence pagination and full-table iteration are tracked separately in #2802.

Related: #2565, #2802. Source audit: https://gist.github.com/mrunalp/e80942c1544a0225ee588796a41ab30b.

主要语言
Rust
星标
8.7k
派生
1.3k
平均合并
2 天 6 小时
30 天内合并 PR
297

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

NVIDIA/OpenShell 的其他 Issue

查看 NVIDIA/OpenShell 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。