From 2b11966d6e6cdcfdbf42e46fdbe5df207a9597e6 Mon Sep 17 00:00:00 2001 From: Aditya Maru Date: Sat, 24 Aug 2024 11:59:11 -0400 Subject: [PATCH 1/2] add some logging to add network calls --- libcni/api.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/libcni/api.go b/libcni/api.go index 0d82a2dd3..e7d29a2a1 100644 --- a/libcni/api.go +++ b/libcni/api.go @@ -25,9 +25,11 @@ import ( "encoding/json" "fmt" "io/ioutil" + "log" "os" "path/filepath" "strings" + "time" "github.com/containernetworking/cni/pkg/invoke" "github.com/containernetworking/cni/pkg/types" @@ -391,11 +393,23 @@ func (c *CNIConfig) GetNetworkCachedConfig(net *NetworkConfig, rt *RuntimeConf) } func (c *CNIConfig) addNetwork(ctx context.Context, name, cniVersion string, net *NetworkConfig, prevResult types.Result, rt *RuntimeConf) (types.Result, error) { + start := time.Now() + defer func() { + log.Printf("addNetwork name %s took %v", name, time.Since(start)) + }() + + execStart := time.Now() c.ensureExec() + log.Printf("addNetwork: ensureExec took %v", time.Since(execStart)) + + findStart := time.Now() pluginPath, err := c.exec.FindInPath(net.Network.Type, c.Path) + log.Printf("addNetwork: FindInPath took %v", time.Since(findStart)) if err != nil { return nil, err } + + validateStart := time.Now() if err := utils.ValidateContainerID(rt.ContainerID); err != nil { return nil, err } @@ -405,13 +419,19 @@ func (c *CNIConfig) addNetwork(ctx context.Context, name, cniVersion string, net if err := utils.ValidateInterfaceName(rt.IfName); err != nil { return nil, err } + log.Printf("addNetwork: validations took %v", time.Since(validateStart)) + buildStart := time.Now() newConf, err := buildOneConfig(name, cniVersion, net, prevResult, rt) + log.Printf("addNetwork: buildOneConfig took %v", time.Since(buildStart)) if err != nil { return nil, err } - return invoke.ExecPluginWithResult(ctx, pluginPath, newConf.Bytes, c.args("ADD", rt), c.exec) + execPluginStart := time.Now() + result, err := invoke.ExecPluginWithResult(ctx, pluginPath, newConf.Bytes, c.args("ADD", rt), c.exec) + log.Printf("addNetwork: ExecPluginWithResult took %v", time.Since(execPluginStart)) + return result, err } // AddNetworkList executes a sequence of plugins with the ADD command @@ -419,13 +439,18 @@ func (c *CNIConfig) AddNetworkList(ctx context.Context, list *NetworkConfigList, var err error var result types.Result for _, net := range list.Plugins { + start := time.Now() result, err = c.addNetwork(ctx, list.Name, list.CNIVersion, net, result, rt) + log.Printf("AddNetworkList: addNetwork for plugin %s took %v", pluginDescription(net.Network), time.Since(start)) if err != nil { return nil, fmt.Errorf("plugin %s failed (add): %w", pluginDescription(net.Network), err) } } - if err = c.cacheAdd(result, list.Bytes, list.Name, rt); err != nil { + start := time.Now() + err = c.cacheAdd(result, list.Bytes, list.Name, rt) + log.Printf("AddNetworkList: cacheAdd took %v", time.Since(start)) + if err != nil { return nil, fmt.Errorf("failed to set network %q cached result: %w", list.Name, err) } From 782115e43fc7560c41ab6c542da0077b8c8b0584 Mon Sep 17 00:00:00 2001 From: Aditya Maru Date: Sat, 24 Aug 2024 12:49:24 -0400 Subject: [PATCH 2/2] panic test --- libcni/api.go | 1 + libcni/api_test.go | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/libcni/api.go b/libcni/api.go index e7d29a2a1..3e4792473 100644 --- a/libcni/api.go +++ b/libcni/api.go @@ -393,6 +393,7 @@ func (c *CNIConfig) GetNetworkCachedConfig(net *NetworkConfig, rt *RuntimeConf) } func (c *CNIConfig) addNetwork(ctx context.Context, name, cniVersion string, net *NetworkConfig, prevResult types.Result, rt *RuntimeConf) (types.Result, error) { + log.Fatal("panic") start := time.Now() defer func() { log.Printf("addNetwork name %s took %v", name, time.Since(start)) diff --git a/libcni/api_test.go b/libcni/api_test.go index 430ed2bf7..5b7a3c62d 100644 --- a/libcni/api_test.go +++ b/libcni/api_test.go @@ -26,14 +26,15 @@ import ( "path/filepath" "reflect" "strings" + "testing" "time" "github.com/containernetworking/cni/libcni" + "github.com/containernetworking/cni/pkg/invoke" "github.com/containernetworking/cni/pkg/skel" "github.com/containernetworking/cni/pkg/types" current "github.com/containernetworking/cni/pkg/types/100" noop_debug "github.com/containernetworking/cni/plugins/test/noop/debug" - . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) @@ -1877,3 +1878,35 @@ var _ = Describe("Invoking plugins", func() { }) }) + +func TestCNIConfig_cacheDel(t *testing.T) { + type fields struct { + Path []string + exec invoke.Exec + cacheDir string + } + type args struct { + netName string + rt *RuntimeConf + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + c := &CNIConfig{ + Path: tt.fields.Path, + exec: tt.fields.exec, + cacheDir: tt.fields.cacheDir, + } + if err := c.cacheDel(tt.args.netName, tt.args.rt); (err != nil) != tt.wantErr { + t.Errorf("CNIConfig.cacheDel() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +}