These are chat archives for akkadotnet/akka.net

19th
Aug 2015
JoeCoJabba
@joecojabba
Aug 19 2015 02:03
Hey all, For long lived/single instance dependencies (in my case neo4jclient) what is the appropriate pattern for passing that dependency to an actor? Pass the instance to the constructor or factory method for use in PreRestart? Should PostRestart be overridden as not to call PreRestart again? I'm sure i found some succinct doco/examples somewhere, but for the life of me I can't find it. Many thanks!
Bobby
@bobbychopra
Aug 19 2015 03:24
@Aaronontheweb thanks for that info
James Andrew-Smith
@james-andrewsmith
Aug 19 2015 05:09
What's the best mechanism to limit requests on an external API without hitting their request limits (per account*)?
I have multiple API credentials each with their own limit.
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 06:10
@rogeralsing I know that you're working on Wire for fun / proof of concept - but I think, it's a good moment to talk with Typesafe guys about common way of message serialization between JVM/.NET specifically for the akka needs. I know that they have hard time using default Java serializer too.
Roger Johansson
@rogeralsing
Aug 19 2015 06:19
Ok, I'll ping them :)
Emil Ingerslev
@emilingerslev
Aug 19 2015 09:19
Been testing Akka.Cluster and have tried out not using seed nodes, but instead joining the cluster. It seems that a joined node will be connected to other nodes, but will it give me problems down the line?
Christian Palmstierna
@cpx86
Aug 19 2015 10:16
@rogeralsing You may have a small PR for Wire now ;)
Roger Johansson
@rogeralsing
Aug 19 2015 10:51
:+1:
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 10:53
I hacked out a quick script to make running multinodetests a little easier (basically an easy way to run a single dll)
hopefully usefull to people.
Ryan Davis
@rdavisau
Aug 19 2015 10:54
:clap: !
Roger Johansson
@rogeralsing
Aug 19 2015 11:03
:+1: I'd like to see that in the core repo, make a PR if you want
Suhas Chatekar
@schatekar
Aug 19 2015 11:20
@GraemeBradbury Could you add an example to run a specific spec? I could never got that right
+1 for adding it in the core repo
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 11:21
@schatekar I haven't figured out how to run a specific spec yet. I think that'll need runner modification.
Suhas Chatekar
@schatekar
Aug 19 2015 11:22
ok, I might take a look at that over the weekend then
when you ported a spec from scala, did you run all the specs to check whether newly ported spec works or not?
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 11:23
yeah i would run just the dll
It's ok at the moment since there are only 3 specs but it'll get irritating fast as more are added.
Roger Johansson
@rogeralsing
Aug 19 2015 11:26
@cpx if you get bored, there are some new tasks added to the Wire repo :D
tstojecki
@tstojecki
Aug 19 2015 11:30
how do you go about troubleshooting a persistence plugin, i have wired up an eventstore in hocon, but i get nothing, no errors, no data...
akka {
        loglevel = INFO,
        loggers = [
          "Akka.Logger.Serilog.SerilogLogger, Akka.Logger.Serilog"
        ],
    persistence {
          eventstore-server {
            host = "127.0.0.1"
            tcp-port = 2113

            connection-factory = "Akka.Persistence.EventStore.DefaultConnectionFactory, Akka.Persistence.EventStore"
          }

          journal {
            eventstore {
              # qualified type name of the EventStore persistence journal actor
              class = "Akka.Persistence.EventStore.Journal.EventStoreJournal, Akka.Persistence.EventStore"

              # dispatcher used to drive journal actor
              plugin-dispatcher = "akka.actor.default-dispatcher"

              deserializer = "Akka.Persistence.EventStore.DefaultDeserializer, Akka.Persistence.EventStore"
            }
          }
    }
      }
