jiebi/CodeConvo huggingface dataset:
Change:
<!-- This form is for bug reports and feature requests ONLY! If you're looking for help check and the . --Is this a BUG REPORT or FEATURE REQUEST?: /kind feature What happened: Host Networking is enabled for the nvidia-gpu daemonset. Trying to understand the purpose. What you expected to happen: Disabling hostNetworking seemed to work and GPU workloads are able to be scheduled to the cluster. How to reproduce it (as minimally and precisely as possible): Remove this line and apply the daemonset to a GPU enabled cluster. Anything else we need to know?: I would like to understand the purpose for using hostNetworking for the nvidia-gpu daemonset. It appears nvidia implementation does not use it either:
/sig node /sig network

Discussion:
effect: "NoExecute" - operator: "Exists" effect: "NoSchedule" <del> hostNetwork: true hostPID: true </del> volumes: - name: device-plugin hostPath:
Change:
<!-- This form is for bug reports and feature requests ONLY! If you're looking for help check and the . --Is this a BUG REPORT or FEATURE REQUEST?: What happened: I've created a CRD with the name . There is no validation specified on the CRD object. Creating the CRD itself succeeds, but attempting to create CRD resources with of that type fails with a validation error. What you expected to happen: I expect to be able to create CRD resources of type without a validation error. How to reproduce it (as minimally and precisely as possible): A normal working CRD example, : Applying this succeeds as expected: Simply changing the name of the CRD kind to breaks however, : CRD creates, but the actual resource fails validation: If you supply the object does create correctly. Anything else we need to know?: Environment: Kubernetes version (use ):Cloud provider or hardware configuration: Digitalocean VM cluster OS (e.g. from /etc/os-release): Server (Ubuntu 14.04.5) Client (Ubuntu 16.04.4) Kernel (e.g. ): Server (4.4.0-111-generic) Client (4.13.0-38-generic) Install tools: Others:
/sig api-machinery /area custom-resources
is a special suffix for name. When you create a object using , which will be render as instead of plain . That's why error occurs due to missing item list.
This sounds like a bug in , not a thing that should be "fixed" by restricting names.
I think the magic suffix is somewhat unexpected, but in the case that it doesn't change -- I would expect a warning or error when creating a CRD with that name. As for this specific behavior, I would consider it a bug -- there's no indication that the kubectl validation is against a different than the one explicitly specified in the resource, and confusingly disabling validation causes the operation to succeed normally (creating the explicitly defined resource , regardless of magic suffix).
cc
cc
PTAL . It is a kubectl bug.
Thanks! Fix works for me

