aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/daemon.py
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-12 00:17:32 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-12 00:17:32 +0200
commit14911aae21ec4975f7a805b91e3c4867cb41974b (patch)
tree8c00230a88053905fd77938f3a9539efeb4c3094 /packages/meshbay-node/src/meshbay_node/daemon.py
parentf6f107e02c7a4aa7326c9a82310a239327d81ed6 (diff)
downloadmeshbay-14911aae21ec4975f7a805b91e3c4867cb41974b.tar.gz
feat: let the operator pause and resume a root's indexing (MNP 6.2)
A whole-root walk now checks its root before every file: removed or ejected, it stops instead of reading the drive to the end; paused, it finishes from the hash cache alone. A paused root is not watched, not swept by reconcile and survives a restart (roster), its indexed files stay served. Resume runs the reconcile sweep over the root, so entries and their enrichment are kept. Signed root_pause / root_resume over MNP, loopback routes, CLI `root pause|resume`, a pause button on the indexing dock and pause/resume in the roots table of Group settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/daemon.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/daemon.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/daemon.py b/packages/meshbay-node/src/meshbay_node/daemon.py
index 4d89f97..022553e 100644
--- a/packages/meshbay-node/src/meshbay_node/daemon.py
+++ b/packages/meshbay-node/src/meshbay_node/daemon.py
@@ -1286,7 +1286,8 @@ class NodeDaemon(EnrichmentMixin):
async def _build_roots(self, group_cfg) -> RootSet:
"""
- Build a group's RootSet from node.toml, with the ejected state restored.
+ Build a group's RootSet from node.toml, with the ejected and paused
+ state restored.
node.toml carries configuration (`writable`, `removable`); the roster
carries the runtime answer to "is this drive ejected right now". They
@@ -1298,12 +1299,14 @@ class NodeDaemon(EnrichmentMixin):
if self._roster:
ejected = await self._roster.ejected_roots(group_cfg.id)
auto = await self._roster.auto_ejected_roots(group_cfg.id)
- if ejected:
- for spec in specs:
- name = spec.get("name") or Path(spec.get("path", "")).name
- if fold(name) in ejected:
- spec["ejected"] = True
- spec["ejected_auto"] = fold(name) in auto
+ paused = await self._roster.paused_roots(group_cfg.id)
+ for spec in specs:
+ name = spec.get("name") or Path(spec.get("path", "")).name
+ if fold(name) in ejected:
+ spec["ejected"] = True
+ spec["ejected_auto"] = fold(name) in auto
+ if fold(name) in paused:
+ spec["paused"] = True
return RootSet.build(specs)
# Every application that keeps directories. This is the one list, and it