Skip to content
This repository was archived by the owner on Mar 11, 2022. It is now read-only.

Implement stateless function support#42

Merged
marcellanz merged 12 commits intocloudstateio:masterfrom
owlet-labs:implement-stateless-function-support
Sep 24, 2020
Merged

Implement stateless function support#42
marcellanz merged 12 commits intocloudstateio:masterfrom
owlet-labs:implement-stateless-function-support

Conversation

@owlet-labs
Copy link
Copy Markdown
Contributor

This implements stateless function support. A provisional stateless function TCK is included since to my knowledge, the cloudstate tck does not cover stateless functions yet. By default, executing ./extended_tck.sh will build a docker container, install cloudstate python-support into the docker container (including protobuf build), and run the original tck as well as the extended tck against said container.

Some changes to the build have been made to simplify installation, incorporating protobuf compilation into setup.py.

@lightbend-cla-validator
Copy link
Copy Markdown

Hi @GratefulTony,

Thank you for your contribution! We really value the time you've taken to put this together.

Before we proceed with reviewing this pull request, please sign the Lightbend Contributors License Agreement:

https://www.lightbend.com/contribute/cla

1 similar comment
@lightbend-cla-validator
Copy link
Copy Markdown

Hi @GratefulTony,

Thank you for your contribution! We really value the time you've taken to put this together.

Before we proceed with reviewing this pull request, please sign the Lightbend Contributors License Agreement:

https://www.lightbend.com/contribute/cla

@marcellanz
Copy link
Copy Markdown
Contributor

@GratefulTony thanks a lot for this contribution :)
While reviewing it, we also like to get stateless function support in general in line with the current reference implementation. There are some open questions he project is on for this.

@marcellanz marcellanz added the enhancement New feature or request label Sep 11, 2020
Copy link
Copy Markdown

@sleipnir sleipnir left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@GratefulTony Thank you for this PR. Technically very good. I made just a few small comments.

@marcellanz hing to add? We have an open question about nomenclatures and semantics about StatelessFunctions in the Cloudstate main repository but I think we can go ahead with the PR analysis and then make the necessary changes. What do you think?

Comment thread cloudstate/function_servicer.py Outdated
TYPE_URL_PREFIX = "type.googleapis.com/"


def get_payload(command):
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see some duplications between this class and the CloudstateEventSourcedServicer class that opens up possibilities for refactoring. Perhaps extracting to a utility class.

forward: Forward = None

# todo: is this correct? there is no command_id on the stateless function requests.
command_id = random.randint(0, sys.maxsize)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. As there is no state there is no need for the proxy to map an entity to a specific shard. So there is no need for a command_id

stream_out_handlers: MutableMapping[str, Callable] = field(default_factory=dict)

@property
def persistence_id(self):
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need a persistence_id because in the stateless case there will be no persistence involved

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is the last issue I need to resolve: I haven't been able to get discovery to work without this.

Comment thread example/tck_services.py Outdated

logger = getLogger()

if __name__ == "__main__":
Copy link
Copy Markdown

@sleipnir sleipnir Sep 11, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we don't have a reference TCK for StatelessFunctions yet implemented, wouldn't it be more interesting to turn this into unit testing / integration? Wdyt?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

work in progress moving to unit tests.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks like the proxy needs to be running to get any meaningful test of the functionality. I think the only solution would be to pull/boot the docker container during ci, which might be annoyingly slow.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's OK to have the CI pulling docker images, hence the proxy, to test functionality; we do it at different other points. If not a language support library is doing it, the main project does it when it runs the TCK for all known support libraries; which might be too late depending on the changes made.

There is also: https://observablehq.com/@marcellanz/cloudstate-go-tck-verification that runs the TCK nightly.

@owlet-labs
Copy link
Copy Markdown
Contributor Author

Thanks for the review! I will look into making the requested changes this weekend. Also open to updating things in the future if nomenclature/best practices around stateless functions change.

