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 26d2af20a8f25b6e02343c12b69c7f40fafad345
Author: Nicola Ferraro <[email protected]>
AuthorDate: Wed Jun 3 18:05:10 2020 +0200

    Fix #1396: use circuitbreaker capability from runtime
---
 deploy/camel-catalog-1.3.0-SNAPSHOT-main.yaml    |  4 ++++
 deploy/camel-catalog-1.3.0-SNAPSHOT-quarkus.yaml |  4 ++++
 deploy/resources.go                              |  8 ++++----
 pkg/apis/camel/v1/common_types.go                |  2 ++
 pkg/metadata/metadata_dependencies_test.go       | 19 +++++++++++--------
 pkg/util/source/inspector.go                     | 19 +++++++++++++++----
 pkg/util/source/inspector_xml.go                 |  2 +-
 pkg/util/source/inspector_yaml.go                |  2 +-
 8 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/deploy/camel-catalog-1.3.0-SNAPSHOT-main.yaml 
b/deploy/camel-catalog-1.3.0-SNAPSHOT-main.yaml
index 3e7880d..8f34b3f 100644
--- a/deploy/camel-catalog-1.3.0-SNAPSHOT-main.yaml
+++ b/deploy/camel-catalog-1.3.0-SNAPSHOT-main.yaml
@@ -56,6 +56,10 @@ spec:
           artifactId: camel-rest
         - groupId: org.apache.camel.k
           artifactId: camel-k-runtime-http
+      circuit-breaker:
+        dependencies:
+        - groupId: org.apache.camel
+          artifactId: camel-microprofile-fault-tolerance
   artifacts:
     camel-zipfile:
       groupId: org.apache.camel
diff --git a/deploy/camel-catalog-1.3.0-SNAPSHOT-quarkus.yaml 
b/deploy/camel-catalog-1.3.0-SNAPSHOT-quarkus.yaml
index c7d8f60..12e1125 100644
--- a/deploy/camel-catalog-1.3.0-SNAPSHOT-quarkus.yaml
+++ b/deploy/camel-catalog-1.3.0-SNAPSHOT-quarkus.yaml
@@ -56,6 +56,10 @@ spec:
           artifactId: camel-quarkus-rest
         - groupId: org.apache.camel.quarkus
           artifactId: camel-quarkus-platform-http
+      circuit-breaker:
+        dependencies:
+        - groupId: org.apache.camel.quarkus
+          artifactId: camel-quarkus-microprofile-fault-tolerance
   artifacts:
     camel-quarkus-kudu:
       groupId: org.apache.camel.quarkus
