Receive pushed data into an archive through the Peer protocol
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 38/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
调研方向
Start with DiskSyncConnection in morango/sync/syncsession.py, then read TransferSessionViewSet and BufferViewSet in morango/api/viewsets.py, especially the scope checks at lines 348-354. Review spec §3.6 and implementation-plan Task 23 before implementing the six methods. Done means the listed acceptance criteria pass, including archive writes within assert_no_default_db_queries(); note that work is blocked by issues #367, #371, and #383.
由索引模型根据 Issue 内容生成。
描述
Overview
A disk connection receives a push through the Peer protocol and stores the data in the archive, as a morango server does. This issue is part of milestone M6 (disk connection).
Background & Motivation
The shared Peer* operations from #374 drive a peer only through the Peer protocol. The network connection answers the protocol with HTTP calls to a server. The disk connection must answer the same protocol, with the archive in the role of the server.
The parity rule requires that the archive holds the same state as a server that receives the same push. For this reason, the disk connection calls the same receiver functions that the server uses. It does not use separate write logic.
Design: spec. Plan: implementation plan, Task 23.
User Story
As a Kolibri developer,
I want a push over a disk connection to complete all transfer stages,
So that the exported archive holds the same records and counters as a server.
Description & Expected Outcomes
The disk connection implements the six Peer protocol methods. It rejects a pull, because Phase 1 supports export only.
When a transfer session is created, the disk connection applies the same scope checks as the server. The filter must be in the write scope of the client certificate and the read scope of the archive certificate. The connection records the filter in the manifest.
When an update asks for a later stage, the disk connection runs each stage step in order up to that stage. It stops at the first step that does not complete. The steps compute the archive FSIC, accept record chunks, and dequeue the records into the archive store.
The disk connection returns every result as a PeerTransferSession. All writes to the archive happen inside a transaction on the archive alias.
Deliverables & Contracts
The feature delivers these capabilities:
create_transfer_session,get_transfer_session,update_transfer_session,close_transfer_session,push_record_chunkandpull_record_chunkonDiskSyncConnection, as spec §3.6 describes.- An update to a later stage runs every skipped stage step in order.
- A push through the shared
Peer*operations writesStore,RecordMaxCounterandDatabaseMaxCounterrows in the archive.
Acceptance Criteria
-
create_transfer_sessionfor a pull raisesMorangoError. - A filter outside the certificate scopes raises
MorangoError. -
create_transfer_sessionsets the manifestfilter. -
update_transfer_session(ts, transfer_stage="queuing")frominitializingrunsserializingandqueuing, and returns stagequeuingwith statuscompleted. -
push_record_chunksets the stage totransferringand increasesrecords_transferredby the chunk length. - An update to
dequeuingwritesStore,RecordMaxCounterandDatabaseMaxCounterrows in the archive and increments the archive instance counter. - Two calls to
close_transfer_sessiondo not raise. -
pull_record_chunkraisesMorangoError. - All archive writes pass inside
assert_no_default_db_queries().
Technical Pointers & Architecture
- Target Components / Context:
morango/sync/syncsession.py(DiskSyncConnection). - Related Patterns:
TransferSessionViewSet(morango/api/viewsets.py:319) andBufferViewSet(morango/api/viewsets.py:452) are the server behavior to mirror. The scope checks are atmorango/api/viewsets.py:348-354. - Data Model & Schema Considerations: No schema change.
- Resilience & Failure Modes: The disk connection runs synchronously. Each stage step either completes or raises. Errors must not be suppressed.
Notes & Tradeoffs
- Dependencies: Blocked by: #367 (receiver helpers take
db), #371 (Peer protocol andPeerTransferSession), #383 (disk connection lifecycle). Blocks: #385, #386. - Kolibri companion changes: See spec §3.9. Kolibri routers must allow morango migrations on aliases that start with
morango_archive_. Kolibri settings overrides must list thePeer*operations. - Tradeoffs & Alternatives Considered: The spec rejects a run of the server middleware against the archive. Server operations read the HTTP request, and host operations also run in that path. The contract suite in #385 guards against drift from server behavior.
- Follow-up: A separate issue will split
update_transfer_sessioninto a field update and a stage advance (command-query separation).
Metadata
- Complexity: High
- Target Branch: release-v0.9.x
AI Usage
Drafted with Claude (Claude Code) from the approved design spec and implementation plan. The author reviewed the requirements, and the code references were checked against the release-v0.9.x codebase.
- 主要语言
- Python
- 星标
- 15
- 派生
- 23
- 平均合并
- 1 天 11 小时
- 30 天内合并 PR
- 4
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
learningequality/morango 的其他 Issue
-
DEV: dev-ops DEV: distributions DOCS: developer
难度 1/5 1-3 小时 新手友好度 78/100
learningequality/morango#387 ·
-
DEV: backend DEV: dev-ops TAG: unit tests
难度 2/5 1-3 小时 新手友好度 70/100
learningequality/morango#385 ·
-
DEV: backend P0 - critical TAG: tech update / debt TAG: unit tests
难度 2/5 1-3 小时 新手友好度 72/100
learningequality/morango#364 ·
-
DEV: backend TAG: new feature
难度 5/5 一周以上 新手友好度 10/100
learningequality/morango#388 ·
-
DEV: backend TAG: unit tests
难度 4/5 3-5 天 新手友好度 55/100
learningequality/morango#386 ·
查看 learningequality/morango 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 85/100
Vector35/community-plugins#376 ·
-
难度 2/5 1-3 小时 新手友好度 68/100
py-econometrics/pyfixest#1883 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 65/100
ietf-tools/rfc2html#81 ·
-
难度 1/5 1 小时以内 新手友好度 88/100
mysql/mysql-operator#60 ·
-
Python: Bug: split_plaintext_paragraph / split_markdown_paragraph can return a chunk larger than max_tokens可能已有人在做 @xThreeh 今天认领。 未关闭python triage
难度 2/5 1-3 小时 新手友好度 75/100
microsoft/semantic-kernel#14566 ·
维护者通常 4 天内回复