Comment thread setup.py Outdated
Comment thread extended_tck.sh Outdated
Comment thread shoppingcart/shopping_cart_entity.py Outdated
Comment thread example/tck_services.py Outdated
Comment thread cloudstate/function_servicer.py Outdated
@pvlugter
Copy link
Copy Markdown
Member

Current plan is to rename stateless functions to Actions. They can certainly be renamed here later.

@sleipnir
Copy link
Copy Markdown

@pvlugter Is that the only change you intend to make?

@lightbend-cla-validator
Copy link
Copy Markdown

At least one pull request committer is not linked to a user. See https://help.github.com/en/articles/why-are-my-commits-linked-to-the-wrong-user#commits-are-not-linked-to-any-user

1 similar comment
@lightbend-cla-validator
Copy link
Copy Markdown

At least one pull request committer is not linked to a user. See https://help.github.com/en/articles/why-are-my-commits-linked-to-the-wrong-user#commits-are-not-linked-to-any-user

@owlet-labs
Copy link
Copy Markdown
Contributor Author

still have some work to do implementing the requested changes. Will get to it in the coming days. Moving to running unit tests for stateless functions. (can look into renaming to actions) fixed up the tck script to use unique container names, and made the networking more platform agnostic.

@lightbend-cla-validator
Copy link
Copy Markdown

At least one pull request committer is not linked to a user. See https://help.github.com/en/articles/why-are-my-commits-linked-to-the-wrong-user#commits-are-not-linked-to-any-user

1 similar comment
@lightbend-cla-validator
Copy link
Copy Markdown

At least one pull request committer is not linked to a user. See https://help.github.com/en/articles/why-are-my-commits-linked-to-the-wrong-user#commits-are-not-linked-to-any-user

@owlet-labs owlet-labs force-pushed the implement-stateless-function-support branch from ef98f92 to 3641a2e Compare September 15, 2020 03:47
@marcellanz
Copy link
Copy Markdown
Contributor

Hi @chomnoue,

Thank you for your contribution! We really value the time you've taken to put this together.

Before we proceed with reviewing this pull request, please sign the Lightbend Contributors License Agreement:

https://www.lightbend.com/contribute/cla

@GratefulTony I see now the typesafe-cla-validator mentioning "chomnoue" for commits you probably pushed. Also there are quite few unrelated commits I think visible in this branch. Could you rebase your changes/additions somehow cleanly to your branch? Regarding the CLA Validator if I remember correctly you got approved its check with your initial commit for this PR, or is this still pending? Thanks :)

@marcellanz
Copy link
Copy Markdown
Contributor

Hi @chomnoue,

Thank you for your contribution! We really value the time you've taken to put this together.

Before we proceed with reviewing this pull request, please sign the Lightbend Contributors License Agreement:

https://www.lightbend.com/contribute/cla

@pvlugter can you imagine why the CLA Validator mentions chomnoue now in this PR? Thanks.

@owlet-labs
Copy link
Copy Markdown
Contributor Author

Hi @chomnoue,
Thank you for your contribution! We really value the time you've taken to put this together.
Before we proceed with reviewing this pull request, please sign the Lightbend Contributors License Agreement:
https://www.lightbend.com/contribute/cla

@GratefulTony I see now the typesafe-cla-validator mentioning "chomnoue" for commits you probably pushed. Also there are quite few unrelated commits I think visible in this branch. Could you rebase your changes/additions somehow cleanly to your branch? Regarding the CLA Validator if I remember correctly you got approved its check with your initial commit for this PR, or is this still pending? Thanks :)

Yeah. I got approved, but had to go back and rewrite some of my earlier commits since I had my email misconfigured in git config on a new dev machine. I'm in the middle of a rebase to try to clean things up. this is my best guess as to why chomnoue is getting flagged.

@marcellanz
Copy link
Copy Markdown
Contributor

We discussed the renaming from stateful function to action today at the contributors call and we agreed to: "Python stateless function support can rename to action now or after merge".

So I think after the cleanup and review of this PR we should merge this PR and get the name changed afterwards.

@sleipnir
Copy link
Copy Markdown

@marcellanz I agree with merge first and rename later

@owlet-labs owlet-labs force-pushed the implement-stateless-function-support branch from 1665c76 to f284b8d Compare September 16, 2020 17:33
@owlet-labs
Copy link
Copy Markdown
Contributor Author

I think I have a good rebase now, CLA validator appears to be happy for now. still a tiny bit of work to do to get the docker/proxy-aware unit tests working.

@marcellanz
Copy link
Copy Markdown
Contributor

marcellanz commented Sep 17, 2020

I think I have a good rebase now, CLA validator appears to be happy for now. still a tiny bit of work to do to get the docker/proxy-aware unit tests working.

Thanks @GratefulTony sounds great. With about 4k lines removed and 1.5k added, can you please summarize shortly what has added, changed (and removed also) in this PR or what you were looking for. I assume that the PRs title "Implement stateless function support" describes not all changes for what I can see.

@owlet-labs
Copy link
Copy Markdown
Contributor Author

regarding why the persistence_id was included in the implementation: as I had said, it appears that the service discovery mechanism is using an EntitySpec protocol buffer to participate in service description. The EntitySpec has the entities field (of type Entity) which requires the persistence_id field. In my implementation, I do not use the persistence_id to do service resolution, so as far as I can tell, it is a kind of baggage, but a field which I think needs to be populated on the Entity protocol buffer. I don't see any corresponding analogue for stateless functions in the protobuf specs. I wasn't sure if this was used in any way by cloudstate internals, but I set it to the service name to relate the user function to the namespace concept. In my implementation, I believe it does not actually need to be set to non-default, so I could potentially set this field in Entity protocol buffers to empty string, but this didn't seem to be the right thing to do. As far as I can tell, service discovery can't occur if I don't fill in one of these Entity objects for a stateless function definition.

@marcellanz
Copy link
Copy Markdown
Contributor

It seems the proxy doesn't care ATM:
https://github.com/cloudstateio/cloudstate/blob/v0.5.1/proxy/core/src/main/scala/io/cloudstate/proxy/function/StatelessFunctionSupportFactory.scala#L33-L41
just logs the entity.persistenceId and uses solely the entity.serviceName to instantiate the StatelessFunctionSupport. The spec clearly should state its requirements regarding the stateless function support.

@sleipnir
Copy link
Copy Markdown

There is clearly a gap between what was defined in the protobuf and what the proxy implements. But I think that to continue with this PR we can maintain the approach used by @GratefulTony just referring to the persistence id in the discovery stage

@marcellanz
Copy link
Copy Markdown
Contributor

@sleipnir I Agree.

@marcellanz
Copy link
Copy Markdown
Contributor

@sean-walsh would you like to have an eye on this community PR for the Python support? Thanks.

@owlet-labs
Copy link
Copy Markdown
Contributor Author

So it seems we're ok with the "ride along" persistence_id and renaming to Actions later. I think other than that, all of the requested changes have been implemented. Let me know if there are other changes requested, otherwise, pr should be about ready to merge.

@sleipnir
Copy link
Copy Markdown

sleipnir commented Sep 19, 2020

Thank you @GratefulTony I will take a look later. Again welcome to our community

Comment thread Dockerfile Outdated
Comment thread cloudstate/cloudstate.py Outdated
Comment thread cloudstate/eventsourced_servicer.py
sleipnir and others added 2 commits September 22, 2020 11:14
Co-authored-by: Dalmo Cirne <dalmo.cirne@gmail.com>
Co-authored-by: Dalmo Cirne <dalmo.cirne@gmail.com>
@marcellanz
Copy link
Copy Markdown
Contributor

