You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2019/12/11 18:37:54 UTC

[camel-k] 04/08: Fix #1120: transform timeouts to pointer types

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

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

commit 9eb3e9896c5127f751b00800708f071be26739f2
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Mon Dec 9 14:48:30 2019 +0100

    Fix #1120: transform timeouts to pointer types
---
 pkg/apis/camel/v1alpha1/common_types.go            |  6 +--
 .../camel/v1alpha1/integrationplatform_types.go    |  2 +-
 .../v1alpha1/integrationplatform_types_support.go  | 16 ++++++++
 pkg/builder/runtime/main.go                        |  2 +-
 pkg/builder/runtime/quarkus.go                     |  2 +-
 pkg/builder/s2i/publisher.go                       |  2 +-
 pkg/cmd/install.go                                 |  5 ++-
 .../integrationplatform/initialize_test.go         | 22 +++++-----
 pkg/platform/defaults.go                           | 47 +++++++++++++---------
 pkg/trait/rest-dsl.go                              |  2 +-
 pkg/util/camel/catalog.go                          |  2 +-
 11 files changed, 68 insertions(+), 40 deletions(-)

diff --git a/pkg/apis/camel/v1alpha1/common_types.go b/pkg/apis/camel/v1alpha1/common_types.go
index 51a1885..c3472f6 100644
--- a/pkg/apis/camel/v1alpha1/common_types.go
+++ b/pkg/apis/camel/v1alpha1/common_types.go
@@ -77,9 +77,9 @@ type PlatformInjectable interface {
 
 // MavenSpec --
 type MavenSpec struct {
-	LocalRepository string          `json:"localRepository,omitempty"`
-	Settings        ValueSource     `json:"settings,omitempty"`
-	Timeout         metav1.Duration `json:"timeout,omitempty"`
+	LocalRepository string           `json:"localRepository,omitempty"`
+	Settings        ValueSource      `json:"settings,omitempty"`
+	Timeout         *metav1.Duration `json:"timeout,omitempty"`
 }
 
 // ValueSource --
diff --git a/pkg/apis/camel/v1alpha1/integrationplatform_types.go b/pkg/apis/camel/v1alpha1/integrationplatform_types.go
index f21b207..770db0b 100644
--- a/pkg/apis/camel/v1alpha1/integrationplatform_types.go
+++ b/pkg/apis/camel/v1alpha1/integrationplatform_types.go
@@ -109,7 +109,7 @@ type IntegrationPlatformBuildSpec struct {
 	BaseImage             string                                  `json:"baseImage,omitempty"`
 	Properties            map[string]string                       `json:"properties,omitempty"`
 	Registry              IntegrationPlatformRegistrySpec         `json:"registry,omitempty"`
-	Timeout               metav1.Duration                         `json:"timeout,omitempty"`
+	Timeout               *metav1.Duration                        `json:"timeout,omitempty"`
 	PersistentVolumeClaim string                                  `json:"persistentVolumeClaim,omitempty"`
 	Maven                 MavenSpec                               `json:"maven,omitempty"`
 	HTTPProxySecret       string                                  `json:"httpProxySecret,omitempty"`
diff --git a/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go b/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go
index 6ca9029..82a3fef 100644
--- a/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go
+++ b/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go
@@ -186,3 +186,19 @@ func (b IntegrationPlatformBuildSpec) IsKanikoCacheEnabled() bool {
 	}
 	return *b.KanikoBuildCache
 }
+
+// GetTimeout returns the specified duration or a default one
+func (b IntegrationPlatformBuildSpec) GetTimeout() metav1.Duration {
+	if b.Timeout == nil {
+		return metav1.Duration{}
+	}
+	return *b.Timeout
+}
+
+// GetTimeout returns the specified duration or a default one
+func (m MavenSpec) GetTimeout() metav1.Duration {
+	if m.Timeout == nil {
+		return metav1.Duration{}
+	}
+	return *m.Timeout
+}
diff --git a/pkg/builder/runtime/main.go b/pkg/builder/runtime/main.go
index 4f2cb3e..a191afd 100644
--- a/pkg/builder/runtime/main.go
+++ b/pkg/builder/runtime/main.go
@@ -87,7 +87,7 @@ func computeDependencies(ctx *builder.Context) error {
 	mc := maven.NewContext(path.Join(ctx.Path, "maven"), ctx.Maven.Project)
 	mc.SettingsContent = ctx.Maven.SettingsData
 	mc.LocalRepository = ctx.Build.Platform.Build.Maven.LocalRepository
-	mc.Timeout = ctx.Build.Platform.Build.Maven.Timeout.Duration
+	mc.Timeout = ctx.Build.Platform.Build.Maven.GetTimeout().Duration
 	mc.AddArgumentf("org.apache.camel.k:camel-k-maven-plugin:%s:generate-dependency-list", ctx.Catalog.RuntimeVersion)
 
 	if err := maven.Run(mc); err != nil {
diff --git a/pkg/builder/runtime/quarkus.go b/pkg/builder/runtime/quarkus.go
index bd6d92a..f9c9809 100644
--- a/pkg/builder/runtime/quarkus.go
+++ b/pkg/builder/runtime/quarkus.go
@@ -107,7 +107,7 @@ func computeQuarkusDependencies(ctx *builder.Context) error {
 	mc := maven.NewContext(path.Join(ctx.Path, "maven"), ctx.Maven.Project)
 	mc.SettingsContent = ctx.Maven.SettingsData
 	mc.LocalRepository = ctx.Build.Platform.Build.Maven.LocalRepository
-	mc.Timeout = ctx.Build.Platform.Build.Maven.Timeout.Duration
+	mc.Timeout = ctx.Build.Platform.Build.Maven.GetTimeout().Duration
 
 	// Build the project
 	mc.AddArgument("package")
diff --git a/pkg/builder/s2i/publisher.go b/pkg/builder/s2i/publisher.go
index 9eadd47..eb8c598 100644
--- a/pkg/builder/s2i/publisher.go
+++ b/pkg/builder/s2i/publisher.go
@@ -156,7 +156,7 @@ func publisher(ctx *builder.Context) error {
 			}
 		}
 		return false, nil
-	}, ctx.Build.Platform.Build.Timeout.Duration)
+	}, ctx.Build.Platform.Build.GetTimeout().Duration)
 
 	if err != nil {
 		return err
diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index 97b84f5..aa2510c 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -25,6 +25,7 @@ import (
 
 	"github.com/apache/camel-k/pkg/util/registry"
 	"go.uber.org/multierr"
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 
 	"github.com/apache/camel-k/deploy"
@@ -235,7 +236,9 @@ func (o *installCmdOptions) install(cobraCmd *cobra.Command, _ []string) error {
 				return err
 			}
 
-			platform.Spec.Build.Timeout.Duration = d
+			platform.Spec.Build.Timeout = &v1.Duration{
+				Duration: d,
+			}
 		}
 		if o.traitProfile != "" {
 			platform.Spec.Profile = v1alpha1.TraitProfileByName(o.traitProfile)
diff --git a/pkg/controller/integrationplatform/initialize_test.go b/pkg/controller/integrationplatform/initialize_test.go
index d465cbe..112bc87 100644
--- a/pkg/controller/integrationplatform/initialize_test.go
+++ b/pkg/controller/integrationplatform/initialize_test.go
@@ -53,11 +53,11 @@ func TestTimeouts_Default(t *testing.T) {
 	assert.Nil(t, err)
 	assert.NotNil(t, answer)
 
-	n := answer.Status.FullConfig.Build.Timeout.Duration.Seconds() * 0.75
+	n := answer.Status.FullConfig.Build.GetTimeout().Duration.Seconds() * 0.75
 	d := (time.Duration(n) * time.Second).Truncate(time.Second)
 
-	assert.Equal(t, d, answer.Status.FullConfig.Build.Maven.Timeout.Duration)
-	assert.Equal(t, 5*time.Minute, answer.Status.FullConfig.Build.Timeout.Duration)
+	assert.Equal(t, d, answer.Status.FullConfig.Build.Maven.GetTimeout().Duration)
+	assert.Equal(t, 5*time.Minute, answer.Status.FullConfig.Build.GetTimeout().Duration)
 }
 
 func TestTimeouts_MavenComputedFromBuild(t *testing.T) {
@@ -69,7 +69,7 @@ func TestTimeouts_MavenComputedFromBuild(t *testing.T) {
 	timeout, err := time.ParseDuration("1m1ms")
 	assert.Nil(t, err)
 
-	ip.Spec.Build.Timeout = metav1.Duration{
+	ip.Spec.Build.Timeout = &metav1.Duration{
 		Duration: timeout,
 	}
 
@@ -86,11 +86,11 @@ func TestTimeouts_MavenComputedFromBuild(t *testing.T) {
 	assert.Nil(t, err)
 	assert.NotNil(t, answer)
 
-	n := answer.Status.FullConfig.Build.Timeout.Duration.Seconds() * 0.75
+	n := answer.Status.FullConfig.Build.GetTimeout().Duration.Seconds() * 0.75
 	d := (time.Duration(n) * time.Second).Truncate(time.Second)
 
-	assert.Equal(t, d, answer.Status.FullConfig.Build.Maven.Timeout.Duration)
-	assert.Equal(t, 1*time.Minute, answer.Status.FullConfig.Build.Timeout.Duration)
+	assert.Equal(t, d, answer.Status.FullConfig.Build.Maven.GetTimeout().Duration)
+	assert.Equal(t, 1*time.Minute, answer.Status.FullConfig.Build.GetTimeout().Duration)
 }
 
 func TestTimeouts_Truncated(t *testing.T) {
@@ -102,14 +102,14 @@ func TestTimeouts_Truncated(t *testing.T) {
 	bt, err := time.ParseDuration("5m1ms")
 	assert.Nil(t, err)
 
-	ip.Spec.Build.Timeout = metav1.Duration{
+	ip.Spec.Build.Timeout = &metav1.Duration{
 		Duration: bt,
 	}
 
 	mt, err := time.ParseDuration("2m1ms")
 	assert.Nil(t, err)
 
-	ip.Spec.Build.Maven.Timeout = metav1.Duration{
+	ip.Spec.Build.Maven.Timeout = &metav1.Duration{
 		Duration: mt,
 	}
 
@@ -126,8 +126,8 @@ func TestTimeouts_Truncated(t *testing.T) {
 	assert.Nil(t, err)
 	assert.NotNil(t, answer)
 
-	assert.Equal(t, 2*time.Minute, answer.Status.FullConfig.Build.Maven.Timeout.Duration)
-	assert.Equal(t, 5*time.Minute, answer.Status.FullConfig.Build.Timeout.Duration)
+	assert.Equal(t, 2*time.Minute, answer.Status.FullConfig.Build.Maven.GetTimeout().Duration)
+	assert.Equal(t, 5*time.Minute, answer.Status.FullConfig.Build.GetTimeout().Duration)
 }
 
 func TestDefaultMavenSettingsApplied(t *testing.T) {
diff --git a/pkg/platform/defaults.go b/pkg/platform/defaults.go
index e3e768d..1853680 100644
--- a/pkg/platform/defaults.go
+++ b/pkg/platform/defaults.go
@@ -30,6 +30,7 @@ import (
 	"github.com/apache/camel-k/pkg/util/openshift"
 	corev1 "k8s.io/api/core/v1"
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 // ConfigureDefaults fills with default values all missing details about the integration platform.
@@ -84,8 +85,8 @@ func ConfigureDefaults(ctx context.Context, c client.Client, p *v1alpha1.Integra
 		log.Log.Info("No registry specified for publishing images")
 	}
 
-	if verbose && p.Status.FullConfig.Build.Maven.Timeout.Duration != 0 {
-		log.Log.Infof("Maven Timeout set to %s", p.Status.FullConfig.Build.Maven.Timeout.Duration)
+	if verbose && p.Status.FullConfig.Build.Maven.GetTimeout().Duration != 0 {
+		log.Log.Infof("Maven Timeout set to %s", p.Status.FullConfig.Build.Maven.GetTimeout().Duration)
 	}
 
 	return nil
@@ -111,31 +112,39 @@ func setPlatformDefaults(ctx context.Context, c client.Client, p *v1alpha1.Integ
 		p.Status.FullConfig.Build.PersistentVolumeClaim = p.Name
 	}
 
-	if p.Status.FullConfig.Build.Timeout.Duration != 0 {
-		d := p.Status.FullConfig.Build.Timeout.Duration.Truncate(time.Second)
+	if p.Status.FullConfig.Build.GetTimeout().Duration != 0 {
+		d := p.Status.FullConfig.Build.GetTimeout().Duration.Truncate(time.Second)
 
-		if verbose && p.Status.FullConfig.Build.Timeout.Duration != d {
-			log.Log.Infof("Build timeout minimum unit is sec (configured: %s, truncated: %s)", p.Status.FullConfig.Build.Timeout.Duration, d)
+		if verbose && p.Status.FullConfig.Build.GetTimeout().Duration != d {
+			log.Log.Infof("Build timeout minimum unit is sec (configured: %s, truncated: %s)", p.Status.FullConfig.Build.GetTimeout().Duration, d)
 		}
 
-		p.Status.FullConfig.Build.Timeout.Duration = d
+		p.Status.FullConfig.Build.Timeout = &v1.Duration{
+			Duration: d,
+		}
 	}
-	if p.Status.FullConfig.Build.Timeout.Duration == 0 {
-		p.Status.FullConfig.Build.Timeout.Duration = 5 * time.Minute
+	if p.Status.FullConfig.Build.GetTimeout().Duration == 0 {
+		p.Status.FullConfig.Build.Timeout = &v1.Duration{
+			Duration: 5 * time.Minute,
+		}
 	}
 
-	if p.Status.FullConfig.Build.Maven.Timeout.Duration != 0 {
-		d := p.Status.FullConfig.Build.Maven.Timeout.Duration.Truncate(time.Second)
+	if p.Status.FullConfig.Build.Maven.GetTimeout().Duration != 0 {
+		d := p.Status.FullConfig.Build.Maven.GetTimeout().Duration.Truncate(time.Second)
 
-		if verbose && p.Status.FullConfig.Build.Maven.Timeout.Duration != d {
-			log.Log.Infof("Maven timeout minimum unit is sec (configured: %s, truncated: %s)", p.Status.FullConfig.Build.Maven.Timeout.Duration, d)
+		if verbose && p.Status.FullConfig.Build.Maven.GetTimeout().Duration != d {
+			log.Log.Infof("Maven timeout minimum unit is sec (configured: %s, truncated: %s)", p.Status.FullConfig.Build.Maven.GetTimeout().Duration, d)
 		}
 
-		p.Status.FullConfig.Build.Maven.Timeout.Duration = d
+		p.Status.FullConfig.Build.Maven.Timeout = &v1.Duration{
+			Duration: d,
+		}
 	}
-	if p.Status.FullConfig.Build.Maven.Timeout.Duration == 0 {
-		n := p.Status.FullConfig.Build.Timeout.Duration.Seconds() * 0.75
-		p.Status.FullConfig.Build.Maven.Timeout.Duration = (time.Duration(n) * time.Second).Truncate(time.Second)
+	if p.Status.FullConfig.Build.Maven.GetTimeout().Duration == 0 {
+		n := p.Status.FullConfig.Build.GetTimeout().Duration.Seconds() * 0.75
+		p.Status.FullConfig.Build.Maven.Timeout = &v1.Duration{
+			Duration: (time.Duration(n) * time.Second).Truncate(time.Second),
+		}
 	}
 
 	if p.Status.FullConfig.Build.Maven.Settings.ConfigMapKeyRef == nil && p.Status.FullConfig.Build.Maven.Settings.SecretKeyRef == nil {
@@ -179,8 +188,8 @@ func setPlatformDefaults(ctx context.Context, c client.Client, p *v1alpha1.Integ
 		log.Log.Infof("RuntimeVersion set to %s", p.Status.FullConfig.Build.RuntimeVersion)
 		log.Log.Infof("BaseImage set to %s", p.Status.FullConfig.Build.BaseImage)
 		log.Log.Infof("LocalRepository set to %s", p.Status.FullConfig.Build.Maven.LocalRepository)
-		log.Log.Infof("Timeout set to %s", p.Status.FullConfig.Build.Timeout)
-		log.Log.Infof("Maven Timeout set to %s", p.Status.FullConfig.Build.Maven.Timeout.Duration)
+		log.Log.Infof("Timeout set to %s", p.Status.FullConfig.Build.GetTimeout())
+		log.Log.Infof("Maven Timeout set to %s", p.Status.FullConfig.Build.Maven.GetTimeout().Duration)
 	}
 
 	return nil
diff --git a/pkg/trait/rest-dsl.go b/pkg/trait/rest-dsl.go
index 022dbb2..d621f8e 100644
--- a/pkg/trait/rest-dsl.go
+++ b/pkg/trait/rest-dsl.go
@@ -115,7 +115,7 @@ func (t *restDslTrait) Apply(e *Environment) error {
 
 		mc := maven.NewContext(tmpDir, project)
 		mc.LocalRepository = e.Platform.Status.FullConfig.Build.Maven.LocalRepository
-		mc.Timeout = e.Platform.Status.FullConfig.Build.Maven.Timeout.Duration
+		mc.Timeout = e.Platform.Status.FullConfig.Build.Maven.GetTimeout().Duration
 		mc.AddArgument("-Dopenapi.spec=" + in)
 		mc.AddArgument("-Ddsl.out=" + out)
 
diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go
index 4ad5d6b..12289e2 100644
--- a/pkg/util/camel/catalog.go
+++ b/pkg/util/camel/catalog.go
@@ -90,7 +90,7 @@ func GenerateCatalogWithProvider(ctx context.Context, client k8sclient.Reader, n
 
 	mc := maven.NewContext(tmpDir, project)
 	mc.LocalRepository = mvn.LocalRepository
-	mc.Timeout = mvn.Timeout.Duration
+	mc.Timeout = mvn.GetTimeout().Duration
 	mc.AddSystemProperty("catalog.path", tmpDir)
 	mc.AddSystemProperty("catalog.file", "catalog.yaml")
 	if providerName != "" {