You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2021/03/05 11:46:49 UTC

[camel-k] 02/05: chore: Remove uneeded DeepCopyObject calls before Update/Patch

This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 0c24b3f717a345cfe51848a09846f051be9e32d8
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Wed Mar 3 16:16:22 2021 +0100

    chore: Remove uneeded DeepCopyObject calls before Update/Patch
---
 pkg/cmd/kit_create.go                 |  7 +++----
 pkg/cmd/run.go                        | 22 ++++++++++++++--------
 pkg/platform/defaults.go              | 13 +++++++++----
 pkg/trait/deployer.go                 |  9 ++++++---
 pkg/util/maven/maven_settings.go      | 15 ++++++---------
 pkg/util/maven/maven_settings_test.go |  5 +++--
 6 files changed, 41 insertions(+), 30 deletions(-)

diff --git a/pkg/cmd/kit_create.go b/pkg/cmd/kit_create.go
index e757fe7..0d26e1d 100644
--- a/pkg/cmd/kit_create.go
+++ b/pkg/cmd/kit_create.go
@@ -23,7 +23,6 @@ import (
 	"strings"
 
 	"github.com/spf13/cobra"
-
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 
@@ -171,13 +170,13 @@ func (command *kitCreateCommandOptions) run(_ *cobra.Command, args []string) err
 	err = c.Create(command.Context, &kit)
 	if err != nil && k8serrors.IsAlreadyExists(err) {
 		existed = true
-		clone := kit.DeepCopy()
-		err = c.Get(command.Context, key, clone)
+		existing := v1.NewIntegrationKit(kit.Namespace, kit.Name)
+		err = c.Get(command.Context, key, &existing)
 		if err != nil {
 			fmt.Print(err.Error())
 			return nil
 		}
-		kit.ResourceVersion = clone.ResourceVersion
+		kit.ResourceVersion = existing.ResourceVersion
 		err = c.Update(command.Context, &kit)
 	}
 
diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go
index bf6ad39..a77afa5 100644
--- a/pkg/cmd/run.go
+++ b/pkg/cmd/run.go
@@ -39,6 +39,7 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
 	ctrl "sigs.k8s.io/controller-runtime/pkg/client"
 
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
@@ -301,13 +302,13 @@ func (o *runCmdOptions) run(cmd *cobra.Command, args []string) error {
 			}
 
 			// The integration watch timed out so recreate it using the latest integration resource version
-			clone := integration.DeepCopy()
-			err = c.Get(o.Context, ctrl.ObjectKeyFromObject(clone), clone)
+			existing := v1.NewIntegration(integration.Namespace, integration.Name)
+			err = c.Get(o.Context, ctrl.ObjectKeyFromObject(&existing), &existing)
 			if err != nil {
 				return err
 			}
 
-			integration.ObjectMeta.ResourceVersion = clone.ObjectMeta.ResourceVersion
+			integration.ObjectMeta.ResourceVersion = existing.ObjectMeta.ResourceVersion
 		}
 	}
 	if o.Logs || o.Dev {
@@ -584,19 +585,24 @@ func (o *runCmdOptions) updateIntegrationCode(c client.Client, sources []string,
 	err = c.Create(o.Context, &integration)
 	if err != nil && k8serrors.IsAlreadyExists(err) {
 		existed = true
-		clone := integration.DeepCopy()
-		err = c.Get(o.Context, ctrl.ObjectKeyFromObject(clone), clone)
+		existing := &v1.Integration{
+			ObjectMeta: metav1.ObjectMeta{
+				Namespace: integration.Namespace,
+				Name:      integration.Name,
+			},
+		}
+		err = c.Get(o.Context, ctrl.ObjectKeyFromObject(existing), existing)
 		if err != nil {
 			return nil, err
 		}
 		// Hold the resource from the operator controller
-		clone.Status.Phase = v1.IntegrationPhaseUpdating
-		err = c.Status().Update(o.Context, clone)
+		existing.Status.Phase = v1.IntegrationPhaseUpdating
+		err = c.Status().Update(o.Context, existing)
 		if err != nil {
 			return nil, err
 		}
 		// Update the spec
-		integration.ResourceVersion = clone.ResourceVersion
+		integration.ResourceVersion = existing.ResourceVersion
 		err = c.Update(o.Context, &integration)
 		if err != nil {
 			return nil, err
diff --git a/pkg/platform/defaults.go b/pkg/platform/defaults.go
index 22cab53..9e344f0 100644
--- a/pkg/platform/defaults.go
+++ b/pkg/platform/defaults.go
@@ -284,7 +284,7 @@ func setPlatformDefaults(ctx context.Context, c client.Client, p *v1.Integration
 }
 
 func createDefaultMavenSettingsConfigMap(ctx context.Context, client client.Client, p *v1.IntegrationPlatform, settings maven.Settings) error {
-	cm, err := maven.CreateSettingsConfigMap(p.Namespace, p.Name, settings)
+	cm, err := maven.SettingsConfigMap(p.Namespace, p.Name, settings)
 	if err != nil {
 		return err
 	}
@@ -293,13 +293,18 @@ func createDefaultMavenSettingsConfigMap(ctx context.Context, client client.Clie
 	if err != nil && !k8serrors.IsAlreadyExists(err) {
 		return err
 	} else if k8serrors.IsAlreadyExists(err) {
-		cmCopy := cm.DeepCopyObject().(ctrl.Object)
-		err = client.Get(ctx, ctrl.ObjectKeyFromObject(cm), cmCopy)
+		existing := &corev1.ConfigMap{
+			ObjectMeta: metav1.ObjectMeta{
+				Namespace: cm.Namespace,
+				Name:      cm.Name,
+			},
+		}
+		err = client.Get(ctx, ctrl.ObjectKeyFromObject(existing), existing)
 		if err != nil {
 			return err
 		}
 
-		p, err := patch.PositiveMergePatch(cmCopy, cm)
+		p, err := patch.PositiveMergePatch(existing, cm)
 		if err != nil {
 			return err
 		} else if len(p) != 0 {
diff --git a/pkg/trait/deployer.go b/pkg/trait/deployer.go
index f8a895a..7c7dc96 100644
--- a/pkg/trait/deployer.go
+++ b/pkg/trait/deployer.go
@@ -23,6 +23,7 @@ import (
 	"github.com/pkg/errors"
 
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
+	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 	"k8s.io/apimachinery/pkg/types"
 
 	ctrl "sigs.k8s.io/controller-runtime/pkg/client"
@@ -127,9 +128,11 @@ func (t *deployerTrait) clientSideApply(env *Environment, resource ctrl.Object)
 	} else if !k8serrors.IsAlreadyExists(err) {
 		return errors.Wrapf(err, "error during create resource: %v", resource)
 	}
-	key := ctrl.ObjectKeyFromObject(resource)
-	object := resource.DeepCopyObject().(ctrl.Object)
-	err = env.Client.Get(env.C, key, object)
+	object := &unstructured.Unstructured{}
+	object.SetNamespace(resource.GetNamespace())
+	object.SetName(resource.GetName())
+	object.SetGroupVersionKind(resource.GetObjectKind().GroupVersionKind())
+	err = env.Client.Get(env.C, ctrl.ObjectKeyFromObject(object), object)
 	if err != nil {
 		return err
 	}
diff --git a/pkg/util/maven/maven_settings.go b/pkg/util/maven/maven_settings.go
index 206b3ed..a1bac60 100644
--- a/pkg/util/maven/maven_settings.go
+++ b/pkg/util/maven/maven_settings.go
@@ -21,17 +21,16 @@ import (
 	"encoding/xml"
 	"strings"
 
-	"github.com/apache/camel-k/pkg/util"
-
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+	"github.com/apache/camel-k/pkg/util"
 )
 
 // DefaultMavenRepositories is a comma separated list of default maven repositories
 // This variable can be overridden at build time
 var DefaultMavenRepositories = "https://repo.maven.apache.org/maven2@id=central"
 
-// NewSettings --
 func NewSettings() Settings {
 	return Settings{
 		XMLName:           xml.Name{Local: "settings"},
@@ -41,12 +40,11 @@ func NewSettings() Settings {
 	}
 }
 
-// NewDefaultSettings --
 func NewDefaultSettings(repositories []Repository, mirrors []Mirror) Settings {
 	settings := NewSettings()
 
 	var additionalRepos []Repository
-	for _, defaultRepo := range getDefaultMavenRepositories() {
+	for _, defaultRepo := range defaultMavenRepositories() {
 		if !containsRepo(repositories, defaultRepo.ID) {
 			additionalRepos = append(additionalRepos, defaultRepo)
 		}
@@ -71,8 +69,7 @@ func NewDefaultSettings(repositories []Repository, mirrors []Mirror) Settings {
 	return settings
 }
 
-// CreateSettingsConfigMap --
-func CreateSettingsConfigMap(namespace string, name string, settings Settings) (*corev1.ConfigMap, error) {
+func SettingsConfigMap(namespace string, name string, settings Settings) (*corev1.ConfigMap, error) {
 	data, err := util.EncodeXML(settings)
 	if err != nil {
 		return nil, err
@@ -81,7 +78,7 @@ func CreateSettingsConfigMap(namespace string, name string, settings Settings) (
 	cm := &corev1.ConfigMap{
 		TypeMeta: metav1.TypeMeta{
 			Kind:       "ConfigMap",
-			APIVersion: "v1",
+			APIVersion: corev1.SchemeGroupVersion.String(),
 		},
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      name + "-maven-settings",
@@ -98,7 +95,7 @@ func CreateSettingsConfigMap(namespace string, name string, settings Settings) (
 	return cm, nil
 }
 
-func getDefaultMavenRepositories() (repos []Repository) {
+func defaultMavenRepositories() (repos []Repository) {
 	for _, repoDesc := range strings.Split(DefaultMavenRepositories, ",") {
 		repos = append(repos, NewRepository(repoDesc))
 	}
diff --git a/pkg/util/maven/maven_settings_test.go b/pkg/util/maven/maven_settings_test.go
index cebada9..aa8b010 100644
--- a/pkg/util/maven/maven_settings_test.go
+++ b/pkg/util/maven/maven_settings_test.go
@@ -20,8 +20,9 @@ package maven
 import (
 	"testing"
 
-	"github.com/apache/camel-k/pkg/util"
 	"github.com/stretchr/testify/assert"
+
+	"github.com/apache/camel-k/pkg/util"
 )
 
 const expectedSettings = `<?xml version="1.0" encoding="UTF-8"?>
@@ -238,7 +239,7 @@ func TestDefaultSettingsGenerationWithAdditionalRepo(t *testing.T) {
 func TestCreateSettingsConfigMap(t *testing.T) {
 	settings := NewDefaultSettings([]Repository{}, []Mirror{})
 
-	configMap, err := CreateSettingsConfigMap("foo", "bar", settings)
+	configMap, err := SettingsConfigMap("foo", "bar", settings)
 	assert.Nil(t, err)
 	assert.NotNil(t, configMap)