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

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


The following commit(s) were added to refs/heads/master by this push:
     new eaed6b9  Timeout in S2I build #536
eaed6b9 is described below

commit eaed6b9fc41f91d8679b2edaa347f4f6b751341d
Author: lburgazzoli <lburgazz...@gmail.com>
AuthorDate: Wed Mar 13 14:12:21 2019 +0100

    Timeout in S2I build #536
---
 .../camel/v1alpha1/integrationplatform_types.go    |  1 +
 pkg/builder/builder_steps_test.go                  | 54 ++++++++++++++++++++++
 pkg/builder/s2i/publisher.go                       |  4 +-
 pkg/cmd/install.go                                 | 12 +++++
 pkg/controller/integrationplatform/initialize.go   |  5 ++
 pkg/util/kubernetes/wait.go                        | 13 ++++--
 test/builder_integration_test.go                   | 19 +++++---
 7 files changed, 96 insertions(+), 12 deletions(-)

diff --git a/pkg/apis/camel/v1alpha1/integrationplatform_types.go 
b/pkg/apis/camel/v1alpha1/integrationplatform_types.go
index 41e2daf..134017f 100644
--- a/pkg/apis/camel/v1alpha1/integrationplatform_types.go
+++ b/pkg/apis/camel/v1alpha1/integrationplatform_types.go
@@ -79,6 +79,7 @@ type IntegrationPlatformBuildSpec struct {
        LocalRepository string                                  
`json:"localRepository,omitempty"`
        Repositories    []string                                
`json:"repositories,omitempty"`
        Registry        IntegrationPlatformRegistrySpec         
`json:"registry,omitempty"`
+       Timeout         metav1.Duration                         
`json:"timeout,omitempty"`
 }
 
 // IntegrationPlatformRegistrySpec --
diff --git a/pkg/builder/builder_steps_test.go 
b/pkg/builder/builder_steps_test.go
index f85a80e..e85bc55 100644
--- a/pkg/builder/builder_steps_test.go
+++ b/pkg/builder/builder_steps_test.go
@@ -18,9 +18,12 @@ limitations under the License.
 package builder
 
 import (
+       "errors"
+       "sync"
        "testing"
 
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+       "github.com/apache/camel-k/pkg/util/cancellable"
        "github.com/apache/camel-k/pkg/util/defaults"
        "github.com/apache/camel-k/pkg/util/maven"
        "github.com/apache/camel-k/pkg/util/test"
@@ -292,3 +295,54 @@ func TestSanitizeDependencies(t *testing.T) {
                Type:       "jar",
        })
 }
+
+func TestFailure(t *testing.T) {
+       catalog, err := test.DefaultCatalog()
+       assert.Nil(t, err)
+
+       b := New(nil, "ns")
+
+       var wg sync.WaitGroup
+       wg.Add(1)
+
+       r := Request{
+               C:              cancellable.NewContext(),
+               Catalog:        catalog,
+               RuntimeVersion: defaults.RuntimeVersion,
+               Steps: []Step{
+                       NewStep("step1", InitPhase, func(i *Context) error {
+                               return nil
+                       }),
+                       NewStep("step2", ApplicationPublishPhase, func(i 
*Context) error {
+                               return errors.New("an error")
+                       }),
+               },
+               Platform: v1alpha1.IntegrationPlatformSpec{
+                       Build: v1alpha1.IntegrationPlatformBuildSpec{
+                               CamelVersion: catalog.Version,
+                       },
+               },
+       }
+
+       var res *Result
+
+       b.Submit(r, func(result *Result) {
+               switch result.Status {
+               case StatusError:
+                       res = result
+                       wg.Done()
+               case StatusCompleted:
+                       res = result
+                       wg.Done()
+               case StatusInterrupted:
+                       res = result
+                       wg.Done()
+               }
+
+       })
+
+       wg.Wait()
+
+       assert.NotNil(t, res)
+       assert.Equal(t, StatusError, res.Status)
+}
diff --git a/pkg/builder/s2i/publisher.go b/pkg/builder/s2i/publisher.go
index 96d80b7..010a2d5 100644
--- a/pkg/builder/s2i/publisher.go
+++ b/pkg/builder/s2i/publisher.go
@@ -19,7 +19,6 @@ package s2i
 
 import (
        "io/ioutil"
-       "time"
 
        "k8s.io/apimachinery/pkg/util/json"
        k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
@@ -151,7 +150,8 @@ func Publisher(ctx *builder.Context) error {
                        }
                }
                return false, nil