i can see under ActorSystem.Settings.Config that the hocon settings are being picked up
is there a place where i can see what persistence plugins have been registered?
Suhas Chatekar
@schatekar
Aug 19 2015 11:32
@GraemeBradbury isn't that what the -Dmultinode.test-spec switch is supposed to do?
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 11:38
@schatekar possibly, i hadn't noticed it. :-)
But it has given me an idea let me get back to you in a bit.
Suhas Chatekar
@schatekar
Aug 19 2015 11:45
I have tried that switch, it expects fully qualified name of the spec. I entered different variations but none worked
foo bar code
@lepinay
Aug 19 2015 11:45
trying to create a TraceLogger for akka, so far I've updated my config with: loggers = ["AkkaExtensions.TraceLogger, AkkaExtensions"], referenced the assembly where needed but I still get an Akka.Configuration.ConfigurationException: Logger [AkkaExtensions.TraceLogger, AkkaExtensions] specified in config cannot be loaded: System.ArgumentException: Unknown actor producer [AkkaExtensions.TraceLogger]...is there any additional step ?
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 12:00
okay so I now understand Fake a smidgen better.
build multinodetests spec-assembly=remote
what's the opinion on the commanline arg spec-assembly?
obvious enough that it's a filter?
Suhas Chatekar
@schatekar
Aug 19 2015 12:20
this runs the tests and not builds them?
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 12:22
yeah
foo bar code
@lepinay
Aug 19 2015 12:22
ok, works if custom logger inherits from ReceiveActor, I think the doc online should explain this because the error message isn't clear...it sounds like akka can't find the type/assembly but it's actually that the type is there but doesn't inherit receiveactor or any proper base type that should be there for a custom logger
Suhas Chatekar
@schatekar
Aug 19 2015 12:23
@GraemeBradbury not sure if you would like to say build in the beginning in that case
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 12:23
@schatekar currently build multinodetests runs all the tests.
it also has the option build multinodetests spec=blah to supply the -Dmultinode.test-spec bit
Suhas Chatekar
@schatekar
Aug 19 2015 12:25
ok, I thought you are talking about the new command line you have built
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 12:27
by pointing out -Dmultinode.test-spec you brought some Fake stuff to my attention, which means that my script becomes unneeded.
i can just extend the fake script.
Suhas Chatekar
@schatekar
Aug 19 2015 12:27
right
Graeme Bradbury
@GraemeBradbury
Aug 19 2015 12:28
ok created a pull request #1265 to extend the fake script.
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 13:09
@tstojecki I think, that you registered an event store journal, but you a) didn't specified, that it should be used for a particular persistent actor 2) didn't set it as a default journal
  1. you must override JournalPluginId of the persistent actor to point to journal section in Hocon config like akka.persistence.journal.eventstore
  2. to set journal implementation as default one, you need to add section akka.persistence.journal.plugin = akka.persistence.journal.eventstore
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 13:15
and if you want to directly access journal actor, use Persistence.Instance.Apply(system).JournalFor(string.Empty) - string empty will return actor ref for default journal, while i.e. akka.persistence.journal.eventstore will return one you defined as event store
tstojecki
@tstojecki
Aug 19 2015 16:00
thanks @Horusiath , you're right, I did none of those
so do i need switch my actors to inherit from PersistentActor rather than ReceiveActor?
This message was deleted
tstojecki
@tstojecki
Aug 19 2015 16:10
also, when you say to add a section, to set as a default, you mean to add it to hocon, correct?
journal {
            plugin = "akka.persistence.journal.eventstore"
Suhas Chatekar
@schatekar
Aug 19 2015 16:30
I am trying to understand what the following piece of scala code does
val replies: Map[Address, Int] = (receiveWhile(5.seconds, messages = connectionCount * iterationCount) {
          case ref: ActorRef ⇒ ref.path.address
        }).foldLeft(Map(node(first).address -> 0, node(second).address -> 0, node(third).address -> 0)) {
          case (replyMap, address) ⇒ replyMap + (address -> (replyMap(address) + 1))
        }
Any scala experts?
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 16:44
@tstojecki yes and yes :) persistent actors need to inherit from PersistentActor (read Persistence docs). And paths I've shown are fully qualified HOCON paths
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 16:56
@schatekar receiveWhile is part of the function - it will keep receiving incoming messages as long as all of them matches specified criteria and connectionCount * iterationCount messages has been receive or 5.seconds timeout has been reached. { case ref: ActorRef ⇒ ref.path.address } is actually a very specific lambda, that is called only when input (in this case incoming message) is ActorRef - if it is, lambda returns ref.path.address, else unhandled will occur and receiveWhile will end. As result of the whole, a sequence of addresses will be return. Then we have foldLeft method, which is basically equivalent of Aggregate method from LINQ. It takes initialized Map(node(first).address -> 0, node(second).address -> 0, node(third).address -> 0)) as first element (it a dictionary with 3 key-value pairs where keys are addresses on first, second and third node and all values are 0). Then aggregation lambda { case (replyMap, address) ⇒ replyMap + (address -> (replyMap(address) + 1)) } which increments a counter for each address in map.
tl;dr it will receive up to connectionCount * iterationCount ActorRef messages for 5 seconds, and then count them by their nodes addresses giving map of addres->count as the result
Aaron Stannard
@Aaronontheweb
Aug 19 2015 17:08
@james-andrewsmith I'm working on a NuGet package for this, but I recommend a token bucket throttler
every account gets their own Token bucket
that gets periodically refreshed - like once per hour, up to some maximum number of tokens
every time the user makes an API call, you take a token out of the bucket
once the bucket is empty, the user can no longer make any API calls
does that concept make sense?
@lepinay we already have a trace logger
(although it's probably not in the docs... so my bad on that)
getting a HOCON sample...
Aaron Stannard
@Aaronontheweb
Aug 19 2015 17:13
akka {
            loggers = ["Akka.Event.TraceLogger, Akka"]
            loglevel = "ERROR"
}
@emilingerslev you can start a cluster with no needs, but you will have to perform manual joins
the seed nodes are there to help automate the formation / join process
Suhas Chatekar
@schatekar
Aug 19 2015 17:15
@Horusiath Is replyMap in the lambda of foldLeft is the map returned by the first lambda on which foldLeft is called)?
Aaron Stannard
@Aaronontheweb
Aug 19 2015 17:20
@joecojabba we cover this in detail in Petabridge's design patterns training, but the correct answer is that if your actor has a longer lifespan than the dependency it takes (like a database connection) then the actor has to be responsible for fetching / replacing that dependency
so the actor can take a factory method (Func<Neo4JClient> generator) in its constructor or call a static factory somewhere if necessary
the other option is to make it so the actor's lifespan matches the lifespan of the dependency
but you can pay a hefty price when it comes to performance and consistency if you do that - much better to have a long-lived actor that can refresh its db connection
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 17:42
@schatekar it this case replyMap is accumulated value. Since in your example immutable map is used, when your calling replyMap + (address -> (replyMap(address) + 1)) you're actually returning new map instance with updated key-value pair. This map is then moved as replyMap to the next iteration of foldLeft
(address -> (replyMap(address) + 1)) is Scala equivalent of C# new KeyValuePair<Address, int>(address, replyMap[address] + 1)
Ivan R. Perez
@irperez
Aug 19 2015 19:01
@Aaronontheweb Just a simple reminder to release the nuget package with my bug fix for the Akka.Monitor.PerformanceCounters. Thanks again!
Aaron Stannard
@Aaronontheweb
Aug 19 2015 19:07
@irperez petabridge/akka-monitoring#19
waiting on TC to give me a nice green checkmark
then I'll release it
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 19:09
did you know that Polish violinist made a song with familiar title :) https://www.youtube.com/watch?v=6Udold4Pj6s
Aaron Stannard
@Aaronontheweb
Aug 19 2015 19:10
hehe
Suhas Chatekar
@schatekar
Aug 19 2015 19:10
it is nice though
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 19:11
yes, nice indeed
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:10
@rogeralsing I had an idea I wanted to run by you
what if instead of having Sender, Self, and Parent always dynamically resolve their state using the current IActorContext
what if we just made them auto-properties and assigned those values each time they were updated?
wouldn't that eliminate the need to have to have a closure when using TPL and PipeTo?
or would we still have that issue? I was wondering if the fact that we're actually invoking a function to return the latest Sender / Self / Parent each time is part of the issue
Scala Akka is able to avoid having to do closures for a lot of this stuff because they just use fields
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:17
@GraemeBradbury I'm still working on debugging #1261 - good news is that you helped me find a bunch of bugs inside our MultiNodeTestKit
might have even fixed the deadlock issue on #1134
Roger Johansson
@rogeralsing
Aug 19 2015 20:33
@Aaronontheweb no, 1) they would mutate during the time the tpl task runs, and sender would not be available as an implicit value for Tell. you would have to manually supply it
that last art was 2) :D
part
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:34
hmm... yeah, that'd be true even if Sender was just a dumb field, wouldn't it?
Roger Johansson
@rogeralsing
Aug 19 2015 20:34
yepp
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:34
ah... ok
I think that's a JVM / CLR difference then
looks to me like the JVM uses the address of the object being referenced
whereas the CLR looks for the address of a pointer to an object
i.e. the field's pointer
Roger Johansson
@rogeralsing
Aug 19 2015 20:35
I think that might have to do with "val" in scala. not sure
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:36
got it
ok well that's good to know
I found a bug in the TestConductor in the multi-node testkit that your Roslyn analyzer also found
caused tests that use throttling to crash
Roger Johansson
@rogeralsing
Aug 19 2015 20:36
oh
tlotter
@tlotter
Aug 19 2015 20:37
Hi, what is the best way to communicate with a client application (Unity3D .Net 3.5) via a small protocol (ProtoBuf) with an ActorSystem? I read about Akka I/O and was wondering if this is the right way. If so, is there a client library for .Net 3.5 ?
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:37
related to this
Roger Johansson
@rogeralsing
Aug 19 2015 20:37
I should probably extend that to look for class member mutations too
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:37
closure bug
@rogeralsing btw, are we actually using akka.actor.ask-timeoutin the C# code anywhere? I want to use that setting to kill off some potential sources of deadlock in the multi-node testkit
I can't find where we're consuming that value
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 20:39
@Aaronontheweb if you use Ask without explicit timeout then you're using this setting
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:39
@Horusiath good, that's what I wanted to know - but where in C# do we actually load this setting? Was trying to find a place where we load the ask-timeout key from a Config object
@tlotter at the moment, no - we do not have a general client for Akka.IO just yet
it's D-I-Y
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 20:42
@Aaronontheweb private Futures.Ask static extension method
timeout = timeout ?? provider.Settings.AskTimeout;
Aaron Stannard
@Aaronontheweb
Aug 19 2015 20:42
ah, got it!
thanks
Suhas Chatekar
@schatekar
Aug 19 2015 20:45
What is C# equivalent of actor ! BroadCast(PoisonPill) ?
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 20:45
actor.Tell(new Broadcast(PoisonPill.Instance))
Suhas Chatekar
@schatekar
Aug 19 2015 20:45
tks
Suhas Chatekar
@schatekar
Aug 19 2015 21:01

I am trying to port this line

system.eventStream.publish(Mute(EventFilter.warning(pattern = ".*received dead letter from.*")))

How do I create a warning event filter in C#?

Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:05
yeah, we don't have good documentation on this currently
here's how you can do it though
EventFilter.Warning(pattern: new Regex(@".*received dead letter from.*")).Mute();
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 21:16
what is the state of Dependency Injection combined with remote deployment scenarios? Any examples?
cause right now I'm trying that one and I've got node dissassociation (with some null ref exception in the middle)
Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:16
what is the state of Dependency Injection combined with remote deployment scenarios? Any examples?
not supported
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 21:17
is that something, we should put on the issue tracker?
Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:18
it's something we've discussed with @rkuhn as something to consider for both Akkas in the future
definitely not a "hack this up over a weekend" sort of feature, as it has the potential to break location transparency
since it requires DI containers on both ends of the wire to have the same dependencies
errr, the appropriate configuration
so yeah, let's discuss it
could you create a discussion issue for it?
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 21:19
yes
Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:19
thanks bud :+1:
I think it'd be a kick ass feature - since as you've discovered right now, the status quo breaks location transparency quite easily too :p
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 21:25
yes, but you could say that requirement to have the libraries to share actor definitions across the nodes also breaks location transparency
Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:25
yeah, that's true I suppose
same of message types
although I guess the idea is that if you're going to have location transparency, you'd assume that you'd have 100% of the messages and actors you want to use defined locally too
Bartosz Sypytkowski
@Horusiath
Aug 19 2015 21:27
personaly I don't feel need for DI in akka, but tomorrow I'll try to evangelize my team to use it, and probably it will be on the wishlist :P
Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:27
and in order to make that work over the network, you'd expect that code to be deployed and ready there
@Horusiath I know that feel bro
during a bunch of our consulting calls we're pitching customers on ditching SQL Server and ACID for certain workloads
and even while SQL Server is literally the single point of failure that is causing massive scaling problems for some of these guys
Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:32
they're still really skeptical of the alternatives :p
point being: I'm with you, I'd probably not use DI with actors
but it's hard asking people to throw away ALL of the tools they're used to using at once, so I understand why there's resistance lol :p
Aaron Stannard
@Aaronontheweb
Aug 19 2015 21:52
@GraemeBradbury yep, think I've figured it out - found some issues with Throttling and Blackhole still. Looks like we basically didn't implement that at the time we wrote the multi-node testkit, because none of those transport adapters were implemented yet
looks like I'll have my own PR in for this - have some multinode testkit meta-tests I need to port :p
Suhas Chatekar
@schatekar
Aug 19 2015 22:02
Folks, does the following command work for you
build multinodetests spec-assembly=remote
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:03
not yet - I have to pull in #1265 for that
Suhas Chatekar
@schatekar
Aug 19 2015 22:03
I get following output when I run the above command
Checking for updates from https://www.nuget.org/api/v2/.
Currently running NuGet.exe 2.8.6.
NuGet.exe is up to date.
Package "FAKE" is already installed.
Package "xunit.runner.console" is already installed.
Package "nunit.runners" is already installed.
Assembly version: 1.0.5
Nuget version; 1.0.5

Building project with version: LocalBuild
Shortened DependencyGraph for Target MultiNodeTests:
<== MultiNodeTests

The resulting target order is:
 - MultiNodeTests
Starting Target: MultiNodeTests
Using MultiNodeTestRunner: e:\Source\akka.net\src\core\Akka.MultiNodeTestRunner\bin\Debug\Akka.MultiNodeTestRunner.exe
Finished Target: MultiNodeTests

---------------------------------------------------------------------
Build Time Report
---------------------------------------------------------------------
Target           Duration
------           --------
MultiNodeTests   00:00:00.4902232
Total:           00:00:00.5702187
Status:          Ok
---------------------------------------------------------------------
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:03
hmmm... that's odd
let me double check the FAKE file
James Andrew-Smith
@james-andrewsmith
Aug 19 2015 22:08
@Aaronontheweb Thank you for the example, that makes a lot of sense. I'm new to Akka.net but it seems like the tools are there to build this pattern with an actor per API account with a scheduler attached. Thank you for taking the time to answer!
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:11
@james-andrewsmith you're welcome! please feel free to ask questions here any time
we try to make sure that all of them get answered, and if that doesn't work lots of people actively answer akka.net-tagged questions on StackOverflow too
to answer your question @schatekar
this is suspicious :p
Shortened DependencyGraph for Target MultiNodeTests:
<== MultiNodeTests
ah wait
I stand corrected
that's technically correct with what's in the FAKE file today
but a big goof on my part - reason why it's probably not running for you right now is that the MultiNodeTests step does technically depend on BuildRelease
otherwise it won't find any of the test assemblies inside a bin/Release folder
so could you send a PR that modifies the FAKE script to do the following:
// build dependencies
"Clean" ==> "AssemblyInfo" ==> "RestorePackages" ==> "Build" ==> "CopyOutput" ==> "BuildRelease"

// tests dependencies
"CleanTests" ==> "RunTests"
"BuildRelease" ==> "CleanTests" ==> "MultiNodeTests"
the last line is the one we need to add
the others are already inside the FAKE file
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:16
could you add that and see if this resolves your issue?
and if so, send that in as a PR to fix the FAKE script :shipit:
Suhas Chatekar
@schatekar
Aug 19 2015 22:19
sure
are dependencies going from right to left?
never used FAKE before
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:20
"MultiNodeTests" depends on the things to its left
yeah, it was trippy for me too at first :p
Suhas Chatekar
@schatekar
Aug 19 2015 22:20
:)
is there a target to only build C# projects
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:23
unfortunately no :(
Suhas Chatekar
@schatekar
Aug 19 2015 22:23
f# projects are not building for me
I would let this run pass, but I am sure it would fail owing to f# issues on my box
I would look into that tomorrow
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:24
for debug purposes, why don't you go ahead and remove them from your default build target for now?
get your code to work and then you can worry about the setup :p
I'm still dealing with issues related to my Windows 10 and VS 2015 upgrade
Suhas Chatekar
@schatekar
Aug 19 2015 22:25
ok
the build step builds Akka.sln how do I tell it to skip fsproj projects?
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:29
inside Visual Studio you can modify which projects build on a particular build target
I think this is a change you'd be making at the solution level
blob
Solution --> Properties --> Configuration
and you can turn off the individual FSharp projects
should be about 6 of them
Suhas Chatekar
@schatekar
Aug 19 2015 22:30
got it
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:30
you'd need to let those projects build again when you submit a PR :p
but for the time being, you can temporarily leave it that way while you work on your stuff - rather than have to fight with VS and the F# installer :p
Suhas Chatekar
@schatekar
Aug 19 2015 22:40
ok, that worked, and your fix works too
but the test I ported is failing so i would not submit the PR just yet
or if you like, I can submit the PR only for the change to fake file
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:41
yep, sounds like a good idea
send in one PR for the FAKE change
and IMHO, may as well put in another PR for the test - even though it's failing
that way I can look at it
Suhas Chatekar
@schatekar
Aug 19 2015 22:41
ok
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:41
Graeme's PR is failing because of a bunch of bugs inside the MultiNodeTestKit, which I'm working on now - yours might also have the same issue
Suhas Chatekar
@schatekar
Aug 19 2015 22:42
ok if I give you both PRs tomorrow
Aaron Stannard
@Aaronontheweb
Aug 19 2015 22:42
:thumbsup:
Suhas Chatekar
@schatekar
Aug 19 2015 22:42
bit tired at the moment, must go to sleep