Discussion:
import ( "errors" <del> "strings" </del> "k8s.io/apimachinery/pkg/runtime/schema" utilerrors "k8s.io/apimachinery/pkg/util/errors"

return utilerrors.NewAggregate(errs) } <del> if strings.HasSuffix(gvk.Kind, "List") { </del> <ins> if (gvk == schema.GroupVersionKind{Version: "v1", Kind: "List"}) { </ins> return utilerrors.NewAggregate(v.validateList(obj)) }

`)) Expect(err.Error()).To(Equal("[kind not set, apiVersion not set]")) }) <ins> It("is fine with crd resource with List as a suffix kind name, which may not be a list of resources", func() { err := validator.ValidateBytes([]byte(` apiVersion: fake.com/v1 kind: FakeList metadata: name: fake spec: foo: bar `)) Expect(err).To(BeNil()) }) </ins> })
Change:
Is this a BUG REPORT or FEATURE REQUEST?: /kind bug What happened: When a volume for a CSI-based PV being mounted, the code does not apply the fsGroup value when the PV is marked as readOnly = false. What you expected to happen: if pv.readOnly == false, then the fsGroup ownership value should be applied to the mounted volume.
/assign /sig storage

Discussion:
return err } <ins> // apply volume ownership if !c.readOnly && fsGroup != nil { err := volume.SetVolumeOwnership(c, fsGroup) if err != nil { // attempt to rollback mount. glog.Error(log("mounter.SetupAt failed to set fsgroup volume ownership for [%s]: %v", c.volumeID, err)) glog.V(4).Info(log("mounter.SetupAt attempting to unpublish volume %s due to previous error", c.volumeID)) if unpubErr := csi.NodeUnpublishVolume(ctx, c.volumeID, dir); unpubErr != nil { glog.Error(log( "mounter.SetupAt failed to unpublish volume [%s]: %v (caused by previous NodePublish error: %v)", c.volumeID, unpubErr, err, )) return fmt.Errorf("%v (caused by %v)", unpubErr, err) } if unmountErr := removeMountDir(c.plugin, dir); unmountErr != nil { glog.Error(log( "mounter.SetupAt failed to clean mount dir [%s]: %v (caused by previous NodePublish error: %v)", dir, unmountErr, err, )) return fmt.Errorf("%v (caused by %v)", unmountErr, err) } return err } glog.V(4).Info(log("mounter.SetupAt sets fsGroup to [%d] for %s", *fsGroup, c.volumeID)) } </ins> glog.V(4).Infof(log("mounter.SetUp successfully requested NodePublish [%s]", dir)) return nil }

} // Mounter.SetUp() <del> if err := csiMounter.SetUp(nil); err != nil { </del> <ins> fsGroup := int64(2000) if err := csiMounter.SetUp(&fsGroup); err != nil { </ins> t.Fatalf("mounter.Setup failed: %v", err) } path := csiMounter.GetPath()
Change:
<!-- This form is for bug reports and feature requests ONLY! If you're looking for help check and the . --Is this a BUG REPORT or FEATURE REQUEST?: /assign What happened: The terms are ANDed, which is not correct:
cc

Discussion:
if err != nil { return fmt.Errorf("Failed to parse MatchExpressions: %v", err) } <del> if !selector.Matches(labels.Set(nodeLabels)) { return fmt.Errorf("NodeSelectorTerm %+v does not match node labels", term.MatchExpressions) </del> <ins> if selector.Matches(labels.Set(nodeLabels)) { // Terms are ORed, so only one needs to match return nil </ins> } } <ins> return fmt.Errorf("No matching NodeSelectorTerms") </ins> } return nil }

pv:            testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{}), }, { <del> name:          "valid-constraints", </del> <ins> name:          "select-nothing", expectSuccess: false, pv:            testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{Required: &v1.NodeSelector{}}), }, { name:          "select-nothing-empty-terms", expectSuccess: false, pv: testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{ Required: &v1.NodeSelector{ NodeSelectorTerms: []v1.NodeSelectorTerm{ { MatchExpressions: []v1.NodeSelectorRequirement{}, }, }, }, }), }, { name:          "valid-multiple-terms", expectSuccess: true, pv: testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{ Required: &v1.NodeSelector{ NodeSelectorTerms: []v1.NodeSelectorTerm{ { MatchExpressions: []v1.NodeSelectorRequirement{ { Key:      "test-key3", Operator: v1.NodeSelectorOpIn, Values:   []string{"test-value1", "test-value3"}, }, }, }, { MatchExpressions: []v1.NodeSelectorRequirement{ { Key:      "test-key2", Operator: v1.NodeSelectorOpIn, Values:   []string{"test-value0", "test-value2"}, }, }, }, }, }, }), }, { name:          "valid-multiple-match-expressions", </ins> expectSuccess: true, pv: testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{ Required: &v1.NodeSelector{

}), }, { <del> name:          "invalid-key", </del> <ins> name:          "invalid-multiple-match-expressions-key", </ins> expectSuccess: false, pv: testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{ Required: &v1.NodeSelector{

}), }, { <del> name:          "invalid-values", </del> <ins> name:          "invalid-multiple-match-expressions-values", </ins> expectSuccess: false, pv: testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{ Required: &v1.NodeSelector{

}, }), }, <ins> { name:          "invalid-multiple-terms", expectSuccess: false, pv: testVolumeWithNodeAffinity(t, &v1.VolumeNodeAffinity{ Required: &v1.NodeSelector{ NodeSelectorTerms: []v1.NodeSelectorTerm{ { MatchExpressions: []v1.NodeSelectorRequirement{ { Key:      "test-key3", Operator: v1.NodeSelectorOpIn, Values:   []string{"test-value1", "test-value3"}, }, }, }, { MatchExpressions: []v1.NodeSelectorRequirement{ { Key:      "test-key2", Operator: v1.NodeSelectorOpIn, Values:   []string{"test-value0", "test-value1"}, }, }, }, }, }, }), }, </ins> } for _, c := range cases {
Change:
Since merged on Friday night, my PR () has failed several retests of pull-kubernetes-bazel-test. My PR is unrelated to the load balancer so I suspect that introduced a flake. I see several runs of that test against master that aren't failing, so clearly the test works sometimes (and the original PR passed it several times to before it merged). Perhaps the test harness sometimes runs problem tests in parallel and other times it doesn't. Is this a BUG REPORT or FEATURE REQUEST?: /kind bug What happened: My PR had one good run of pull-kubernetes-bazel-test before merged, but has failed several times since with no code changes to my PR. What you expected to happen: The tests should consistently pass unless related problem code is introduced.
/cc /cc /sig gcp /kind flake
My PR started failing recently too. See https://k8s-
Hey, thanks for identifying the issue. contains tests for - but the race condition was caused when tests with modified a singleton variable in a mock. The short-term fix is removing the calls, but the long-term fix is to not use a singleton. Fix is .

Discussion:
) func TestGetLoadBalancer(t *testing.T) { <del> t.Parallel() </del> vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) require.NoError(t, err)

} func TestEnsureLoadBalancerCreatesExternalLb(t *testing.T) { <del> t.Parallel() </del> vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) require.NoError(t, err)

} func TestEnsureLoadBalancerCreatesInternalLb(t *testing.T) { <del> t.Parallel() </del> vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) require.NoError(t, err)

} func TestEnsureLoadBalancerDeletesExistingInternalLb(t *testing.T) { <del> t.Parallel() </del> vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) require.NoError(t, err)

} func TestEnsureLoadBalancerDeletesExistingExternalLb(t *testing.T) { <del> t.Parallel() </del> vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) require.NoError(t, err)

} func TestEnsureLoadBalancerDeletedDeletesExternalLb(t *testing.T) { <del> t.Parallel() </del> vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) require.NoError(t, err)

} func TestEnsureLoadBalancerDeletedDeletesInternalLb(t *testing.T) { <del> t.Parallel() </del> vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) require.NoError(t, err)
Change:
After merged, we should also show deprecated kube-apiserver flags.
/sig api-machinery

Discussion:
fs.StringVar(&s.ServiceAccountSigningKeyFile, "service-account-signing-key-file", s.ServiceAccountSigningKeyFile, ""+ "Path to the file that contains the current private key of the service account token issuer. The issuer will sign issued ID tokens with this private key. (Requires the 'TokenRequest' feature gate.)") }

"The order of plugins in which they are passed to this flag does not matter. "+ "Comma-delimited list of: "+strings.Join(a.GenericAdmission.Plugins.Registered(), ", ")+".") fs.MarkDeprecated("admission-control", "Use --enable-admission-plugins or --disable-admission-plugins instead. Will be removed in a future version.") <ins> fs.Lookup("admission-control").Hidden = false </ins> a.GenericAdmission.AddFlags(fs) }

fs.IPVar(&s.BindAddress, "insecure-bind-address", s.BindAddress, ""+ "The IP address on which to serve the --insecure-port (set to 0.0.0.0 for all IPv4 interfaces and :: for all IPv6 interfaces).") fs.MarkDeprecated("insecure-bind-address", "This flag will be removed in a future version.") <ins> fs.Lookup("insecure-bind-address").Hidden = false </ins> fs.IntVar(&s.BindPort, "insecure-port", s.BindPort, ""+ "The port on which to serve unsecured, unauthenticated access. It is assumed "+

"the cluster and that port 443 on the cluster's public address is proxied to this "+ "port. This is performed by nginx in the default setup. Set to zero to disable.") fs.MarkDeprecated("insecure-port", "This flag will be removed in a future version.") <ins> fs.Lookup("insecure-port").Hidden = false </ins> } // TODO: remove it until kops stop using `--address`
Change:
/kind bug are failing. seems like the likely cause. cc /assign
ping
seems one test still failing.

Discussion:
"//pkg/kubelet/apis/kubeletconfig:go_default_library", "//pkg/kubelet/checkpointmanager:go_default_library", "//pkg/kubelet/checkpointmanager/checksum:go_default_library", <ins> "//pkg/kubelet/checkpointmanager/errors:go_default_library", </ins> "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/dockershim/cm:go_default_library",

utilerrors "k8s.io/apimachinery/pkg/util/errors" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" <ins> "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors" </ins> kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker" "k8s.io/kubernetes/pkg/kubelet/qos"

// actions will only have sandbox ID and not have pod namespace and name information. // Return error if encounter any unexpected error. if checkpointErr != nil { <ins> if checkpointErr != errors.ErrCheckpointNotFound { err := ds.checkpointManager.RemoveCheckpoint(podSandboxID) if err != nil { glog.Errorf("Failed to delete corrupt checkpoint for sandbox %q: %v", podSandboxID, err) } } </ins> if libdocker.IsContainerNotFoundError(statusErr) { glog.Warningf("Both sandbox container and checkpoint for id %q could not be found. "+ "Proceed without further sandbox information.", podSandboxID)

err := ds.checkpointManager.GetCheckpoint(id, checkpoint) if err != nil { glog.Errorf("Failed to retrieve checkpoint for sandbox %q: %v", id, err) <ins> if err == errors.ErrCorruptCheckpoint { err = ds.checkpointManager.RemoveCheckpoint(id) if err != nil { glog.Errorf("Failed to delete corrupt checkpoint for sandbox %q: %v", id, err) } } </ins> continue } result = append(result, checkpointToRuntimeAPISandbox(id, checkpoint))
Change:
/kind bug are failing. seems like the likely cause. cc /assign
ping
seems one test still failing.

Discussion:
"//pkg/kubelet/types:go_default_library", "//pkg/kubelet/util/cache:go_default_library", "//pkg/kubelet/util/ioutils:go_default_library", <del> "//pkg/kubelet/util/store:go_default_library", </del> "//pkg/security/apparmor:go_default_library", "//pkg/util/parsers:go_default_library", "//vendor/github.com/armon/circbuf:go_default_library",

runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" <ins> "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors" </ins> kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/dockershim/cm" "k8s.io/kubernetes/pkg/kubelet/dockershim/network"

"k8s.io/kubernetes/pkg/kubelet/dockershim/network/kubenet" "k8s.io/kubernetes/pkg/kubelet/server/streaming" "k8s.io/kubernetes/pkg/kubelet/util/cache" <del> utilstore "k8s.io/kubernetes/pkg/kubelet/util/store" </del> "k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker" "k8s.io/kubernetes/pkg/kubelet/dockershim/metrics"

err := ds.checkpointManager.GetCheckpoint(podSandboxID, checkpoint) // Return empty portMappings if checkpoint is not found if err != nil { <del> if err == utilstore.ErrKeyNotFound { </del> <ins> if err == errors.ErrCheckpointNotFound { </ins> return nil, nil } <ins> errRem := ds.checkpointManager.RemoveCheckpoint(podSandboxID) if errRem != nil { glog.Errorf("Failed to delete corrupt checkpoint for sandbox %q: %v", podSandboxID, errRem) } </ins> return nil, err } _, _, _, checkpointedPortMappings, _ := checkpoint.GetData()
Change:
The comments in mention the IPv6 /66 restriction. This restriction was removed in PR Also, the unit tests show the /66 as the largest subnet. Is this a BUG REPORT or FEATURE REQUEST?: /kind bug What happened: What you expected to happen: How to reproduce it (as minimally and precisely as possible): Anything else we need to know?: Environment: Kubernetes version (use ): Cloud provider or hardware configuration: OS (e.g. from /etc/os-release): Kernel (e.g. ): Install tools: Others:
/assign rpothier
/sig cluster-lifecycle
/area ipv6

Discussion:
// If the pod network size is /113 or larger, the node CIDR will be set to the same // size and this will be rejected later in validation. // <del> // NOTE: Currently, the pod network must be /66 or larger. It is not reflected here, // but a smaller value will fail later validation. // </del> // NOTE: Currently, the design allows a maximum of 64K nodes. This algorithm splits // the available bits to maximize the number used for nodes, but still have the node // CIDR be a multiple of eight.

expectedPrefix: "104", }, { <del> name:           "V6: Largest subnet currently supported", podSubnet:      "2001:db8::/66", expectedPrefix: "80", }, { </del> name:           "V6: For /64 pod net, use /80", podSubnet:      "2001:db8::/64", expectedPrefix: "80", }, <ins> { name:           "V6: For /48 pod net, use /64", podSubnet:      "2001:db8::/48", expectedPrefix: "64", }, { name:           "V6: For /32 pod net, use /48", podSubnet:      "2001:db8::/32", expectedPrefix: "48", }, </ins> } for _, test := range tests { actualPrefix := calcNodeCidrSize(test.podSubnet)
Change:
Our GKE scalability jobs (https://k8s-) are failing in the cluster teardown step (even though the e2e tests themselves passed). E.g failures: https://k8s- https://k8s- Seems like it's caused by some leaked network-related resources: /assign Krzysiek - Could you PTAL into this when you find time? It'll be great to have our GKE suite back to green. cc
I think this is related to an earlier bug we've seen (similar one for GCE): Basically service-controller is creating some cloud resources (like firewalls) for lb-type services which are not brought down properly when the k8s cluster is brought down.
Also another related issue - There should also be an internal bug for this somewhere. IMO we may be able to fix this in test-infra (without waiting for proper long-term fix on gke side).
I am adding clean-up method. This way all of the firewall rules will be cleaned up after tests. If this method has to remove any firewall rule, the teardown phase will return exception. It's not a fix for the bug - it only allows us to easy isolate tests leaking firewall rules.
Tests: should have session affinity work for LoadBalancer service with ESIPP on should be able to switch session affinity for LoadBalancer service with ESIPP on should have session affinity work for LoadBalancer service with ESIPP off should be able to switch session affinity for LoadBalancer service with ESIPP off leak resources related to the LoadBalancer. PR will fix this.

Discussion:
jig.SanityCheckService(svc, v1.ServiceTypeLoadBalancer) defer func() { framework.StopServeHostnameService(cs, f.InternalClientset, f.ScalesGetter, ns, serviceName) <ins> lb := cloudprovider.GetLoadBalancerName(svc) framework.Logf("cleaning gce resource for %s", lb) framework.CleanupServiceGCEResources(cs, lb, framework.TestContext.CloudConfig.Region, framework.TestContext.CloudConfig.Zone) </ins> }() ingressIP := framework.GetIngressPoint(&svc.Status.LoadBalancer.Ingress[0]) port := int(svc.Spec.Ports[0].Port)
Change:
<!-- This form is for bug reports and feature requests ONLY! If you're looking for help check and the . If this may be security issue, please disclose it privately via --Is this a BUG REPORT or FEATURE REQUEST?: /kind bug What happened: reports following errors- What you expected to happen: This is the required fix reported by PR processing. How to reproduce it (as minimally and precisely as possible): run from k8s source. Anything else we need to know?: Detailed list of ERRORS reported by Environment: Kubernetes version (use ):Cloud provider or hardware configuration:OS (e.g. from /etc/os-release):Kernel (e.g. ):Install tools: Others:
There are no sig labels on this issue. Please add a sig label. <detailsA sig label can be by either: a sig: e.g., to notify the contributor experience sig, OR the label manually: e.g., to apply the label Note: Method 1 will trigger an email to the group. See the . The in method 1 has to be replaced with one of these: bugs, feature-requests, pr-reviews, test-failures, proposals Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig-testing-bugs
It looks like you're building with go1.9.x… master is building with go1.10 now, so gofmt expects to run with that version
/close +1 to what said

Discussion:
} // Marshal to disk <del> if err := clientcmd.WriteToFile(kubeconfigData, kubeconfigPath); err != nil { return err } return nil </del> <ins> return clientcmd.WriteToFile(kubeconfigData, kubeconfigPath) </ins> } func loadRESTClientConfig(kubeconfig string) (*restclient.Config, error) {
Change:
/kind feature The equivalence cache feature is planned to move to beta in 1.11, and it would be useful to have some metrics attached to it. The equivalence cache should improve scheduling throughput, so we want to be able to correlate e.g. throughput with eCache hit rate. /sig scheduling /sig instrumentation
/assign misterikkit
Issues go stale after 90d of inactivity. Mark the issue as fresh with . Stale issues rot after an additional 30d of inactivity and eventually close. If this issue is safe to close now please do so with . Send feedback to sig-testing, kubernetes/test-infra and/or . /lifecycle stale
/remove-lifecycle stale

Discussion:
"//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/cache:go_default_library", <ins> "//pkg/scheduler/metrics:go_default_library", </ins> "//pkg/util/hash:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",

"hash/fnv" "sync" <ins> "k8s.io/kubernetes/pkg/scheduler/metrics" </ins> "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/scheduler/algorithm"

) { if nodeInfo == nil || nodeInfo.Node() == nil { // This may happen during tests. <ins> metrics.EquivalenceCacheWrites.WithLabelValues("discarded_bad_node").Inc() </ins> return } // Skip update if NodeInfo is stale. if !cache.IsUpToDate(nodeInfo) { <ins> metrics.EquivalenceCacheWrites.WithLabelValues("discarded_stale").Inc() </ins> return }

n.mu.RLock() defer n.mu.RUnlock() value, ok = n.cache[predicateKey][equivalenceHash] <ins> if ok { metrics.EquivalenceCacheHits.Inc() } else { metrics.EquivalenceCacheMisses.Inc() } </ins> return value, ok }

Name:      "total_preemption_attempts", Help:      "Total preemption attempts in the cluster till now", }) <ins> equivalenceCacheLookups = prometheus.NewCounterVec( prometheus.CounterOpts{ Subsystem: SchedulerSubsystem, Name:      "equiv_cache_lookups_total", Help:      "Total number of equivalence cache lookups, by whether or not a cache entry was found", }, []string{"result"}) EquivalenceCacheHits   = equivalenceCacheLookups.With(prometheus.Labels{"result": "hit"}) EquivalenceCacheMisses = equivalenceCacheLookups.With(prometheus.Labels{"result": "miss"}) EquivalenceCacheWrites = prometheus.NewCounterVec( prometheus.CounterOpts{ Subsystem: SchedulerSubsystem, Name:      "equiv_cache_writes", Help:      "Total number of equivalence cache writes, by result", }, []string{"result"}) </ins> metricsList = []prometheus.Collector{ SchedulingLatency, E2eSchedulingLatency,

SchedulingAlgorithmPremptionEvaluationDuration, PreemptionVictims, PreemptionAttempts, <ins> equivalenceCacheLookups, EquivalenceCacheWrites, </ins> } )