listMembers polls MemberList until the EtcdAPICall timeout, but its
condition returned the error, which stops the poll immediately. One
transient error failed GetMemberID and ListMembers, breaking control
plane join right after adding a learner, and etcd member removal on
reset. Return false, nil like the other etcd retry loops.
Now that the poll runs to the deadline, say that the retry timeout was
exhausted and keep the last etcd error as the cause.
DeviceToleration.effect documents that an empty value matches all taint
effects, and resourceclaim.ToleratesTaint implements that. The eviction
controller however skipped every toleration whose effect was not exactly
NoExecute before calling it, so a toleration without effect did not
protect the pod from a NoExecute taint.
Accept an empty effect as well, and add a test case.
Signed-off-by: yogeshbendre <07.yogesh@gmail.com>
In watchSomething.run, the stopChan case of the select used "break",
which only leaves the select, not the enclosing for loop. After Stop,
run kept reading and converting events from the upstream watch and
never closed its result channel unless the upstream closed its own
channel first.
Return instead, which runs the deferred close of the result channel.
The GangScheduling PlacementFeasible status reported scheduled and
remaining children:
scheduling policy's minimum threshold (2) cannot be satisfied: 0 scheduled, 1 remaining
These counts don't add up to the threshold, which reads as if the group
had too few members. Report the scheduled children, the children
evaluated as unschedulable and the children not evaluated yet instead:
scheduling policy's minimum threshold (2) cannot be satisfied: 0 scheduled, 1 unschedulable, 1 not-evaluated
To track the unschedulable count, add an Unschedulable field to
PlacementProgress and increment it alongside Scheduled in the pod group
and composite pod group scheduling loops.
* scheduler: rank pods from disruption mode Single groups as individual preemption victims
* scheduler: label preemption_workload_disruptions by victim type
Record workload preemption disruptions per preemption unit type (pod,
podgroup, compositepodgroup) instead of a single count of group-related
units.
- PreemptionVictim gains Type(); PreemptionCandidate replaces
NumPodGroupDisruptions() with NumDisruptionsByVictimType().
- The unit type is the topmost DisruptionMode=All group, or pod for
pods evicted on their own (standalone or in DisruptionMode=Single
groups). isGroupVictim is removed.
- The metric stays workload-preemptor only: legacy pod preemption keeps
its own metrics until naked pods move to the workload scheduling cycle.
In a CompositePodGroup hierarchy, each group has at most one parent:
- Cycles are caught during upward root resolution (workloadForest,
HierarchyTracker, cache.FindRootGroup), so a cyclic hierarchy has no
root and never enters the scheduling cycle.
- Hierarchy depth (WorkloadMaxTreeDepth) is validated once at the start
of each pod group scheduling cycle in validatePodGroupSubtree.
Consequently, traversals that run during or after the scheduling cycle
don't need their own WorkloadMaxTreeDepth bounds or cycle checks:
- GetPodGroupStates drops its depth check without adding a cycle check,
as it runs after root resolution and validatePodGroupSubtree.
- TraverseHierarchyUp drops its WorkloadMaxTreeDepth bound and visited
set, as preemption only walks up from pods that are already scheduled.
Traversals in the scheduling queue, which run before the scheduling
cycle, keep cycle detection:
- getRootLookupInfoForParentCPG replaces sets.Set[fwk.EntityKey] with a
visited slice (slices.Contains) seeded with the starting group key,
matching cache.FindRootGroup and HierarchyTracker, and logs the full
cycle path.
- getLeafPodGroups and buildPodGroupInfo keep sets.Set[fwk.EntityKey]
without enforcing WorkloadMaxTreeDepth.
xcopy prompts whether a non-existent destination is a file or a directory and
whether to overwrite existing files, and both prompts fail without an
interactive stdin. The first breaks TestCopyDir/success on Windows (exit status
2), the second would break the etcd data rollback, which copies over an existing
data dir. Pass /I and /Y so xcopy doesn't prompt.
Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
Locked to default in 1.35, so 1.38 is the first release that can drop
it under the three-release emulation window. Nothing outside the
registration referenced it.
Deprecated in 1.32, locked to false in 1.35 with a "remove in 1.38"
note. The soft-eviction override it guarded is already gone, so only
the registration was left.
The gate went GA in 1.20 and was locked to default in 1.35 with a
"remove in v1.38" note. Nothing reads it any more: the only references
left were its own registration.