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