-       }, 5*time.Minute)
+       }, ctx.Request.Platform.Build.Timeout.Duration)
+
        if err != nil {
                return err
        }
diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index b4a2722..2f2e366 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -20,6 +20,7 @@ package cmd
 import (
        "fmt"
        "strings"
+       "time"
 
        "github.com/apache/camel-k/deploy"
        "github.com/apache/camel-k/pkg/apis"
@@ -35,6 +36,7 @@ import (
        "github.com/apache/camel-k/pkg/util/kubernetes"
        "github.com/pkg/errors"
        "github.com/spf13/cobra"
+
        k8serrors "k8s.io/apimachinery/pkg/api/errors"
 )
 
@@ -68,6 +70,7 @@ func newCmdInstall(rootCmdOptions *RootCmdOptions) 
*cobra.Command {
        cmd.Flags().StringVar(&impl.runtimeVersion, "runtime-version", "", "Set 
the camel-k runtime version")
        cmd.Flags().StringVar(&impl.baseImage, "base-image", "", "Set the base 
image used to run integrations")
        cmd.Flags().StringSliceVar(&impl.contexts, "context", nil, "Add a camel 
context to build at startup, by default all known contexts are built")
+       cmd.Flags().StringVar(&impl.buildTimeout, "build-timeout", "", "Set how 
long the build process can last")
 
        // completion support
        configureBashAnnotationForFlag(
@@ -93,6 +96,7 @@ type installCmdOptions struct {
        runtimeVersion       string
        baseImage            string
        localRepository      string
+       buildTimeout         string
        repositories         []string
        properties           []string
        contexts             []string
@@ -182,6 +186,14 @@ func (o *installCmdOptions) install(_ *cobra.Command, _ 
[]string) error {
                if o.baseImage != "" {
                        platform.Spec.Build.BaseImage = o.baseImage
                }
+               if o.buildTimeout != "" {
+                       d, err := time.ParseDuration(o.buildTimeout)
+                       if err != nil {
+                               return err
+                       }
+
+                       platform.Spec.Build.Timeout.Duration = d
+               }
 
                platform.Spec.Resources.Contexts = o.contexts
 
diff --git a/pkg/controller/integrationplatform/initialize.go 
b/pkg/controller/integrationplatform/initialize.go
index fe84775..59aead4 100644
--- a/pkg/controller/integrationplatform/initialize.go
+++ b/pkg/controller/integrationplatform/initialize.go
@@ -19,6 +19,7 @@ package integrationplatform
 
 import (
        "context"
+       "time"
 
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
        "github.com/apache/camel-k/pkg/platform"
@@ -104,11 +105,15 @@ func (action *initializeAction) Handle(ctx 
context.Context, ip *v1alpha1.Integra
        if target.Spec.Build.LocalRepository == "" {
                target.Spec.Build.LocalRepository = defaults.LocalRepository
        }
+       if target.Spec.Build.Timeout.Duration == 0 {
+               target.Spec.Build.Timeout.Duration = 5 * time.Minute
+       }
 
        action.L.Infof("CamelVersion set to %s", target.Spec.Build.CamelVersion)
        action.L.Infof("RuntimeVersion set to %s", 
target.Spec.Build.RuntimeVersion)
        action.L.Infof("BaseImage set to %s", target.Spec.Build.BaseImage)
        action.L.Infof("LocalRepository set to %s", 
target.Spec.Build.LocalRepository)
+       action.L.Infof("Timeout set to %s", target.Spec.Build.Timeout)
 
        for i, r := range target.Spec.Build.Repositories {
                if i == 0 {
diff --git a/pkg/util/kubernetes/wait.go b/pkg/util/kubernetes/wait.go
index e4895d7..5c6129b 100644
--- a/pkg/util/kubernetes/wait.go
+++ b/pkg/util/kubernetes/wait.go
@@ -24,6 +24,8 @@ import (
        "github.com/apache/camel-k/pkg/client"
        "github.com/pkg/errors"
        "k8s.io/apimachinery/pkg/runtime"
+
+       k8serrors "k8s.io/apimachinery/pkg/api/errors"
        k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 )
 
@@ -47,14 +49,19 @@ func WaitCondition(ctx context.Context, c client.Client, 
obj runtime.Object, con
        for start.Add(maxDuration).After(time.Now()) {
                err := c.Get(ctx, key, obj)
                if err != nil {
-                       time.Sleep(sleepTime)
-                       continue
+                       if k8serrors.IsNotFound(err) {
+                               time.Sleep(sleepTime)
+                               continue
+                       }
+
+                       return err
                }
 
                satisfied, err := condition(obj)
                if err != nil {
                        return errors.Wrap(err, "error while evaluating 
condition")
-               } else if !satisfied {
+               }
+               if !satisfied {
                        time.Sleep(sleepTime)
                        continue
                }
diff --git a/test/builder_integration_test.go b/test/builder_integration_test.go
index 293724c..bad83a3 100644
--- a/test/builder_integration_test.go
+++ b/test/builder_integration_test.go
@@ -26,17 +26,16 @@ import (
        "testing"
        "time"
 
+       "github.com/apache/camel-k/pkg/util/cancellable"
        "github.com/apache/camel-k/pkg/util/defaults"
-
        "github.com/apache/camel-k/pkg/util/test"
 
-       "github.com/apache/camel-k/pkg/util/cancellable"
-
-       "k8s.io/apimachinery/pkg/apis/meta/v1"
-
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
        "github.com/apache/camel-k/pkg/builder"
        "github.com/apache/camel-k/pkg/builder/s2i"
+
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
        "github.com/stretchr/testify/assert"
 )
 
@@ -67,7 +66,7 @@ func TestBuildManagerBuild(t *testing.T) {
                C:              cancellable.NewContext(),
                Catalog:        catalog,
                RuntimeVersion: defaults.RuntimeVersion,
-               Meta: v1.ObjectMeta{
+               Meta: metav1.ObjectMeta{
                        Name:            "man-test",
                        ResourceVersion: "1",
                },
@@ -76,6 +75,9 @@ func TestBuildManagerBuild(t *testing.T) {
                                CamelVersion:   catalog.Version,
                                RuntimeVersion: defaults.RuntimeVersion,
                                BaseImage:      
"docker.io/fabric8/s2i-java:3.0-java8",
+                               Timeout: metav1.Duration{
+                                       Duration: 5 * time.Minute,
+                               },
                        },
                },
                Dependencies: []string{
@@ -115,7 +117,7 @@ func TestBuildManagerFailedBuild(t *testing.T) {
                C:              cancellable.NewContext(),
                Catalog:        catalog,
                RuntimeVersion: defaults.RuntimeVersion,
-               Meta: v1.ObjectMeta{
+               Meta: metav1.ObjectMeta{
                        Name:            "man-test",
                        ResourceVersion: "1",
                },
@@ -124,6 +126,9 @@ func TestBuildManagerFailedBuild(t *testing.T) {
                                CamelVersion:   catalog.Version,
                                RuntimeVersion: defaults.RuntimeVersion,
                                BaseImage:      
"docker.io/fabric8/s2i-java:3.0-java8",
+                               Timeout: metav1.Duration{
+                                       Duration: 5 * time.Minute,
+                               },
                        },
                },
                Dependencies: []string{

Reply via email to