Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
oscerd merged PR #12857: URL: https://github.com/apache/camel/pull/12857 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
lburgazzoli commented on PR #12857: URL: https://github.com/apache/camel/pull/12857#issuecomment-1911729417 > @lburgazzoli can your resolve conflicts so we could merge? Thanks! done -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
oscerd commented on PR #12857: URL: https://github.com/apache/camel/pull/12857#issuecomment-1910175909 @lburgazzoli can your resolve conflicts so we could merge? Thanks! -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
lburgazzoli commented on code in PR #12857: URL: https://github.com/apache/camel/pull/12857#discussion_r1461802949 ## components/camel-wasm/src/test/java/org/apache/camel/language/wasm/WasmLanguageTest.java: ## @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.language.wasm; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.FluentProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.util.StringHelper; +import org.assertj.core.api.InstanceOfAssertFactories; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.as; +import static org.assertj.core.api.Assertions.assertThat; + +public class WasmLanguageTest { + +@ParameterizedTest +@ValueSource(strings = { +"transf...@functions.wasm", +"transform@file:{{wasm.resources.path}}/functions.wasm" +}) +public void testLanguage(String expression) throws Exception { +try (CamelContext cc = new DefaultCamelContext()) { + +FluentProducerTemplate pt = cc.createFluentProducerTemplate(); + +cc.addRoutes(new RouteBuilder() { +@Override +public void configure() throws Exception { +from("direct:in") +.transform() +.wasm( +StringHelper.before(expression, "@"), +StringHelper.after(expression, "@")); +} +}); +cc.start(); + +Exchange out = pt.to("direct:in") +.withHeader("foo", "bar") +.withBody("hello") +.request(Exchange.class); + +assertThat(out.getMessage().getHeaders()) +.containsEntry("foo", "bar"); +assertThat(out.getMessage().getBody(String.class)) +.isEqualTo("HELLO"); + +} +} + +@Test +public void testLanguageFailure() throws Exception { +try (CamelContext cc = new DefaultCamelContext()) { + +FluentProducerTemplate pt = cc.createFluentProducerTemplate(); + +cc.addRoutes(new RouteBuilder() { +@Override +public void configure() throws Exception { +from("direct:in") +.transform() +.wasm("transform_err", "functions.wasm"); +} +}); +cc.start(); + +Exchange out = pt.to("direct:in") +.withHeader("foo", "bar") +.withBody("hello") +.request(Exchange.class); + +assertThat(out.getException()) +.isNotNull() +.hasCauseInstanceOf(RuntimeException.class) +.extracting(Throwable::getCause, as(InstanceOfAssertFactories.THROWABLE)) +.hasMessage("this is an error"); Review Comment: done -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
orpiske commented on code in PR #12857: URL: https://github.com/apache/camel/pull/12857#discussion_r1461794900 ## components/camel-wasm/src/test/java/org/apache/camel/language/wasm/WasmLanguageTest.java: ## @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.language.wasm; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.FluentProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.util.StringHelper; +import org.assertj.core.api.InstanceOfAssertFactories; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.as; +import static org.assertj.core.api.Assertions.assertThat; + +public class WasmLanguageTest { + +@ParameterizedTest +@ValueSource(strings = { +"transf...@functions.wasm", +"transform@file:{{wasm.resources.path}}/functions.wasm" +}) +public void testLanguage(String expression) throws Exception { +try (CamelContext cc = new DefaultCamelContext()) { + +FluentProducerTemplate pt = cc.createFluentProducerTemplate(); + +cc.addRoutes(new RouteBuilder() { +@Override +public void configure() throws Exception { +from("direct:in") +.transform() +.wasm( +StringHelper.before(expression, "@"), +StringHelper.after(expression, "@")); +} +}); +cc.start(); + +Exchange out = pt.to("direct:in") +.withHeader("foo", "bar") +.withBody("hello") +.request(Exchange.class); + +assertThat(out.getMessage().getHeaders()) +.containsEntry("foo", "bar"); +assertThat(out.getMessage().getBody(String.class)) +.isEqualTo("HELLO"); + +} +} + +@Test +public void testLanguageFailure() throws Exception { +try (CamelContext cc = new DefaultCamelContext()) { + +FluentProducerTemplate pt = cc.createFluentProducerTemplate(); + +cc.addRoutes(new RouteBuilder() { +@Override +public void configure() throws Exception { +from("direct:in") +.transform() +.wasm("transform_err", "functions.wasm"); +} +}); +cc.start(); + +Exchange out = pt.to("direct:in") +.withHeader("foo", "bar") +.withBody("hello") +.request(Exchange.class); + +assertThat(out.getException()) +.isNotNull() +.hasCauseInstanceOf(RuntimeException.class) +.extracting(Throwable::getCause, as(InstanceOfAssertFactories.THROWABLE)) +.hasMessage("this is an error"); Review Comment: One thing I noticed: we need to add a `log4j2.properties` file to the `test/resources` directory. This is causing the test (fake) errors to leak to `stdout`. Something like this should do the trick: ``` appender.out.type = File appender.out.name = out appender.out.fileName = target/camel-wasm-test.log appender.out.layout.type = PatternLayout appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n appender.stdout.type = Console appender.stdout.name = stdout appender.stdout.layout.type = PatternLayout appender.stdout.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n rootLogger.level = WARN rootLogger.appenderRef.out.ref = out logger.camel.name=org.apache.camel logger.camel.level=INFO logger.camelWasm.name=org.apache.camel.component.wasm logger.camelWasm.level=DEBUG ``` -- This is an automated message from the Apache Git Service. To res
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
orpiske commented on code in PR #12857: URL: https://github.com/apache/camel/pull/12857#discussion_r1461794900 ## components/camel-wasm/src/test/java/org/apache/camel/language/wasm/WasmLanguageTest.java: ## @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.language.wasm; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.FluentProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.util.StringHelper; +import org.assertj.core.api.InstanceOfAssertFactories; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.as; +import static org.assertj.core.api.Assertions.assertThat; + +public class WasmLanguageTest { + +@ParameterizedTest +@ValueSource(strings = { +"transf...@functions.wasm", +"transform@file:{{wasm.resources.path}}/functions.wasm" +}) +public void testLanguage(String expression) throws Exception { +try (CamelContext cc = new DefaultCamelContext()) { + +FluentProducerTemplate pt = cc.createFluentProducerTemplate(); + +cc.addRoutes(new RouteBuilder() { +@Override +public void configure() throws Exception { +from("direct:in") +.transform() +.wasm( +StringHelper.before(expression, "@"), +StringHelper.after(expression, "@")); +} +}); +cc.start(); + +Exchange out = pt.to("direct:in") +.withHeader("foo", "bar") +.withBody("hello") +.request(Exchange.class); + +assertThat(out.getMessage().getHeaders()) +.containsEntry("foo", "bar"); +assertThat(out.getMessage().getBody(String.class)) +.isEqualTo("HELLO"); + +} +} + +@Test +public void testLanguageFailure() throws Exception { +try (CamelContext cc = new DefaultCamelContext()) { + +FluentProducerTemplate pt = cc.createFluentProducerTemplate(); + +cc.addRoutes(new RouteBuilder() { +@Override +public void configure() throws Exception { +from("direct:in") +.transform() +.wasm("transform_err", "functions.wasm"); +} +}); +cc.start(); + +Exchange out = pt.to("direct:in") +.withHeader("foo", "bar") +.withBody("hello") +.request(Exchange.class); + +assertThat(out.getException()) +.isNotNull() +.hasCauseInstanceOf(RuntimeException.class) +.extracting(Throwable::getCause, as(InstanceOfAssertFactories.THROWABLE)) +.hasMessage("this is an error"); Review Comment: One thing I noticed: we need to add a `log4j2.properties` file to the `test/resources` directory. This is causing the test to leak to stdout. Something like this should do the trick: ``` appender.out.type = File appender.out.name = out appender.out.fileName = target/camel-wasm-test.log appender.out.layout.type = PatternLayout appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n appender.stdout.type = Console appender.stdout.name = stdout appender.stdout.layout.type = PatternLayout appender.stdout.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n rootLogger.level = WARN rootLogger.appenderRef.out.ref = out logger.camel.name=org.apache.camel logger.camel.level=INFO logger.camelWasm.name=org.apache.camel.component.wasm logger.camelWasm.level=DEBUG ``` -- This is an automated message from the Apache Git Service. To respond to the messa
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
orpiske commented on code in PR #12857: URL: https://github.com/apache/camel/pull/12857#discussion_r1461781622 ## components/camel-wasm/pom.xml: ## @@ -0,0 +1,86 @@ + + +http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd";> +4.0.0 + + +org.apache.camel +components +4.4.0-SNAPSHOT + + +camel-wasm +jar + +Camel :: Wasm +Camel Wasm component + + + -Dwasm.resources.path=${project.basedir}/src/test/resources Review Comment: Trying it right now ... I'll let you know in about 45 minutes 😇 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
lburgazzoli commented on code in PR #12857: URL: https://github.com/apache/camel/pull/12857#discussion_r1461769357 ## components/camel-wasm/pom.xml: ## @@ -0,0 +1,86 @@ + + +http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd";> +4.0.0 + + +org.apache.camel +components +4.4.0-SNAPSHOT + + +camel-wasm +jar + +Camel :: Wasm +Camel Wasm component + + + -Dwasm.resources.path=${project.basedir}/src/test/resources Review Comment: I don't think there is any limitation, at least, not I'm aware of so if you can give it a try, that would be very useful -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
orpiske commented on code in PR #12857: URL: https://github.com/apache/camel/pull/12857#discussion_r1461764067 ## components/camel-wasm/pom.xml: ## @@ -0,0 +1,86 @@ + + +http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd";> +4.0.0 + + +org.apache.camel +components +4.4.0-SNAPSHOT + + +camel-wasm +jar + +Camel :: Wasm +Camel Wasm component + + + -Dwasm.resources.path=${project.basedir}/src/test/resources Review Comment: Is this component portable? I think we should probably include the skips for `ppc64le` and `s390x`. ``` true true ``` I can give it a try later on these platforms. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
lburgazzoli commented on PR #12857: URL: https://github.com/apache/camel/pull/12857#issuecomment-1903780317 > > LGTM, I have just a question: > > Is wee_alloc changeable? > > not needed anymore, will remove it done -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
lburgazzoli commented on PR #12857: URL: https://github.com/apache/camel/pull/12857#issuecomment-1903780061 > It may be that the docs for language is a mostly a copy of the component doc. I think I didnt see an example how to use it as a language. Also what is the benefit of a language vs a component. yeah at this very early stage, a language and a component are pretty much similar, the only difference is that at this stage the component acts on the whole exchange, so it can change headers & what not, whereas the language can only change the payload or be used as a predicate. I expect things to be improved over time, also depending on the maturity of the runtime. About the documents, do we have a place where we can put some common docs ? > Can you have very little wasm function scripts that you can inlined in a camel language, or would you always have these in external files. It will always be an external resource since what the wasm runtime runs is a Wasm bitecode. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
davsclaus commented on PR #12857: URL: https://github.com/apache/camel/pull/12857#issuecomment-1903698637 It may be that the docs for language is a mostly a copy of the component doc. I think I didnt see an example how to use it as a language. Also what is the benefit of a language vs a component. Can you have very little wasm function scripts that you can inlined in a camel language, or would you always have these in external files. If the component does not do any kind of remote connection (I assume it calls always a local process), then you can set remote = false in the @UriEndpoint. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
lburgazzoli commented on PR #12857: URL: https://github.com/apache/camel/pull/12857#issuecomment-1903659313 > LGTM, I have just a question: > > Is wee_alloc changeable? > not needed anymore, will remove it -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] CAMEL-20336: Add a WebAssembly component and language [camel]
github-actions[bot] commented on PR #12857: URL: https://github.com/apache/camel/pull/12857#issuecomment-1903633729 :star2: Thank you for your contribution to the Apache Camel project! :star2: :robot: CI automation will test this PR automatically. :camel: Apache Camel Committers, please review the following items: * First-time contributors **require MANUAL approval** for the GitHub Actions to run * You can use the command `/component-test (camel-)component-name1 (camel-)component-name2..` to request a test from the test bot. * You can label PRs using `build-all`, `build-dependents`, `skip-tests` and `test-dependents` to fine-tune the checks executed by this PR. * Build and test logs are available in the Summary page. **Only** [Apache Camel committers](https://camel.apache.org/community/team/#committers) have access to the summary. * :warning: Be careful when sharing logs. Review their contents before sharing them publicly. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org