Skip to content

Commit f2b9f2f

Browse files
committed
perfprof: enable exec-cpu-affinity by default
For High-performance configuration, cri-o started supporting exec-cpu-affinity feature and when configured to `first` it provides the ability for exec process to be pinned to the first CPU from the shared-CPUs IF set or to the first one from the islolated set. (see cri-o/cri-o@4dd7fb9) In performance profile, we want to enable this high-performance feature by default, and disbale it (legacy) it provides an annotation option. The annotation is there just as a backup in case of bugs getting reported by the consequences of this feature enablement, and should be removed in 2 releases. Run `./hack/render-sync.sh` to update the (no-cluster) e2e tests expected outputs. Signed-off-by: Shereen Haj <shajmakh@redhat.com>
1 parent 31b94c0 commit f2b9f2f

File tree

15 files changed

+87
-9
lines changed

15 files changed

+87
-9
lines changed

assets/performanceprofile/configs/99-runtimes.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ infra_ctr_cpuset = "{{.ReservedCpus}}"
1111
# do not have high-performance binary under the $PATH that will point to it.
1212
[crio.runtime.runtimes.high-performance]
1313
inherit_default_runtime = true
14+
{{if .ExecCPUAffinity}}exec_cpu_affinity = "{{.ExecCPUAffinity}}"{{end}}
1415
allowed_annotations = ["cpu-load-balancing.crio.io", "cpu-quota.crio.io", "irq-load-balancing.crio.io", "cpu-c-states.crio.io", "cpu-freq-governor.crio.io"{{ if .CrioSharedCPUsAnnotation }}{{ printf ", %q" .CrioSharedCPUsAnnotation}}{{end}}]

pkg/apis/performanceprofile/v2/performanceprofile_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ const PerformanceProfileEnablePhysicalRpsAnnotation = "performance.openshift.io/
3434
// Valid values: "true", "enable" (to enable), "false", "disable" (to disable).
3535
const PerformanceProfileEnableRpsAnnotation = "performance.openshift.io/enable-rps"
3636

37+
// PerformanceProfileDisableExecCPUAffinityAnnotation disables the exec-cpu-affinity setting for the node.
38+
// Valid values: "true". Other values are ignored and treated as "false".
39+
// remove in 4.23
40+
const PerformanceProfileDisableExecCPUAffinityAnnotation = "performance.openshift.io/disable-exec-cpu-affinity"
41+
3742
// PerformanceProfileSpec defines the desired state of PerformanceProfile.
3843
type PerformanceProfileSpec struct {
3944
// CPU defines a set of CPU related parameters.

pkg/performanceprofile/controller/performanceprofile/components/machineconfig/machineconfig.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ const (
118118
templateOvsSliceUsageFile = "01-use-ovs-slice.conf"
119119
templateWorkload = "Workload"
120120
templateCrioSharedCPUsAnnotation = "CrioSharedCPUsAnnotation"
121+
templateExecCPUAffinity = "ExecCPUAffinity"
121122
)
122123

123124
// New returns new machine configuration object for performance sensitive workloads
@@ -587,6 +588,10 @@ func renderCrioConfigSnippet(profile *performancev2.PerformanceProfile, src stri
587588
templateArgs[templateReservedCpus] = string(*profile.Spec.CPU.Reserved)
588589
}
589590

591+
if profilecomponent.IsExecCPUAffinityEnabled(profile) {
592+
templateArgs[templateExecCPUAffinity] = "first"
593+
}
594+
590595
if opts.MixedCPUsEnabled {
591596
templateArgs[templateSharedCpus] = string(*profile.Spec.CPU.Shared)
592597
templateArgs[templateCrioSharedCPUsAnnotation] = "cpu-shared.crio.io"

pkg/performanceprofile/controller/performanceprofile/components/machineconfig/machineconfig_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"errors"
77
"fmt"
8+
"path/filepath"
89
"regexp"
910
"strings"
1011

@@ -141,6 +142,58 @@ var _ = Describe("Machine Config", func() {
141142
})
142143
})
143144

