10 Commits
Author SHA1 Message Date
dualfroz f36668571d Describe this repository 2026-10-22 21:03:42 +02:00
dualfroz c43768946e executor: treat a cached function service as invalid during scale-in
IsValid accepted a deployment as long as its status reported an
available replica. When the idle reaper scales the deployment to zero,
Spec.Replicas drops right away but the status can still count the pod
that is shutting down, so a cache hit kept routing requests to it.

Export the availability check from executor/util, make it look at the
spec as well, and use it in the container and newdeploy IsValid paths.
2026-10-18 10:54:32 +02:00
upstream c7dc24674c Upstream fission/fission state of the touched files before 56824b6df3 2026-10-18 10:54:32 +02:00
dualfroz a8bc9d02d5 newdeploy: wait for the replica after scaling a function in from zero
createOrGetDeployment decided whether to wait for readiness from the
Status.AvailableReplicas of the copy it read before ScaleDeployment, the same
pattern the container manager had. On the scale-from-zero path that copy can
still count the pod the idle reaper is tearing down, so WaitForDeployment, and
with it the ObservedGeneration gate, was skipped entirely.

Track whether we issued the scale-up and always wait in that case. The test
covers both the pre-scale read and a status the controller has not caught up
with yet.
2026-10-15 13:24:06 +02:00
upstream 180cbd38f6 Upstream fission/fission state of the touched files before fddd1d2205 2026-10-15 13:24:06 +02:00
dualfroz fd83c655ca executor/util: wait for the deployment controller to observe the scale request
WaitForDeployment returned as soon as AvailableReplicas was high enough, without checking that the status belonged to the current spec. UpdateScale only writes the spec, so a Get issued right after it can still carry the previous generation's status, counting the pod that is being torn down.

Gate AvailableReplicas behind ObservedGeneration, the same condition WaitForDeploymentRollout already uses in the integration framework.
2026-10-15 13:15:02 +02:00
upstream 7355ea9c65 Upstream fission/fission state of the touched files before dae21a228f 2026-09-17 15:59:49 +02:00
dualfroz fb9eb7fe1c container: cover the status that has not caught up with the scale request
Turn the scale-from-zero regression into a table so it covers both the pre-scale read and a status the controller has not written yet, and give the type assertion in the reactor the SAFETY comment the lint gate wants.
2026-10-15 13:15:02 +02:00
dualfroz 22d672c57e container: wait for the replica after scaling a function in from zero (#3183)
createOrGetDeployment read the Deployment once and then reused that copy's
Status.AvailableReplicas to decide whether to wait for readiness. On the
scale-from-zero path the read happens while the idle reaper's pod is still
terminating, so the pre-scale status can still report an available replica and
the readiness wait is skipped. The executor then returns a Service whose
endpoints are empty and the router's forward fails with a 500.

Track whether we issued the scale-up and always wait for the deployment in
that case; WaitForDeployment re-reads from the API server, so an already
available deployment still returns on its first poll.
2026-10-15 13:15:02 +02:00
upstream 4bd00b3eef Upstream fission/fission state of the touched files before d5703081e0 2026-09-11 23:07:10 +02:00