Skip to content
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

add support for struct entities in MakeVariant #329

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

cdoern
Copy link

@cdoern cdoern commented Jul 6, 2022

currently, structs are not parsed properly since format() has no handling for the reflect type.
add a switch case to handle structs and encode some sane defaults if given an empty one

resolves #328

Signed-off-by: Charlie Doern cdoern@redhat.com

@giuseppe
Copy link
Contributor

giuseppe commented Jul 6, 2022

@guelfey PTAL

@guelfey
Copy link
Member

guelfey commented Jul 6, 2022

Generally makes sense, however I'd like to stick to the GVariant format from GLib since this seems to be the convention for other tools, and DBus structs are called "tuples" there: https://www.freedesktop.org/software/gstreamer-sdk/data/docs/2012.5/glib/gvariant-text.html#gvariant-text-tuples ar the best docs I can find. So normal parantheses and separating the field with a comma.

@cdoern
Copy link
Author

cdoern commented Jul 6, 2022

@guelfey ok thanks for the feedback. I wasn't sure what the format should be so I'll repush with those changes tonight.

@cdoern
Copy link
Author

cdoern commented Jul 7, 2022

@giuseppe, using this PR in c/common the unit file generated looks like

# This is a transient unit file, created programmatically via the systemd API. Do not edit.
[Unit]
Description=cgroup machine2-libpod_pod_105.slice
Wants=machine2.slice
DefaultDependencies=no

[Slice]
MemoryAccounting=yes
CPUAccounting=yes
IOAccounting=yes
CPUWeight=4
MemoryMax=900
MemorySwapMax=1000
CPUQuotaPeriodSec=100ms
CPUQuota=100%
AllowedCPUs=4-5
AllowedMemoryNodes=4-5
IOReadBandwidthMax=
IOReadBandwidthMax=8:16 2097152

which is incorrectly adding an extra blank line, nothing is being added to io.max. The final property being provided is {IOReadBandwidthMax [("8:16", 2097152)]} does this seem right to you? not sure where to go from here.

@giuseppe
Copy link
Contributor

giuseppe commented Jul 7, 2022

how does the generated value you pass to systemd look like? Not sure if the empty io.max depends on that extra empty line

@cdoern
Copy link
Author

cdoern commented Jul 7, 2022

@giuseppe running something like:

...
for k, v := range structMap {
			vari := dbus.MakeVariant(v)
			fmt.Println(vari.Signature(), vari.String(), vari.Value())
...

prints:

a(st) @a(st) [("8:16" 2097152)] [{8:16 2097152}]

as a matter of fact, the extra lines are added to the unit file even without these modifications...

@cdoern
Copy link
Author

cdoern commented Jul 7, 2022

@guelfey this should be good to go! works with my PR in containers/common

variant.go Outdated Show resolved Hide resolved
variant.go Outdated Show resolved Hide resolved
currently, structs are not parsed properly since `format()` has no handling for the reflect type
add a switch case to handle structs and encode some sane defaults if given an empty one

resolves godbus#328

Signed-off-by: Charlie Doern <cdoern@redhat.com>
@cdoern
Copy link
Author

cdoern commented Aug 11, 2022

@guelfey sorry I took so long here. To answer your question about why this is needed, mainly for testing and verification that systemd is getting the right values before we merge something into containers/common. Otherwise, debug statements just print INVALID

Copy link
Member

@guelfey guelfey left a comment

Choose a reason for hiding this comment

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

Thanks!

Copy link
Member

@guelfey guelfey left a comment

Choose a reason for hiding this comment

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

MakeVariant cannot properly evaluate a(st)
3 participants