145+
Context("machine config creation with CRI-O runtime config", func() {
146+
crioRuntimeConfigPath := filepath.Join(crioConfd, crioRuntimesConfig)
147+
148+
It("should create machine config with exec-cpu-affinity set by default", func() {
149+
profile := testutils.NewPerformanceProfile("test")
150+
151+
mc, err := New(profile, &components.MachineConfigOptions{})
152+
Expect(err).ToNot(HaveOccurred())
153+
154+
result := igntypes.Config{}
155+
Expect(json.Unmarshal(mc.Spec.Config.Raw, &result)).To(Succeed())
156+
157+
var content string
158+
for _, f := range result.Storage.Files {
159+
if f.Path == crioRuntimeConfigPath {
160+
base64Data := strings.TrimPrefix(*f.Contents.Source, "data:text/plain;charset=utf-8;base64,")
161+
decoded, err := base64.StdEncoding.DecodeString(base64Data)
162+
Expect(err).ToNot(HaveOccurred())
163+
content = string(decoded)
164+
break
165+
}
166+
}
167+
Expect(content).ToNot(BeEmpty(), "crio runtime config not found")
168+
Expect(content).To(ContainSubstring("exec_cpu_affinity = \"first\""))
169+
})
170+
171+
It("should create machine config without exec-cpu-affinity when annotation is set to true", func() {
172+
profile := testutils.NewPerformanceProfile("test")
173+
profile.Annotations = map[string]string{}
174+
profile.Annotations[performancev2.PerformanceProfileDisableExecCPUAffinityAnnotation] = "true"
175+
176+
mc, err := New(profile, &components.MachineConfigOptions{})
177+
Expect(err).ToNot(HaveOccurred())
178+
179+
result := igntypes.Config{}
180+
Expect(json.Unmarshal(mc.Spec.Config.Raw, &result)).To(Succeed())
181+
182+
var content string
183+
for _, f := range result.Storage.Files {
184+
if f.Path == crioRuntimeConfigPath {
185+
base64Data := strings.TrimPrefix(*f.Contents.Source, "data:text/plain;charset=utf-8;base64,")
186+
decoded, err := base64.StdEncoding.DecodeString(base64Data)
187+
Expect(err).ToNot(HaveOccurred())
188+
content = string(decoded)
189+
break
190+
}
191+
}
192+
Expect(content).ToNot(BeEmpty(), "crio runtime config not found")
193+
Expect(content).To(Not(ContainSubstring("exec_cpu_affinity = \"first\"")))
194+
})
195+
})
196+
144197
Context("machine config creation with enabled RPS using alternative values", func() {
145198
It("should create machine config with RPS configuration when enabled with 'enable'", func() {
146199
profile := testutils.NewPerformanceProfile("test")

pkg/performanceprofile/controller/performanceprofile/components/profile/profile.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,17 @@ func IsMixedCPUsEnabled(profile *performancev2.PerformanceProfile) bool {
9494
}
9595
return *profile.Spec.WorkloadHints.MixedCpus
9696
}
97+
98+
// IsExecCPUAffinityEnabled checks if exec-cpu-affinity feature should be enabled
99+
func IsExecCPUAffinityEnabled(profile *performancev2.PerformanceProfile) bool {
100+
if profile.Annotations != nil {
101+
isExecCPUAffinityDisabled, ok := profile.Annotations[performancev2.PerformanceProfileDisableExecCPUAffinityAnnotation]
102+
if ok && isExecCPUAffinityDisabled == "true" {
103+
// run the legacy behavior and disable exec-cpu-affinity
104+
return false
105+
}
106+
}
107+
108+
// The default behavior is to enable exec-cpu-affinity whenever profile is applied
109+
return true
110+
}

test/e2e/performanceprofile/testdata/render-expected-output/bootstrap/extra-mcp/openshift-bootstrap-master_machineconfig.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ spec:
4343
path: /usr/local/bin/clear-irqbalance-banned-cpus.sh
4444
user: {}
4545
- contents:
46-
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi03IgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQphbGxvd2VkX2Fubm90YXRpb25zID0gWyJjcHUtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtcXVvdGEuY3Jpby5pbyIsICJpcnEtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtYy1zdGF0ZXMuY3Jpby5pbyIsICJjcHUtZnJlcS1nb3Zlcm5vci5jcmlvLmlvIl0K
46+
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi03IgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQpleGVjX2NwdV9hZmZpbml0eSA9ICJmaXJzdCIKYWxsb3dlZF9hbm5vdGF0aW9ucyA9IFsiY3B1LWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LXF1b3RhLmNyaW8uaW8iLCAiaXJxLWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LWMtc3RhdGVzLmNyaW8uaW8iLCAiY3B1LWZyZXEtZ292ZXJub3IuY3Jpby5pbyJdCg==
4747
verification: {}
4848
group: {}
4949
mode: 420

test/e2e/performanceprofile/testdata/render-expected-output/bootstrap/extra-mcp/openshift-bootstrap-worker_machineconfig.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ spec:
4343
path: /usr/local/bin/clear-irqbalance-banned-cpus.sh
4444
user: {}
4545
- contents:
46-
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi0zIgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQphbGxvd2VkX2Fubm90YXRpb25zID0gWyJjcHUtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtcXVvdGEuY3Jpby5pbyIsICJpcnEtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtYy1zdGF0ZXMuY3Jpby5pbyIsICJjcHUtZnJlcS1nb3Zlcm5vci5jcmlvLmlvIl0K
46+
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi0zIgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQpleGVjX2NwdV9hZmZpbml0eSA9ICJmaXJzdCIKYWxsb3dlZF9hbm5vdGF0aW9ucyA9IFsiY3B1LWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LXF1b3RhLmNyaW8uaW8iLCAiaXJxLWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LWMtc3RhdGVzLmNyaW8uaW8iLCAiY3B1LWZyZXEtZ292ZXJub3IuY3Jpby5pbyJdCg==
4747
verification: {}
4848
group: {}
4949
mode: 420

test/e2e/performanceprofile/testdata/render-expected-output/bootstrap/no-mcp/openshift-bootstrap-master_machineconfig.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ spec:
4343
path: /usr/local/bin/clear-irqbalance-banned-cpus.sh
4444
user: {}
4545
- contents:
46-
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi03IgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQphbGxvd2VkX2Fubm90YXRpb25zID0gWyJjcHUtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtcXVvdGEuY3Jpby5pbyIsICJpcnEtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtYy1zdGF0ZXMuY3Jpby5pbyIsICJjcHUtZnJlcS1nb3Zlcm5vci5jcmlvLmlvIl0K
46+
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi03IgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQpleGVjX2NwdV9hZmZpbml0eSA9ICJmaXJzdCIKYWxsb3dlZF9hbm5vdGF0aW9ucyA9IFsiY3B1LWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LXF1b3RhLmNyaW8uaW8iLCAiaXJxLWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LWMtc3RhdGVzLmNyaW8uaW8iLCAiY3B1LWZyZXEtZ292ZXJub3IuY3Jpby5pbyJdCg==
4747
verification: {}
4848
group: {}
4949
mode: 420

test/e2e/performanceprofile/testdata/render-expected-output/bootstrap/no-mcp/openshift-bootstrap-worker_machineconfig.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ spec:
4343
path: /usr/local/bin/clear-irqbalance-banned-cpus.sh
4444
user: {}
4545
- contents:
46-
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi0zIgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQphbGxvd2VkX2Fubm90YXRpb25zID0gWyJjcHUtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtcXVvdGEuY3Jpby5pbyIsICJpcnEtbG9hZC1iYWxhbmNpbmcuY3Jpby5pbyIsICJjcHUtYy1zdGF0ZXMuY3Jpby5pbyIsICJjcHUtZnJlcS1nb3Zlcm5vci5jcmlvLmlvIl0K
46+
source: data:text/plain;charset=utf-8;base64,CltjcmlvLnJ1bnRpbWVdCmluZnJhX2N0cl9jcHVzZXQgPSAiMi0zIgoKCgoKIyBUaGUgQ1JJLU8gd2lsbCBjaGVjayB0aGUgYWxsb3dlZF9hbm5vdGF0aW9ucyB1bmRlciB0aGUgcnVudGltZSBoYW5kbGVyIGFuZCBhcHBseSBoaWdoLXBlcmZvcm1hbmNlIGhvb2tzIHdoZW4gb25lIG9mCiMgaGlnaC1wZXJmb3JtYW5jZSBhbm5vdGF0aW9ucyBwcmVzZW50cyB1bmRlciBpdC4KIyBXZSBzaG91bGQgcHJvdmlkZSB0aGUgcnVudGltZV9wYXRoIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmZvcm0gdGhhdCB3ZSB3YW50IHRvIHJlLXVzZSBydW5jIGJpbmFyeSBhbmQgd2UKIyBkbyBub3QgaGF2ZSBoaWdoLXBlcmZvcm1hbmNlIGJpbmFyeSB1bmRlciB0aGUgJFBBVEggdGhhdCB3aWxsIHBvaW50IHRvIGl0LgpbY3Jpby5ydW50aW1lLnJ1bnRpbWVzLmhpZ2gtcGVyZm9ybWFuY2VdCmluaGVyaXRfZGVmYXVsdF9ydW50aW1lID0gdHJ1ZQpleGVjX2NwdV9hZmZpbml0eSA9ICJmaXJzdCIKYWxsb3dlZF9hbm5vdGF0aW9ucyA9IFsiY3B1LWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LXF1b3RhLmNyaW8uaW8iLCAiaXJxLWxvYWQtYmFsYW5jaW5nLmNyaW8uaW8iLCAiY3B1LWMtc3RhdGVzLmNyaW8uaW8iLCAiY3B1LWZyZXEtZ292ZXJub3IuY3Jpby5pbyJdCg==
4747
verification: {}
4848
group: {}
4949
mode: 420

0 commit comments

Comments
 (0)