diff --git a/deploy/resources.go b/deploy/resources.go
index 4d0d5bd..3401782 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -91,16 +91,16 @@ var assets = func() http.FileSystem {
                "/camel-catalog-1.3.0-SNAPSHOT-main.yaml": 
&vfsgen۰CompressedFileInfo{
                        name:             
"camel-catalog-1.3.0-SNAPSHOT-main.yaml",
                        modTime:          time.Time{},
-                       uncompressedSize: 88422,
+                       uncompressedSize: 88560,
 
-                       compressedContent: 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x7d\x5b\x77\xdb\x38\xb2\xee\x7b\x7e\x05\xd7\xe4\x65\xef\x75\x46\x35\x3d\xce\xcc\xf4\xd9\x7d\x9e\x6c\x39\x4e\xec\xd8\x8e\x3b\xf2\x24\x99\x7e\xe9\x05\x91\x90\x04\x89\x24\x68\x00\xba\xd8\xbf\xfe\x2c\x5c\x78\x15\x04\x89\x84\xe1\xb5\xfd\x60\x52\x44\xd5\x57\x2c\x82\xc4\xa5\x50\xa8\x7a\x1f\x8d\x5e\xef\xef\xdd\xfb\xe8\x96\xc4\x38\xe7\x38\x89\x04\x8d\xc4\x02\x47\xe7\x05\x8a\x17\x38\x9a\xd0\x99\xd8\x22\x86\xa3\x2b\xba\xce\x
 [...]
+                       compressedContent: 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x7d\x5b\x77\xdb\x38\xb2\xee\x7b\x7e\x05\xd7\xe4\x65\xef\x75\x86\x35\x3d\xce\xcc\xf4\xd9\x7d\x9e\x6c\x39\x4e\xec\xd8\x8e\x3b\xf2\x24\x99\x7e\xe9\x05\x91\x90\x04\x8b\x24\x68\x00\x92\x65\xff\xfa\xb3\x70\xe1\x55\x10\x24\x12\x86\xd7\xf6\x83\x49\x11\x55\x5f\xb1\x08\x12\x97\x42\xa1\xea\x7d\x14\xbf\xde\xdf\xbb\xf7\xd1\x35\x49\x70\xc1\x71\x1a\x09\x1a\x89\x25\x8e\x4e\x4b\x94\x2c\x71\x34\xa5\x73\xf1\x84\x18\x8e\x2e\xe8\xba\x
 [...]
                },
                "/camel-catalog-1.3.0-SNAPSHOT-quarkus.yaml": 
&vfsgen۰CompressedFileInfo{
                        name:             
"camel-catalog-1.3.0-SNAPSHOT-quarkus.yaml",
                        modTime:          time.Time{},
-                       uncompressedSize: 47186,
+                       uncompressedSize: 47340,
 
-                       compressedContent: 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x7d\x4d\x77\xdc\xa8\xf2\xf7\xde\x9f\x82\x13\x6f\xee\x3d\x67\xc4\xcc\x75\x9e\x3b\x8b\x3c\x2b\xdb\x89\x13\x3b\xb1\xe3\xa4\x7d\x27\x99\xd9\xe4\xd0\x12\xdd\x8d\x5b\x02\x19\x50\x77\xdb\x9f\xfe\x7f\x40\xe8\xad\x2d\x97\x5e\x8c\xda\x0b\x4b\x2d\x8a\x5f\x41\x81\xa0\x54\x55\xc0\x31\x0a\xfc\xfd\x1d\x1d\xa3\x2f\x2c\xa4\x5c\xd1\x08\x69\x81\xf4\x8a\xa2\xd3\x94\x84\x2b\x8a\x66\x62\xa1\xb7\x44\x52\x74\x21\x32\x1e\x11\xcd\x04\x47\x
 [...]
+                       compressedContent: 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5d\x5f\x77\xdb\xaa\xb2\x7f\xcf\xa7\x60\x35\x2f\xe7\xac\xb5\xc5\xde\x27\xbd\xe7\x3c\xf4\x3e\x25\x69\xd3\x26\x6d\xd2\xb4\xce\xd9\xed\xde\x2f\x5d\x58\xc2\x36\xb1\x04\x0a\x20\xdb\xc9\xa7\xbf\x0b\x84\xfe\x39\xca\xe8\x4f\x90\x6f\x1e\x22\x59\x0c\xbf\x81\x01\xc1\x68\x66\x80\x63\x14\xf8\xfb\x3b\x3a\x46\x5f\x58\x48\xb9\xa2\x11\xd2\x02\xe9\x15\x45\xa7\x29\x09\x57\x14\xcd\xc4\x42\x6f\x89\xa4\xe8\x42\x64\x3c\x22\x9a\x09\x8e\x
 [...]
                },
                "/cr-example.yaml": &vfsgen۰CompressedFileInfo{
                        name:             "cr-example.yaml",
diff --git a/pkg/apis/camel/v1/common_types.go 
b/pkg/apis/camel/v1/common_types.go
index bbddb5b..36be391 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -116,6 +116,8 @@ const (
        CapabilityCron = "cron"
        // CapabilityPlatformHTTP --
        CapabilityPlatformHTTP = "platform-http"
+       // CapabilityCircuitBreaker
+       CapabilityCircuitBreaker = "circuit-breaker"
 )
 
 // ResourceCondition is a common type for all conditions
diff --git a/pkg/metadata/metadata_dependencies_test.go 
b/pkg/metadata/metadata_dependencies_test.go
index 0e1cdcd..5f1b93e 100644
--- a/pkg/metadata/metadata_dependencies_test.go
+++ b/pkg/metadata/metadata_dependencies_test.go
@@ -168,7 +168,7 @@ func TestDependenciesQuarkus(t *testing.T) {
                            from("http:test").to("log:end");
                            from("https:test").to("log:end");
                            from("twitter-timeline:test").to("mock:end");
-                           
from("direct:start").circuitBreaker().hystrixConfiguration().executionTimeoutInMilliseconds(100).end()
+                           
from("direct:start").circuitBreaker().faultToleranceConfiguration().timeoutEnabled(true).timeoutDuration(1500).end()
                            
.to("direct:other").onFallback().setBody(constant("Fallback response")).end();
                    `,
                },
@@ -188,9 +188,10 @@ func TestDependenciesQuarkus(t *testing.T) {
                        "camel-quarkus:timer",
                        "camel-quarkus:twitter",
                        "camel-quarkus:direct",
-                       "camel-quarkus:hystrix",
                },
                meta.Dependencies.List())
+
+       assert.True(t, 
meta.RequiredCapabilities.Has(v1.CapabilityCircuitBreaker))
 }
 
 func TestJacksonDependency(t *testing.T) {
@@ -315,7 +316,7 @@ func TestLanguageDependenciesTransformExpression(t 
*testing.T) {
                meta.Dependencies.List())
 }
 
-func TestHystrixDependency(t *testing.T) {
+func TestCircuitBreakerDependency(t *testing.T) {
        code := v1.SourceSpec{
                DataSpec: v1.DataSpec{
                        Name: "Request.groovy",
@@ -338,10 +339,11 @@ func TestHystrixDependency(t *testing.T) {
        assert.ElementsMatch(t,
                []string{
                        "camel:http",
-                       "camel:hystrix",
                        "camel:log",
                },
                meta.Dependencies.List())
+
+       assert.True(t, 
meta.RequiredCapabilities.Has(v1.CapabilityCircuitBreaker))
 }
 
 func TestRestDependency(t *testing.T) {
@@ -496,7 +498,7 @@ func TestRestClosureDependencyKotlin(t *testing.T) {
                meta.Dependencies.List())
 }
 
-func TestXMLHystrixDependency(t *testing.T) {
+func TestXMLCircuitBreakerDependency(t *testing.T) {
        code := v1.SourceSpec{
 
                DataSpec: v1.DataSpec{
@@ -523,11 +525,12 @@ func TestXMLHystrixDependency(t *testing.T) {
                t,
                []string{
                        "camel:direct",
-                       "camel:hystrix",
                        "camel:kafka",
                        "camel:log",
                },
                meta.Dependencies.List())
+
+       assert.True(t, 
meta.RequiredCapabilities.Has(v1.CapabilityCircuitBreaker))
 }
 
 func TestXMLRestDependency(t *testing.T) {
@@ -696,7 +699,7 @@ func TestYAMLRestDependency(t *testing.T) {
        assert.True(t, meta.RequiredCapabilities.Has("rest"))
 }
 
-func TestYAMLHystrixDependency(t *testing.T) {
+func TestYAMLCircuitBreakerDependency(t *testing.T) {
        code := v1.SourceSpec{
 
                DataSpec: v1.DataSpec{
@@ -715,9 +718,9 @@ func TestYAMLHystrixDependency(t *testing.T) {
                t,
                []string{
                        "camel:direct",
-                       "camel:hystrix",
                },
                meta.Dependencies.List())
+       assert.True(t, 
meta.RequiredCapabilities.Has(v1.CapabilityCircuitBreaker))
 }
 
 func TestYAMLLanguageDependencies(t *testing.T) {
diff --git a/pkg/util/source/inspector.go b/pkg/util/source/inspector.go
index 25347d3..94b8951 100644
--- a/pkg/util/source/inspector.go
+++ b/pkg/util/source/inspector.go
@@ -54,6 +54,10 @@ var (
        xpathRegexp             = regexp.MustCompile(`.*\.?xpath\s*\(.*\).*`)
        xtokenizeRegexp         = regexp.MustCompile(`.*\.xtokenize\s*\(.*\).*`)
 
+       sourceCapabilities = map[*regexp.Regexp][]string{
+               circuitBreakerRegexp: {v1.CapabilityCircuitBreaker},
+       }
+
        sourceDependencies = map[*regexp.Regexp]catalog2deps{
                jsonLibraryRegexp: func(_ *camel.RuntimeCatalog) []string {
                        return []string{"camel:jackson"}
@@ -61,9 +65,6 @@ var (
                jsonLanguageRegexp: func(_ *camel.RuntimeCatalog) []string {
                        return []string{"camel:jackson"}
                },
-               circuitBreakerRegexp: func(_ *camel.RuntimeCatalog) []string {
-                       return []string{"camel:hystrix"}
-               },
                restConfigurationRegexp: func(catalog *camel.RuntimeCatalog) 
[]string {
                        deps := make([]string, 0)
                        if c, ok := 
catalog.CamelCatalogSpec.Runtime.Capabilities["rest"]; ok {
@@ -200,7 +201,7 @@ func (i baseInspector) Extract(v1.SourceSpec, *Metadata) 
error {
 }
 
 // discoverDependencies returns a list of dependencies required by the given 
source code
-func (i *baseInspector) discoverCapabilities(_ v1.SourceSpec, meta *Metadata) {
+func (i *baseInspector) discoverCapabilities(source v1.SourceSpec, meta 
*Metadata) {
        uris := util.StringSliceJoin(meta.FromURIs, meta.ToURIs)
 
        for _, uri := range uris {
@@ -208,6 +209,16 @@ func (i *baseInspector) discoverCapabilities(_ 
v1.SourceSpec, meta *Metadata) {
                        meta.RequiredCapabilities.Add(v1.CapabilityPlatformHTTP)
                }
        }
+
+       for pattern, capabilities := range sourceCapabilities {
+               if !pattern.MatchString(source.Content) {
+                       continue
+               }
+
+               for _, capability := range capabilities {
+                       meta.RequiredCapabilities.Add(capability)
+               }
+       }
 }
 
 // discoverDependencies returns a list of dependencies required by the given 
source code
diff --git a/pkg/util/source/inspector_xml.go b/pkg/util/source/inspector_xml.go
index 4d4f39e..a1f1a9c 100644
--- a/pkg/util/source/inspector_xml.go
+++ b/pkg/util/source/inspector_xml.go
@@ -47,7 +47,7 @@ func (i XMLInspector) Extract(source v1.SourceSpec, meta 
*Metadata) error {
                                meta.ExposesHTTPServices = true
                                meta.RequiredCapabilities.Add(v1.CapabilityRest)
                        case "circuitBreaker":
-                               i.addDependency("camel:hystrix", meta)
+                               
meta.RequiredCapabilities.Add(v1.CapabilityCircuitBreaker)
                        case "language":
                                for _, a := range se.Attr {
                                        if a.Name.Local == "language" {
diff --git a/pkg/util/source/inspector_yaml.go 
b/pkg/util/source/inspector_yaml.go
index f705b62..a981049 100644
--- a/pkg/util/source/inspector_yaml.go
+++ b/pkg/util/source/inspector_yaml.go
@@ -60,7 +60,7 @@ func (i YAMLInspector) parseStep(key string, content 
interface{}, meta *Metadata
                meta.ExposesHTTPServices = true
                meta.RequiredCapabilities.Add(v1.CapabilityRest)
        case "circuitBreaker":
-               i.addDependency("camel:hystrix", meta)
+               meta.RequiredCapabilities.Add(v1.CapabilityCircuitBreaker)
        }
 
        var maybeURI string

Reply via email to