+38
−0
+18
−0
Loading
Two related but separate reliability fixes to components that were
crash-looping or producing corrupted requests out of the box.
ACME CSE registrar addressing (acme.ini.in, both Dockerfiles)
----------------------------------------------------------------
mep-cse-mn could never register with its registrar CSE: every request
returned an ingress 404 instead of a oneM2M response. Traced to
acme.ini.in's [cse.registrar] section, where `address` (ending in "/")
and `root` (starting with "/") were concatenated to build the
registrar's base URL, producing an accidental "//" right after the
host:port. ACME's RequestManager.toHttpUrl() then does a blanket
`path.replace("//", "/~/")` to turn oneM2M's internal SP-relative
marker into the literal wire format - and because str.replace() hits
every occurrence, it also rewrote our unrelated ingress-routing slash,
inserting a bogus extra "/~/" segment that no ingress rule matches.
Dropping the trailing slash from `address` leaves exactly one "//"
boundary (the legitimate one before the CSR path), so only the correct
segment gets rewritten.
While in there, reordered both meep-acme-mn-cse's and meep-acme-in-cse's
Dockerfiles so `pip install` runs right after cloning the upstream ACME
repo, before `COPY ./data` overlays our own entrypoint/config/source
files. Previously any edit to those files invalidated Docker's cache
for the pip layer too, forcing a full dependency re-download on every
rebuild.
Thanos long-term storage default fallback (deploy.go, objstore.go,
charts/thanos)
----------------------------------------------------------------
meep-thanos and meep-thanos-archive crash-looped indefinitely whenever
the manual long-term storage setup (README) wasn't completed, because
the objstore secret still held the shipped placeholder endpoint. Added
detection in meepctl (utils/objstore.go) that recognizes a missing,
empty, or still-placeholder objstore secret and transparently points
Thanos and its Prometheus sidecar at the RustFS instance already
bundled in charts/thanos, instead of leaving them to fail forever. A
real, manually-configured object store is left completely untouched -
this only engages as a fallback.
Two follow-on fixes were needed to make the fallback actually usable
in a single-node deployment:
- RustFS defaults to a 4-replica distributed cluster with pod
anti-affinity, which can never schedule on one node. The fallback
now forces single-replica standalone mode.
- RustFS also defaults to local-path-provisioner-managed storage in an
arbitrary directory, and to running as a hardcoded 10001:10001 user
that doesn't own that directory. Added a static hostPath PersistentVolume
template (charts/thanos/templates/rustfs/hostpath-pv.yaml) so RustFS's
data lands under ~/.meep like every other MEEP component, and set
RustFS's pod securityContext to the same configured uid/gid meepctl
already uses for meep-docker-registry, rather than loosening directory
permissions to work around the mismatch.
Separately, pinned prometheusOperator.thanosImage.tag to v0.41.0 in the
meep-prometheus case: charts/kube-prometheus-stack defaults to the
sidecar's ancient v0.25.2, while charts/thanos (query/storegateway/
compactor) runs v0.41.0. That gRPC/StoreAPI version gap caused a nil
pointer panic (QueryHints.IsSafeToExecute) on every query Thanos Query
sent the sidecar, silently breaking both Prometheus's own long-term
storage and Grafana's separate "Thanos" datasource.