Skip to content

memex-cloud has not self-updated ~80 min after two publications — no observable self-update activity #2465

Closed as not planned

Description

@rbuergi

Observation

After delivery was restored on 2026-08-26, two images published:

3.0.0-rc8.ci.6007  ←  139fde8   (~00:10Z)
3.0.0-rc8.ci.6008  ←  842e6c5   (~00:40Z)

At 02:00Z — ~80 min after the second, well past SelfUpdate__MinRollInterval: 01:00:00 — memex-cloud had not rolled:

deployment image : meshweaver.azurecr.io/memex-portal-ai:3.0.0-rc8.ci.5670
/api/version     : 3.0.0-rc8+2699e4a…   (the ci.5670 commit)
pods             : 7/7 Running, 0 restarts   ← healthy, just old

And in the running pod, over the last 3 hours:

selfupdate-ish log lines: 0

Nothing matching selfupdate / self-update / platform-update. That is the part worth explaining: not a decision not to roll, but no visible activity either way.

Context that may or may not be causal

🚨 Stated as a hypothesis, not an established mechanism — I could not confirm it from the logs available, and the pods' retention does not reach their startup.

  • MeshWeaver.SelfUpdate.Aks is a landed MODULE, not part of the image. From an earlier pod's startup log: [ModuleLoad] MeshWeaver.SelfUpdate.Aks ← /data/modules/MeshWeaver.SelfUpdate.Aks@5a72a03e/… (source=store, written=2026-08-26 21:04:05Z).
  • The running pods are 5h51m old (started ~20:09Z) — i.e. before the 20:37–21:10Z module wave. Landed modules require a restart to activate, so these pods are running whatever was active at 20:09.
  • The deployment was rolled back from ci.5876 to ci.5670 after the crashloop (see the OpenAICompatibleModelSync skew and Per-module isolation (#2234) does not cover HOSTED SERVICES — one incompatible module still kills the portal #2449).

So the install is now: an older image, running modules from an earlier landing, with newer modules staged on disk awaiting a restart that self-update would normally cause.

If the updater is inactive in that state, the consequence is structural and worth naming: an image rollback can strand an install, because the component that would roll it forward ships as a module rather than in the image. An install would then need an operator to move it — which is exactly what "always roll via CD, never by hand" is trying to avoid having to do.

What I did not do, deliberately

No kubectl set image. The rule is that image and landed modules move atomically, and a consistently-old portal is a safe state — forcing a hand roll risks re-creating the very skew that caused tonight's crashloop. Prod is healthy and serving; this is a "stuck old", not an outage.

What would settle it

  1. Whether MeshWeaver.SelfUpdate.Aks is active in the running pods (the startup module report would say; retention lost it here).
  2. Whether the updater logs anything at all on a no-op check — if it is silent by design, "0 lines" is not evidence of absence and this issue is only about the roll not happening.
  3. Whether UpdatePolicyKind for this install selects the rc8.ci.* channel at all.

Related: #2449 (why the skew wedged the rollout), #2452 (the bake lane rotting while skipped), #2457 (moving the bake off the shared pool).

Activity

  1. rbuergi commented on Aug 27, 2026

    @rbuergi
    ContributorAuthor

    Current state (08:19Z): memex-cloud IS self-updating — and one publication behind is the designed behaviour

    memex-cloud   memex-portal-ai:3.0.0-rc8.ci.6028   READY=2  WANT=2  UPDATED=2
    memex         memex-portal-ai:3.0.0-rc8.ci.6011   READY=2  WANT=2  UPDATED=1   ← different problem
    newest published: 3.0.0-rc8.ci.6047
    

    memex-cloud's ReplicaSet is 71 minutes old, so it rolled ~07:08Z — it has moved ci.6011 → ci.6028 since this issue was filed. SelfUpdate__MinRollInterval on that namespace is 01:00:00.

    So the steady state is: at most one roll per hour, and therefore normally one-or-more publications behind, because CD publishes faster than the floor allows delivery. That floor is deliberate — #1780 added it precisely because #1773 made installs check per publication event, which for a few hours left nothing at all between "an image published" and "every portal restarted".

    What that does and does not settle

    Does not settle the original report. An 80-minute gap exceeds a 60-minute floor, so the window this issue describes is not explained by the throttle alone. My measurement is from now, not from then, and I am not claiming it refutes the observation.

    Does establish that the mechanism is functioning today, which narrows the question from "self-update is broken" to "what delayed it during that particular window". Two candidates worth checking against the original timestamps before anything is changed:

    1. Whether a publication actually completed in that window. Publication is all-or-nothing — the real tags are applied only after every leg succeeds. A burst of merges cancelling each other's main runs (No CI run builds the combination that lands: a merge burst ships semantic conflicts untested #2412, only partly addressed by ci: a run on main is never cancelled — the merge that lands must be built and shippable #2447) produces exactly the shape of "publications happened" from the outside while no complete set landed. Check for a promoted 3.0.0-rc8.ci.N tag inside the window, not merely CD runs.
    2. Whether the floor's clock was where you expect. A roll restarts the process, so "time since last roll" is measured from a restart — a pod replaced for an unrelated reason resets the window.

    Not to be confused with the memex namespace

    memex shows UPDATED=1 of WANT=2: its ci.6011 rollout has been stuck in CrashLoopBackOff for hours on a DI failure — that is #2443, not self-update. Worth separating, because readyReplicas=2 makes it look healthy and its serving pods are from the previous ReplicaSet.

  2. rbuergi commented on Aug 28, 2026

    @rbuergi
    ContributorAuthor

    Closing as a stale point-in-time observation, superseded by the issues that track the live mechanisms.

    Per the measurement in the comment above (2026-08-27 08:19Z): memex-cloud is self-updating — it rolled ci.6011 → ci.6028 at ~07:08Z, and with SelfUpdate__MinRollInterval: 01:00:00 the designed steady state is at most one roll per hour, i.e. normally one-or-more publications behind. The original 80-minute window exceeds the floor and was never explained, but it is now only answerable from historical data (whether a COMPLETE image set was actually promoted inside that window, and where the floor's restart-anchored clock stood), and nothing actionable hangs on it.

    The live self-update problems have their own threads with sharper mechanisms:

    If a portal is observed behind again, measure against those three first; reopen only if a distinct fourth mechanism appears.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions