Skip to content

DRA: Introduce a helper function producing standardized 'resource.kubernetes.io/pcieRoot' device attributes for DRA drivers #132296

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 16 commits into
base: master
Choose a base branch
from

Conversation

everpeace
Copy link
Contributor

@everpeace everpeace commented Jun 13, 2025

What type of PR is this?

/kind feature

What this PR does / why we need it:

This PR introduces a helper function GetPCIeRootAttributeByPCIBusID(pciBusID) for DRA drivers, allowing them to produce standardized device attributes in a consistent way.

Which issue(s) this PR is related to:

ref: NVIDIA/k8s-dra-driver-gpu#401 (comment)
KEP: kubernetes/enhancements#4381

Special notes for your reviewer:

Does this PR introduce a user-facing change?


Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.:

- [KEP]: https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/4381-dra-structured-parameters

…utes for DRA drivers

The shared function can provide a way for DRA drivers to produce standardized device attributes in a consistent way.

Signed-off-by: Shingo Omura <[email protected]>
@k8s-ci-robot
Copy link
Contributor

Adding the "do-not-merge/release-note-label-needed" label because no release-note block was detected, please follow our release note process to remove it.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. kind/feature Categorizes issue or PR as related to a new feature. do-not-merge/release-note-label-needed Indicates that a PR should not merge because it's missing one of the release note labels. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. do-not-merge/needs-sig Indicates an issue or PR lacks a `sig/foo` label and requires one. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. labels Jun 13, 2025
@k8s-ci-robot
Copy link
Contributor

This issue is currently awaiting triage.

If a SIG or subproject determines this is a relevant issue, they will accept it by applying the triage/accepted label and provide further guidance.

The triage/accepted label can be added by org members by writing /triage accepted in a comment.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added the needs-priority Indicates a PR lacks a `priority/foo` label and requires one. label Jun 13, 2025
@k8s-ci-robot k8s-ci-robot requested review from klueska and pohly June 13, 2025 19:21
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: everpeace
Once this PR has been reviewed and has the lgtm label, please assign pohly for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added sig/node Categorizes an issue or PR as relevant to SIG Node. wg/device-management Categorizes an issue or PR as relevant to WG Device Management. and removed do-not-merge/needs-sig Indicates an issue or PR lacks a `sig/foo` label and requires one. labels Jun 13, 2025
@everpeace
Copy link
Contributor Author

/assign @aojea

@michaelasp
Copy link
Contributor

/cc @michaelasp

@k8s-ci-robot
Copy link
Contributor

@michaelasp: GitHub didn't allow me to request PR reviews from the following users: michaelasp.

Note that only kubernetes members and repo collaborators can review this PR, and authors cannot review their own PRs.

In response to this:

/cc @michaelasp

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

Copy link
Contributor

@michaelasp michaelasp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is awesome, thanks for adding this!

@k8s-ci-robot k8s-ci-robot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Jun 14, 2025
@everpeace everpeace force-pushed the dra-standard-attribute-and-pcieroot-resolution-util branch from 3cbc0aa to db0bf33 Compare June 14, 2025 06:33
Copy link
Contributor

@klueska klueska Jun 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most of this is linux specific so the parts that are should be in a _linux.go specific file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 73d65f8

// The value is a string value in the format `pci<domain>:<bus>`,
// referring to a PCIe (Peripheral Component Interconnect Express) Root Complex.
// This attribute can be used to identify devices that share the same PCIe Root Complex.
StandardDeviceAttributePCIeRoot = StandardDeviceAttributePrefix + "pcieRoot"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
StandardDeviceAttributePCIeRoot = StandardDeviceAttributePrefix + "pcieRoot"
StandardDeviceAttributePCIeRoot resourceapi.QualifiedName = StandardDeviceAttributePrefix + "pcieRoot"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 8ed8217

)

var (
bdfRegexp = regexp.MustCompile(`^([0-9a-f]{4}):([0-9a-f]{2}):([0-9a-f]{2})\.([0-9a-f]{1})$`)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Give that this is only use din one function it seems unnecessary to declare as a global like this

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 88b34ea

@k8s-ci-robot k8s-ci-robot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Jun 18, 2025
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lets conslidate this into the attribute.go file

Copy link
Contributor Author

@everpeace everpeace Jun 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in caa64af

Comment on lines +29 to +36
// GetPCIeRootAttributeByPCIBusID retrieves the PCIe Root Complex for a given PCI Bus ID.
// in BDF (Bus-Device-Function) format, e.g., "0123:45:1e.7".
//
// It returns a DeviceAttribute with the PCIe Root Complex information("pci<domain>:<bus>")
// as a string value or an error if the PCI Bus ID is invalid or the root complex cannot be determined.
//
// ref: https://wiki.xenproject.org/wiki/Bus:Device.Function_(BDF)_Notation
func GetPCIeRootAttributeByPCIBusID(pciBusID string) (DeviceAttribute, error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think I said this elsewhere, but the reason to be explicit about ByPCIBusID is that I think we will want a GetPCIeRootAttributeByCpuID() at some point soon.

Copy link
Contributor Author

@everpeace everpeace Jun 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I also imagined GetPCIeRootAttributeByInterfaceName(), too (but, my original idea was to implement these variations via option patterns).

We can resolve PCIe root for interfaces by readlink /sys/class/net/<ifname>/device.

# PCIe root for "enp48s0f0np0" is "pci0000:20"
$ readlink -f /sys/class/net/enp48s0f0np0/device
/sys/devices/pci0000:20/0000:20:03.1/0000:26:00.0/0000:27:08.0/0000:2e:00.0/0000:2f:10.0/0000:30:00.0

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can revisit this if / when we get another variant.

Copy link
Contributor Author

@everpeace everpeace Jun 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the way,

I think we will want a GetPCIeRootAttributeByCpuID() at some point soon.

It might be GetCpuSocketNumberByCpuID() or GetNumaNodeByCpuID()?? I think CPU is not within the PCIe hierarchy. Thus, aligning NIC and CPUs in hardware topology, we would need another standard device attribute, e.g. cpuSocketNumber or numaNode, in the near future (as stated in kubernetes/enhancements#5316 (comment)).

EXAMPLE: I attached an example of lstopo output image. In this example, there are two packages, and each package has one NUMA Node, each numa node has 64 cores and 4 PCI Host Bridges (PCIe Roots).

image

$ lstopo -v --of console
Machine (P#0 total=1584474936KB DMIProductName="REDACTED" DMIProductVersion=xxxxxx DMIBoardVendor=REDACTED DMIBoardName=REDACTED DMIBoardVersion=REDACTED DMIBoardAssetTag="REDACTED" DMIChassisVendor=REDACTED DMIChassisType=1 DMIChassisVersion=REDACTED DMIChassisAsse
  Package L#0 (P#0 total=791818556KB CPUVendor=REDACTED CPUFamilyNumber=REDACTED CPUModelNumber=REDACTED CPUModel="REDACTED" CPUStepping=1)
    NUMANode L#0 (P#0 local=791818556KB total=791818556KB)
      ...<CPUs here>...
    HostBridge L#0 (buses=0000:[00-0e])
      ...<PCIe devices/bridges here>...
    HostBridge L#12 (buses=0000:[20-34])
      ...<PCIe devices/bridges here>...
    HostBridge L#24 (buses=0000:[40-46])
      ...<PCIe devices/bridges here>...
    HostBridge L#29 (buses=0000:[60-6b])
      ...<PCIe devices/bridges here>...
  Package L#1 (P#1 total=792656380KB CPUVendor=REDACTED CPUFamilyNumber=REDACTED CPUModelNumber=REDACTED CPUModel="REDACTED" CPUStepping=1)
    NUMANode L#1 (P#1 local=792656380KB total=792656380KB)
      ...<CPUs here>...
    HostBridge L#39 (buses=0000:[80-87])
      ...<PCIe devices/bridges here>...
    HostBridge L#44 (buses=0000:[a0-a6])
      ...<PCIe devices/bridges here>...
    HostBridge L#49 (buses=0000:[c0-c6])
      ...<PCIe devices/bridges here>...
    HostBridge L#53 (buses=0000:[e0-e7])
      ...<PCIe devices/bridges here>...
...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to map a given CPU to its PCIe root complex independent of NUMA. We've done alignment by NUMA in the past, but going forward direct alignment by PCIe root complex is the preferred approach.

One way to see this association on my 4-GPU system is as follows:

$ cat /sys/bus/pci/devices/0019:01:00.0/local_cpulist
72-143
$ cat /sys/bus/pci/devices/0018:01:00.0/local_cpulist
72-143
$ cat /sys/bus/pci/devices/0009:01:00.0/local_cpulist
0-71
$ cat /sys/bus/pci/devices/0008:01:00.0/local_cpulist
0-71

The first two GPUs are "local" to CPUs 72-143 and the second two GPUs are "local" to CPUs 0-71. Where "local" implies that they are on the same PCIe root complex. You can imagine how one could use this to implement a robust GetPCIeRootAttributeByCpuID() function.

There may be other more straightforward ways to glean this information, but this is gist of it.

/cc @kad

Copy link
Contributor Author

@everpeace everpeace Jun 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first two GPUs are "local" to CPUs 72-143, and the second two GPUs are "local" to CPUs 0-71. Where "local" implies that they are on the same PCIe root complex. You can imagine how one could use this to implement a robust GetPCIeRootAttributeByCpuID() function.

In my 8-GPU system,

$ nvidia-smi --query-gpu=gpu_bus_id --format=csv,noheader
00000000:04:00.0
00000000:23:00.0
00000000:43:00.0
00000000:64:00.0
00000000:84:00.0
00000000:A3:00.0
00000000:C3:00.0
00000000:E4:00.0

For example, For 0000:04:00.0(1st) and 0000:23:00.0(2nd):

  • both are "local" to 0-63,
  • BUT, they have different PCIe roots
# For 0000:04:00.0:
#   it is "local" to CPU 0-63
$ cat /sys/bus/pci/devices/0000:04:00.0/local_cpulist
0-63
#   its PCIe root is pci0000:00
$ readlink /sys/bus/pci/devices/0000:04:00.0
../../../devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:01.0/0000:04:00.0

# For 0000:23:00.0:
#   it is "local" to CPU 0-63, too
$ cat /sys/bus/pci/devices/0000:23:00.0/local_cpulist
0-63
#   but, its PCIe Root is pci0000:20
$ readlink /sys/bus/pci/devices/0000:23:00.0
../../../devices/pci0000:20/0000:20:01.1/0000:21:00.0/0000:22:00.0/0000:23:00.0

Thus, CPU 0-63 are "local" to at least two PCIe roots(pci0000:00 and pci0000:20). So, I am still not sure how we can map a given CPU to its PCIe root complex🤔. Are there any other ways to determine/define it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is not necessarily a 1:1 mapping for CPU <--> PCIe root complex, unfortunately (which can obviously complicate things when we want to do exact string matching for alignment). Seems when it comes to CPUs we may need a list rather than a single value -- which unfortunately won't work with simple matchAttributes but will when we have the more expressive version of this: kubernetes/enhancements#5254

Note, on my 8-GPU system I don't have this "issue":

$ nvidia-smi --query-gpu=gpu_bus_id --format=csv,noheader
00000000:07:00.0
00000000:0F:00.0
00000000:47:00.0
00000000:4E:00.0
00000000:87:00.0
00000000:90:00.0
00000000:B7:00.0
00000000:BD:00.0

$ cat /sys/bus/pci/devices/0000\:07\:00.0/local_cpulist
48-63,176-191
$ cat /sys/bus/pci/devices/0000\:0f\:00.0/local_cpulist
48-63,176-191
$ readlink /sys/bus/pci/devices/0000\:07\:00.0
../../../devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:00.0
$ readlink /sys/bus/pci/devices/0000\:0f\:00.0
../../../devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:04.0/0000:0a:00.0/0000:0b:10.0/0000:0d:00.0/0000:0e:00.0/0000:0f:00.0

$ cat /sys/bus/pci/devices/0000\:47\:00.0/local_cpulist
16-31,144-159
$ cat /sys/bus/pci/devices/0000\:4e\:00.0/local_cpulist
16-31,144-159
$ readlink /sys/bus/pci/devices/0000\:47\:00.0
../../../devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:00.0/0000:43:00.0/0000:44:00.0/0000:45:00.0/0000:46:00.0/0000:47:00.0
$ readlink /sys/bus/pci/devices/0000\:4e\:00.0
../../../devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:04.0/0000:49:00.0/0000:4a:10.0/0000:4c:00.0/0000:4d:00.0/0000:4e:00.0

$ cat /sys/bus/pci/devices/0000\:87\:00.0/local_cpulist
112-127,240-255
$ cat /sys/bus/pci/devices/0000\:90\:00.0/local_cpulist
112-127,240-255
$ readlink /sys/bus/pci/devices/0000\:87\:00.0
../../../devices/pci0000:80/0000:80:01.1/0000:81:00.0/0000:82:00.0/0000:83:00.0/0000:84:00.0/0000:85:00.0/0000:86:00.0/0000:87:00.0
$ readlink /sys/bus/pci/devices/0000\:90\:00.0
../../../devices/pci0000:80/0000:80:01.1/0000:81:00.0/0000:82:04.0/0000:8b:00.0/0000:8c:10.0/0000:8e:00.0/0000:8f:00.0/0000:90:00.0

$ cat /sys/bus/pci/devices/0000\:b7\:00.0/local_cpulist
80-95,208-223
$ cat /sys/bus/pci/devices/0000\:bd\:00.0/local_cpulist
80-95,208-223

$ readlink /sys/bus/pci/devices/0000\:b7\:00.0
../../../devices/pci0000:b0/0000:b0:01.1/0000:b1:00.0/0000:b2:00.0/0000:b3:00.0/0000:b4:00.0/0000:b5:00.0/0000:b6:00.0/0000:b7:00.0
$ readlink /sys/bus/pci/devices/0000\:bd\:00.0
../../../devices/pci0000:b0/0000:b0:01.1/0000:b1:00.0/0000:b2:04.0/0000:b8:00.0/0000:b9:10.0/0000:bb:00.0/0000:bc:00.0/0000:bd:00.0

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks.

Seems when it comes to CPUs we may need a list rather than a single value -- which unfortunately won't work with simple matchAttributes but will when we have the more expressive version of this: kubernetes/enhancements#5254

Yes, I agree. In that case, could we plan to add resource.kubernetes.io/pcieRoots(plural) rather than resource.kubernetes.io/pcieRoot in the near future? And, could we add an array type as device attribute's value type?

Note, on my 8-GPU system I don't have this "issue":

lucky you 😄

@klueska
Copy link
Contributor

klueska commented Jun 18, 2025

@pohly can you point us where this can be exercised in the e2e driver?

@everpeace everpeace changed the title DRA: Introduce a helper function producing standardized device attributes for DRA drivers DRA: Introduce a helper function producing standardized 'resource.kubernetes.io/pcieRoot' device attributes for DRA drivers Jun 19, 2025
@pohly pohly moved this from 🆕 New to 👀 In review in Dynamic Resource Allocation Jun 25, 2025
@k8s-ci-robot k8s-ci-robot requested a review from kad June 26, 2025 09:17
@pohly
Copy link
Contributor

pohly commented Jun 26, 2025

can you point us where this can be exercised in the e2e driver?

The test/e2e/dra/test-driver? That driver has no hardware dependency, so the code in this PR cannot be exercised through it.

In general, writing any kind of integration or E2E test for this in the Kubernetes CI is problematic because it needs some real, deterministic sysfs. We don't have that.

@klueska
Copy link
Contributor

klueska commented Jun 26, 2025

Thanks @pohly that makes sense. Do you have any comments on the name of the package / API for this?

@pohly
Copy link
Contributor

pohly commented Jun 27, 2025

/test pull-kubernetes-apidiff

@pohly
Copy link
Contributor

pohly commented Jun 29, 2025

/test pull-kubernetes-apidiff

Might have died because of OOM.

expectedErrMsg string
}{
"valid": {
smockSysfsSetup: func(t *testing.T, mockSysfs sysfsPath) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does the "s" in "smock" stand for?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, it's just typo... Thanks for the catch!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 94973ba

}
}

func TouchFile(t *testing.T, path string) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
func TouchFile(t *testing.T, path string) {
func touchFile(t *testing.T, path string) {

It's easier to see that this is not a public API when it's not exported (doesn't make a different in _test.go, but still...).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 2bc45ca

}
}

func CreateSymlink(t *testing.T, target, link string) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
func CreateSymlink(t *testing.T, target, link string) {
func createSymlink(t *testing.T, target, link string) {

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 2bc45ca

// and can be replaced with a mock in tests.
type sysfsPath string

func (s sysfsPath) Devices(path string) string {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
func (s sysfsPath) Devices(path string) string {
func (s sysfsPath) devices(path string) string {

Same below.

In this case, exporting the method makes it callable outside of the package (assuming that some exported method returns a sysfsPath) to that caller and thus part of the package API. We want a lean API to make future changes safer.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2bc45ca.

@github-project-automation github-project-automation bot moved this from Triage to Waiting on Author in SIG Node: code and documentation PRs Jun 30, 2025
Copy link
Contributor Author

@everpeace everpeace left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pohly Thank you for your review. I addressed your comments. PTAL.

expectedErrMsg string
}{
"valid": {
smockSysfsSetup: func(t *testing.T, mockSysfs sysfsPath) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, it's just typo... Thanks for the catch!

expectedErrMsg string
}{
"valid": {
smockSysfsSetup: func(t *testing.T, mockSysfs sysfsPath) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 94973ba

}
}

func TouchFile(t *testing.T, path string) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 2bc45ca

}
}

func CreateSymlink(t *testing.T, target, link string) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in 2bc45ca

// and can be replaced with a mock in tests.
type sysfsPath string

func (s sysfsPath) Devices(path string) string {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2bc45ca.

Comment on lines 42 to 68
// Commented out for future use or if needed later
// func (s sysfsPath) block(path string) string {
// return filepath.Join(string(s), "block", path)
// }

// Commented out for future use or if needed later
// func (s sysfsPath) class(path string) string {
// return filepath.Join(string(s), "class", path)
// }

// Commented out for future use or if needed later
// func (s sysfsPath) dev(path string) string {
// return filepath.Join(string(s), "dev", path)
// }

// Commented out for future use or if needed later
// func (s sysfsPath) firmware(path string) string {
// return filepath.Join(string(s), "firmware", path)
// }
// func (s sysfsPath) kernel(path string) string {
// return filepath.Join(string(s), "kernel", path)
// }

// Commented out for future use or if needed later
// func (s sysfsPath) module(path string) string {
// return filepath.Join(string(s), "module", path)
// }
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These unused methods are just commented out. We can remove these. WDYT??

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's remove them if they are unused.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed in d28791f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. do-not-merge/release-note-label-needed Indicates that a PR should not merge because it's missing one of the release note labels. kind/feature Categorizes issue or PR as related to a new feature. needs-priority Indicates a PR lacks a `priority/foo` label and requires one. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. sig/node Categorizes an issue or PR as relevant to SIG Node. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. wg/device-management Categorizes an issue or PR as relevant to WG Device Management.
Projects
Status: 👀 In review
Status: Waiting on Author
Development

Successfully merging this pull request may close these issues.

7 participants