I tested the PR locally (on a Mac) and ./extended_tck.sh with cloudstate-function` failed as follows:

Run starting. Expected test count is: 5
ConfiguredCloudStateTCK:
Cloudstate TCK 
- must verify that the user function process responds
- must verify that an initial GetShoppingCart request succeeds
- must verify that items can be added to, and removed from, a shopping cart
- must verify that the backend supports the ServerReflection API
- must verify that the HTTP API of ShoppingCart protocol works
[ERROR] [09/23/2020 10:02:03.825] [CloudStateTCK-akka.actor.default-dispatcher-7] [akka://CloudStateTCK/system/pool-master] connection pool for Pool(shared->http://cloudstate-proxy-3hii9jedwx:9000) has shut down unexpectedly
java.lang.IllegalStateException: Pool shutdown unexpectedly
        at akka.http.impl.engine.client.PoolInterface$Logic.postStop(PoolInterface.scala:214)
        at akka.stream.impl.fusing.GraphInterpreter.finalizeStage(GraphInterpreter.scala:599)
        at akka.stream.impl.fusing.GraphInterpreter.finish(GraphInterpreter.scala:324)
        at akka.stream.impl.fusing.GraphInterpreterShell.tryAbort(ActorGraphInterpreter.scala:664)
        at akka.stream.impl.fusing.ActorGraphInterpreter.$anonfun$postStop$1(ActorGraphInterpreter.scala:802)
        at akka.stream.impl.fusing.ActorGraphInterpreter.$anonfun$postStop$1$adapted(ActorGraphInterpreter.scala:802)
        at scala.collection.immutable.Set$Set2.foreach(Set.scala:201)
        at akka.stream.impl.fusing.ActorGraphInterpreter.postStop(ActorGraphInterpreter.scala:802)
        at akka.actor.Actor.aroundPostStop(Actor.scala:554)
        at akka.actor.Actor.aroundPostStop$(Actor.scala:554)
        at akka.stream.impl.fusing.ActorGraphInterpreter.aroundPostStop(ActorGraphInterpreter.scala:691)
        at akka.actor.dungeon.FaultHandling.finishTerminate(FaultHandling.scala:240)
        at akka.actor.dungeon.FaultHandling.terminate(FaultHandling.scala:197)
        at akka.actor.dungeon.FaultHandling.terminate$(FaultHandling.scala:167)
        at akka.actor.ActorCell.terminate(ActorCell.scala:410)
        at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:519)
        at akka.actor.ActorCell.systemInvoke(ActorCell.scala:535)
        at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:295)
        at akka.dispatch.Mailbox.run(Mailbox.scala:230)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Run completed in 8 seconds, 486 milliseconds.
Total number of tests run: 5
Suites: completed 1, aborted 0
Tests: succeeded 5, failed 0, canceled 0, ignored 0, pending 0
All tests passed.
Removing docker containers
cloudstate-proxy-3hII9jEdWX
cloudstate-function-3hII9jEdWX
69f64237cde10d2dd02b37536a3ca0c0489eee12bdf1ab9e6c31df2c35d94925
5406ffa2baeb6804187a996ce37bde0e6b5c306563a6e0669cc17c8dd2059c53
2020-09-23 10:02:26,143 - test_shoppingcart.py - INFO: host: cloudstate-proxy-3hII9jEdWX
2020-09-23 10:02:26,143 - test_shoppingcart.py - INFO: port: 9000
2020-09-23 10:02:26,143 - test_shoppingcart.py - INFO: connecting on cloudstate-proxy-3hII9jEdWX:9000
2020-09-23 10:02:26,423 - test_shoppingcart.py - INFO: resp: 
2020-09-23 10:02:26,476 - test_shoppingcart.py - INFO: resp: items {
  product_id: "0"
  name: "beer"
  quantity: 24
}

2020-09-23 10:02:26,477 - test_functiondemo.py - INFO: connecting on cloudstate-proxy-3hII9jEdWX:9000
2020-09-23 10:02:26,477 - test_functiondemo.py - INFO: channel established.
2020-09-23 10:02:26,527 - test_functiondemo.py - INFO: resp: bar: "foo"

2020-09-23 10:02:26,542 - test_functiondemo.py - INFO: resp: bar: "foo!"

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 192, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.8/site-packages/cloudstate/test/tck_services.py", line 33, in <module>
    evaluate_functiondemo_server(server, server_port)
  File "/usr/local/lib/python3.8/site-packages/cloudstate/test/functiondemo/test_functiondemo.py", line 44, in evaluate_functiondemo_server
    stub2.ReverseString2(request_boom2)
  File "/usr/local/lib/python3.8/site-packages/_pytest/python_api.py", line 744, in __exit__
    fail(self.message)
  File "/usr/local/lib/python3.8/site-packages/_pytest/outcomes.py", line 156, in fail
    raise Failed(msg=msg, pytrace=pytrace)
Failed: DID NOT RAISE <class 'Exception'>
cloudstate-proxy-3hII9jEdWX
cloudstate-function-3hII9jEdWX
tck-network-3hII9jEdWX

Comment thread extended_tck.sh
PROXY_NAME=cloudstate-proxy-$RUN_SUFFIX
USER_FUNCTION_NAME=cloudstate-function-$RUN_SUFFIX
FUNCTION_CLIENT_NAME=cloudstate-function-client-$RUN_SUFFIX
TCK_NAME=cloudstate-tck-$RUN_SUFFIX
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
TCK_NAME=cloudstate-tck-$RUN_SUFFIX
TCK_NAME=cloudstate-tck-$RUN_SUFFIX
PYTHON_TCK_NAME=cloudstate-python-tck-dev:$RUN_SUFFIX

Comment thread extended_tck.sh
@@ -0,0 +1,66 @@
#!/usr/bin/env bash
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

after running this script I have a stopped container and its image left on the box

 dev-cloudstate-tck:local 

I think we can at least remove the container.

Comment thread extended_tck.sh Outdated
NETWORK_NAME=tck-network-$RUN_SUFFIX

# fresh docker build
docker build -t dev-cloudstate-tck:local ./
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
docker build -t dev-cloudstate-tck:local ./
docker build -t $PYTHON_TCK_NAME ./

Comment thread extended_tck.sh Outdated
-e USER_FUNCTION_PORT=8090 \
cloudstateio/cloudstate-proxy-dev-mode
sleep 10
docker run -d --network $NETWORK_NAME --name $USER_FUNCTION_NAME -p 8080:8080 dev-cloudstate-tck:local \
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
docker run -d --network $NETWORK_NAME --name $USER_FUNCTION_NAME -p 8080:8080 dev-cloudstate-tck:local \
docker run -d --network $NETWORK_NAME --name $USER_FUNCTION_NAME -p 8080:8080 $PYTHON_TCK_NAME \

Comment thread extended_tck.sh Outdated
docker rm -f $USER_FUNCTION_NAME

# secondary integration tests for stateless function:
docker run -d --network $NETWORK_NAME --name $USER_FUNCTION_NAME -p 8080:8080 dev-cloudstate-tck:local \
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
docker run -d --network $NETWORK_NAME --name $USER_FUNCTION_NAME -p 8080:8080 dev-cloudstate-tck:local \
docker run -d --network $NETWORK_NAME --name $USER_FUNCTION_NAME -p 8080:8080 $PYTHON_TCK_NAME \

Comment thread extended_tck.sh Outdated
-e USER_FUNCTION_PORT=8080 \
cloudstateio/cloudstate-proxy-dev-mode
sleep 10
docker run --network $NETWORK_NAME --name $FUNCTION_CLIENT_NAME dev-cloudstate-tck:local \
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
docker run --network $NETWORK_NAME --name $FUNCTION_CLIENT_NAME dev-cloudstate-tck:local \
docker run --network $NETWORK_NAME --name $FUNCTION_CLIENT_NAME $PYTHON_TCK_NAME \

Comment thread extended_tck.sh Outdated

status1=$?

docker rm -f $PROXY_NAME
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the existing tck scripts have the advantage to clean up every container/image no matter what happenend through a TRAP:

finally() {
  docker rm -f "$PROXY"
  docker rm -f "$FUNC"
}
trap finally EXIT

https://github.com/cloudstateio/python-support/blob/master/tck/run_tck.sh

Comment thread extended_tck.sh Outdated
status1=$?

docker rm -f $PROXY_NAME
docker rm -f $USER_FUNCTION_NAME
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should remove the temporary python tck image too:

Suggested change
docker rm -f $USER_FUNCTION_NAME
docker rm -f $USER_FUNCTION_NAME
docker rmi $PYTHON_TCK_NAME

@owlet-labs
Copy link
Copy Markdown
Contributor Author

owlet-labs commented Sep 23, 2020

thanks @marcellanz The changes to the script should be easy. Regarding the TCK, I noticed things weren't working as well when a new version of the TCK container was pushed a few days ago. I will try to get to the bottom of what's going on with the TCK.

@marcellanz
Copy link
Copy Markdown
Contributor

thanks @marcellanz The changes to the script should be easy. Regarding the TCK, I noticed things weren't working as well when a new version of the TCK container was pushed a few days ago. I will try to get to the bottom of what's going on with the TCK.

@GratefulTony It would be interesting from where the Pool shutdown unexpectedly is coming; I've seen this error on other occasions with other Support Libraries (might be a proxy issue). But as the shopping cart tests succeeded:
Tests: succeeded 5, failed 0, canceled 0, ignored 0, pending 0

I made my comment more about this one:
Failed: DID NOT RAISE <class 'Exception'>

which seems to come from the new stateless function tests. Thanks for looking into :)

@owlet-labs
Copy link
Copy Markdown
Contributor Author

owlet-labs commented Sep 23, 2020

@marcellanz I see. Thanks for pointing that out. Interesting that you don't appear to be using the latest tck image, which iirc, runs 23 tests? I may also need to check that the tck script pulls the latest image version...

It also seemed that there might be an issue with the latest tck... is this why you were using the previous version?

@marcellanz
Copy link
Copy Markdown
Contributor

@marcellanz I see. Thanks for pointing that out. Interesting that you don't appear to be using the latest tck image, which iirc, runs 23 tests? I may also need to check that the tck script pulls the latest image version...

great point! I think I have still an old image on my box.

@sleipnir
Copy link
Copy Markdown

I think we can only consider the oldest tck to validate this PR.

@marcellanz
Copy link
Copy Markdown
Contributor

I think we can only consider the oldest tck to validate this PR.

@sleipnir Agree. The last few days too much has changed on cloudstate master. We could use cloudstateio/cloudstate-tck:0.5.1.

@GratefulTony the "old" tck script had also the options to specify alternative docker images used:
https://github.com/cloudstateio/python-support/blob/v0.1.1/tck/run_tck.sh#L12

@owlet-labs
Copy link
Copy Markdown
Contributor Author

Requested changes made to TCK shell script. Also pinned TCK image version as suggested. TCK passes for me on mac and linux.

I tested on two separate macs with clean clones of the repo and wasn't able to reproduce the failed test case.

@sleipnir
Copy link
Copy Markdown

I ran on my linux machine and saw no problems.
I approve this PR

@marcellanz
Copy link
Copy Markdown
Contributor

@GratefulTony thanks again for your contribution and efforts on this PR :)

@marcellanz marcellanz merged commit df7c181 into cloudstateio:master Sep 24, 2020
@owlet-labs
Copy link
Copy Markdown
Contributor Author

Thanks everyone. Excited for the future of this project.

@pvlugter
Copy link
Copy Markdown
Member

🎉 👍

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants