These are chat archives for akkadotnet/akka.net

20th
Apr 2015
Aaron Stannard
@Aaronontheweb
Apr 20 2015 00:34
@rogeralsing @nvivo yeah, I used the PriorityMailbox inside our HTTP load testing tool that I wrote
let me pull it up
@nvivo just checked out your stashing / behavior switching docs... dude... you did AN AMAZING job
:thumbsup:
Aaron Stannard
@Aaronontheweb
Apr 20 2015 00:54
internet died on me - here's the priority mailbox implementation we used
public class ReplayMailbox : UnboundedPriorityMailbox
    {
        protected override int PriorityGenerator(object message)
        {
            if (message is HttpResponseMessage) return 1;
            if (!(message is LoggedHttpRequest)) return 2;
            return 3;
        }
    }
this was for a special piece of load-testing software that we used to find a bug inside Cassandra's API
that kept crashing a new version of our software in production
we would deploy a new version of our app which would log HTTP requests over the network to a central server, all powered by Akka.NET
that server would batch those requests into files, with fully serialized HTTP requests
and then we would play back that production traffic on top of our development server. Our normal traffic simulation and load testing tools couldn't capture the variety of stuff that actually came up real life in order to recreate this bug, so we did we people who work on multiplayer video games have done for years - use "saved games" to expose bugs :p
this mailbox was used by the replay agent to prioritize responses from our development server ahead of the recorded messages we were playing back
because the HTTP request / response was received by the same actor (probably should have designed that differnetly)
but the PriorityMailbox made this a lot more responsive and easier to run
Natan Vivo
@nvivo
Apr 20 2015 01:44
Thanks. Writing a lot helps sometimes... =)
anyone else feel this way? ;)
Bartosz Sypytkowski
@Horusiath
Apr 20 2015 18:36
don't you guys think, that some kind of Trello would be good for us?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 18:37
@Horusiath we should probably make better use of the milestones system on Github more frequently
and publish our roadmap and highlight specific areas for contribution
(once we've cleared up what that looks like, but it sounds like we're close)
Raymen Scholten
@raymens
Apr 20 2015 18:38
Would be great for us users to know when the next bugfix release is planned etc.
Aaron Stannard
@Aaronontheweb
Apr 20 2015 18:38
you know what - we have one planned for this week. Screw it - going to make a milestone now.
good idea lol
Joshua Benjamin
@annymsMthd
Apr 20 2015 18:38
\o/
Raymen Scholten
@raymens
Apr 20 2015 18:39
lol, nice :)
Bartosz Sypytkowski
@Horusiath
Apr 20 2015 18:39
this is separate subject, I mean something for tracking and locking some tasks (we could discuss it on next meeting)
Aaron Stannard
@Aaronontheweb
Apr 20 2015 18:40
ah
yeah, meeting on Wednesday this week
can bring it up then
project's definitely getting big enough where we need to start organizing things a little bit more so new contributors can start getting involved right away
we're a very fast-moving project at the moment :p
Raymen Scholten
@raymens
Apr 20 2015 18:43
the F# scheduler issue should be in it too right?
Bartosz Sypytkowski
@Horusiath
Apr 20 2015 18:43
yes, it's already merged
Matt Schwartz
@mschwa
Apr 20 2015 20:27
@Aaronontheweb Hey Aaron, caught your talk at .Net fringe. Very inspiring! I'd like to get involved with Akka. Forked and cloned. Currently running through the example projects. Any other advice for learning?
Bartosz Sypytkowski
@Horusiath
Apr 20 2015 20:29
@mschwa have you tried bootcamp? http://learnakka.net/
Matt Schwartz
@mschwa
Apr 20 2015 20:31
@Aaronontheweb Not yet...I will go there next. Thanks!
Natan Vivo
@nvivo
Apr 20 2015 20:58
are the .net fringe videos online already?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:35
hey @mschwa - glad you had a chance to see my talk! http://learnakka.net is definitely the best place to get started. After that you can try taking a look at some of our samples: https://github.com/petabridge/akkadotnet-code-samples
@nvivo not yet - I'm 99% sure my zipper was down the entire time I was onstage
so I'm pretty eager to either confirm or deny that
Natan Vivo
@nvivo
Apr 20 2015 21:36
hahahaha
happens to the best
saw that the dotnetrocks show will be released on 5/5
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:37
yep, after //BUILD they said
my interview on Hanselminutes goes live on 4/23
and I have a Channel 9 one going live soonish also
Akka.NET press tour :p
Natan Vivo
@nvivo
Apr 20 2015 21:39
cool. will listen to them
I'm currently seeing a F# akka.net video on youtube
have zero knowledge of F#
web talk by a microsoft guy
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:40
he did a good job
caught a bit of that when he did it live a few weeks back
just spent $5 on a logo design proposal for Helios
we'll see how that goes :p
should be really easy to do - Helios was the god of the sun after all
Sol Invictus
Natan Vivo
@nvivo
Apr 20 2015 21:45
that's how we call it here in brazil
well. except for the "invictus" part
=)
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:45
Sol Invictus was the full Roman / Latin name for the god, although most just called him "Sol"
Natan Vivo
@nvivo
Apr 20 2015 21:46
funny names
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:46
Roman names sound pretty bad ass
Hadrian, Trajan, Vespasian, Domitian, Augustus, Maximus, Aurellius
I use their mythology a lot for names on bluesky projects
before I teamed up with Roger on Pigeon (now Akka.NET) I had my own Akka-port called Hyperion
Natan Vivo
@nvivo
Apr 20 2015 21:47
Maximus must be a terrible name to live up to
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:47
(father of Helios)
Natan Vivo
@nvivo
Apr 20 2015 21:47
everyone just expects that from you
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:48
yep
Maximus is definitely a lot of chew off
Natan Vivo
@nvivo
Apr 20 2015 21:49
haha well, much metter than his brother Minimus
Aaron Stannard
@Aaronontheweb
Apr 20 2015 21:49
yeah, screw that guy
Natan Vivo
@nvivo
Apr 20 2015 21:49
terrible with the girls
Natan Vivo
@nvivo
Apr 20 2015 21:58
a question about the mailbox stuff. what is the difference between "RequiresMessageQueue" and "WithMailbox"? seems to me the former is like a hint, but not guaranteed
one thing I'm finding confusing in the original akka docs is that you go to the "Mailbox" documentation, and the first thing it says is "you can require a certain message queue for an actor"....
Natan Vivo
@nvivo
Apr 20 2015 22:03
so, should the user see those terms as interchangeable? or they have different purposes?
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:05
@Aaronontheweb #870 has been updated to support the MultiNode tests
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:45
@annymsMthd nice! could you try ./build.cmd MultiNodeTests and tell me how it goes on your local system?
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:45
It runs. There seems to be a few test failures though
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:46
the first test (Consistent Hashing Group) should fail
others should pass
have a logged issue for that first test
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:46
I'll look at which ones failed
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:46
kk
the runner should print out a final output at the end
mind pasting that in here?
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:49
[RUNNER][10:44 PM]: Test run completed in [00:05:12.5522719] with 6/8 specs passed.
[RUNNER][10:44 PM]: Results for Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingRouterMultiNode.ClusterConsistentHashingRouterSpecs
[RUNNER][10:44 PM]: Start time: 4/20/2015 10:39:08 PM
[RUNNER][10:44 PM]: --> Node 1: PASS [00:00:32.6416209 elapsed]
[RUNNER][10:44 PM]: --> Node 2: PASS [00:00:32.6416209 elapsed]
[RUNNER][10:44 PM]: --> Node 3: PASS [00:00:32.6416209 elapsed]
[RUNNER][10:44 PM]: End time: 4/20/2015 10:39:44 PM
[RUNNER][10:44 PM]: FINAL RESULT: PASS after 00:00:35.7277198.
[RUNNER][10:44 PM]: Results for Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingGroupMultiNode.AClusterRouterWithConsistentHashingGroupMustSendToSameDestinationsFromDifferentNodes
[RUNNER][10:44 PM]: Start time: 4/20/2015 10:39:44 PM
[RUNNER][10:44 PM]: --> Node 1: FAIL [00:00:41.1356451 elapsed]
[RUNNER][10:44 PM]: --> Node 2: FAIL [00:00:41.1366446 elapsed]
[RUNNER][10:44 PM]: --> Node 3: FAIL [00:00:41.1306428 elapsed]
[RUNNER][10:44 PM]: End time: 4/20/2015 10:40:28 PM
[RUNNER][10:44 PM]: FINAL RESULT: FAIL after 00:00:44.1557213.
[RUNNER][10:44 PM]: Failure messages by Node
[RUNNER][10:44 PM]: <----------- BEGIN NODE 1 ----------->
[RUNNER][10:44 PM]: --> Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingGroupMultiNode1.AClusterRouterWithConsistentHashingGroupMustSendToSameDestinationsFromDifferentNodes FAIL
[RUNNER][10:44 PM]: --> Message: Failed: Timeout 00:00:15 while waiting for a message of type Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingGroupSpecConfig+Collected
[RUNNER][10:44 PM]: --> StackTrace: at Xunit.Assert.True(Nullable1 condition, String userMessage) in c:\TeamCity\buildAgent\work\74856245f07a90f0\src\xunit.assert\Asserts\BooleanAsserts.cs:line 90 [RUNNER][10:44 PM]: --> Type: Xunit.Sdk.TrueException [RUNNER][10:44 PM]: <----------- END NODE 1 -----------> [RUNNER][10:44 PM]: <----------- BEGIN NODE 2 -----------> [RUNNER][10:44 PM]: --> Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingGroupMultiNode2.AClusterRouterWithConsistentHashingGroupMustSendToSameDestinationsFromDifferentNodes FAIL [RUNNER][10:44 PM]: --> Message: Failed: Timeout 00:00:15 while waiting for a message of type Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingGroupSpecConfig+Collected [RUNNER][10:44 PM]: --> Type: Xunit.Sdk.TrueException [RUNNER][10:44 PM]: --> StackTrace: at Xunit.Assert.True(Nullable1 condition, String userMessage) in c:\TeamCity\buildAgent\work\74856245f07a90f0\src\xunit.assert\Asserts\BooleanAsserts.cs:line 90
[RUNNER][10:44 PM]: <----------- END NODE 2 ----------->
[RUNNER][10:44 PM]: <----------- BEGIN NODE 3 ----------->
[RUNNER][10:44 PM]: --> Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingGroupMultiNode3.AClusterRouterWithConsistentHashingGroupMustSendToSameDestinationsFromDifferentNodes FAIL
[RUNNER][10:44 PM]: --> Type: Xunit.Sdk.TrueException
[RUNNER][10:44 PM]: --> Message: Failed: Timeout 00:00:15 while waiting for a message of type Akka.Cluster.Tests.MultiNode.Routing.ClusterConsistentHashingGroupSpecConfig+Collected
[RUNNER][10:44 PM]: --> StackTrace: at Xunit.Assert.True(Nullable`1 condition, String userMessage) in c:\TeamCity\buildAgent\work\74856245f07a90f0\src\xunit.assert\Asserts\BooleanAsserts.cs:line 90
[RUNNER][10:44 PM]: <----------- END NODE 3 ----------->
[RUNNER][10:44 PM]: Results for Akka.Cluster.Tests.MultiNode.LeaderLeavingSpecConfig+ALeaderLeavingMultiNode.ALeaderThatIsLeavingMustBeMovedToLeavingThenExitingThenRemovedThenBeShutDownAndThenANewLeaderShouldBeEle[RUNNER][10:44 PM]: Start time: 4/20/2015 10:40:28 PM
[RUNNER][10:44 PM]: --> Node 1: PASS [00:00:28.3450901 elapsed]
[RUNNER][10:44 PM]: --> Node 2: PASS [00:00:28.3450901 elapsed]
[RUNNER][10:44 PM]: --> Node 3: PASS [00:00:28.3440894 elapsed]
[RUNNER][10:44 PM]: End time: 4/20/2015 10:41:00 PM
[RUNNER][10:44 PM]: FINAL RESULT: PASS after 00:00:31.3631676.
[RUNNER][10:44 PM]: Results for Akka.Cluster.Tests.MultiNode.JoinSeedNodeMultiNode.
that one?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:49
yeah
that looks right
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:52
looks like the paste didn't get everything. let me make a file and post it
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:53
Akka.Cluster.Tests.MultiNode.ClusterDeathWatchMultiNode1.ClusterDeathWatchSpecTests FAIL :(
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:54
yeah
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:54
that one should not be failing
wonder if one of the asserts / expect messages stuff got affected by the XUnit 2 upgrade
would you mind re-running it?
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:54
yup
ill check it out
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:55
if you get the same result consistently then that would indicate an upgrade issue (or some other persistent issue)
I haven't personally seen that test fail in a long time though - some of the others sometimes have a persistent issue usually brought on by XUnit crashing
err, temporary issue
Joshua Benjamin
@annymsMthd
Apr 20 2015 22:57
Rgr. I'll look for that and XUnit crashes. I haven't seen any XUnit crashes in awhile though.
Aaron Stannard
@Aaronontheweb
Apr 20 2015 22:57
well that's a good thing then
our build server's been running into issues with XUnit 1.9.2 consistently
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:03
Any plans to get these running on the build agent?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:16
yes - we've been holding off a bit until we get closer to releasing Akka.Cluster because it effectively doubles the build time
Is this Orlrans?
*orleans
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:18
@nvivo nah, it's something bigger than that
it's the next generation of Azure PaaS
true PaaS capabilities
Natan Vivo
@nvivo
Apr 20 2015 23:18
It says "actor model"
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:19
yeah, that's not Orleans either :p
Natan Vivo
@nvivo
Apr 20 2015 23:19
Thought was an azure product based on orleans
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:19
might be derived from it though
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:19
I'm looking forward to containers
Natan Vivo
@nvivo
Apr 20 2015 23:19
Yep
Containers are the future
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:19
well since it's public now, I guess I can comment on it - all of the core contributors have been under NDA on it
the actor model they're exposing is a programming framework for being able to leverage these capabilities on the Service Fabric runtime
because the low-level APIs for using it are extremely complicated and unfriendly
I have friends on the SQL Azure team who used themd
so this stuff aligns really well with Akka.NET too
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:21
So this is probably something separate from windows containers and nano server?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:23
not sure to be honest
I don't know the rest of the details
Natan Vivo
@nvivo
Apr 20 2015 23:24
Honestly, MS is currently a mess compared to what they were
But I guess this is for the best
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:24
only what's in that article
MS is in a "throw it on the wall and see what sticks" phase
the kindness they've done us is OSS the CLR and make it so the .NET ecosystem is no longer solely dependent on them
Natan Vivo
@nvivo
Apr 20 2015 23:25
I like thay are trying new stuff and open sourcing, but at the same time they have 6 solutions for every problem and none of them is fully baked
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:25
yep
MSFT has always had that problem
they go out and make it so you can run Hadoop on Azure
then simultaneously roll out their own propreitary version of MapReduce
and then also kill off Dryad (another proprietary M/R implementation they'd been doing for years out of MSR)
the criticism I would level at Microsoft is to knock if off with the "not invented here" shit
because frankly they haven't been that good at it on a lot of fronts
i.e. Metro UI
Natan Vivo
@nvivo
Apr 20 2015 23:27
Agree
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:28
Agreed. I think the open sourcing of .Net and their focus on things like nuget are a big win.
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:28
yep, I agree with that
focus on supporting the ecosystem - not trampling over it with half-baked shit
the talks I really wanted to see at .NET Fringe were the Nancy talks
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:28
I'm using ansible to setup windows servers and I have to say that powershell has come a long way.
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:29
because I'd always been interested to see how web frameworks developed outside MSFT work
I was pretty blown away by both Nancy and ScriptCS
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:29
We use Nancy
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:29
how do you like it?
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:29
Love it
Natan Vivo
@nvivo
Apr 20 2015 23:29
I dont like powershell
Joshua Benjamin
@annymsMthd
Apr 20 2015 23:31
We actually have Nancy frontend servers for our Akka cluster:)
Natan Vivo
@nvivo
Apr 20 2015 23:31
Aaron, I'm on my phone so it's hard to type again... But can you take a look at my question about the mailbox vs msg queue above?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:32
@nvivo oh right, saw that earlier
@nvivo big difference is that the message queue is a required implementation of the mailbox
so you can say "I want a PriorityMailbox"
(that's what WithMailbox is for)
but if your actor uses a stash then is also decorates itself with a IRequiresDequeSemantics interface
which means that its PriorityMailbox implementation must support a double ended queue for stashing
so both values get respected
one is just a lower-level abstraction than the other
the message queue requirement gets fulfilled by the mailbox when it's created
Natan Vivo
@nvivo
Apr 20 2015 23:34
Hmmm
Ok
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:35
the mailbox wraps the message queue
in other words
a ConcurrentQueueMailbox can support bounded, unbounded message queues - and those message queues can also have deque semantics for stashing
Natan Vivo
@nvivo
Apr 20 2015 23:36
So, I think it's better to explain first how to change the mailbox, and then explain the message queue in another section
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:36
agree
Natan Vivo
@nvivo
Apr 20 2015 23:37
Another thing is that WithMailbox takes a string. Is that the fully qualified name of thr mailbox? In akka therr are some keywords, but I didn't find them on akka.net
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:38
yep, it can be
oh wait
no it can't
you have to define your mailbox types inside your config
just like dispatchers
Natan Vivo
@nvivo
Apr 20 2015 23:38
Directly in the root right?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:43
sorry, my internet keeps dying
akka {  
            stdout-loglevel = ERROR
            loglevel = DEBUG
            actor {

                debug {  
                  receive = on
                  autoreceive = on
                  lifecycle = on
                  event-stream = on
                  unhandled = on
                }       
            }

          }

          replay-mailbox {
             mailbox-type: "TrafficSimulator.PlaybackApp.Actors.ReplayMailbox,TrafficSimulator.PlaybackApp"
          }
_replyAgents =
                Context.ActorOf(
                    Props.Create(() => new ReplayActor(new ReplaySettings() {Host = _httpAuthority}, Self))
                        .WithRouter(new RoundRobinPool(2, new DefaultResizer(2, 15))).WithMailbox("replay-mailbox"));
like that
you can declare it anywhere technically
but yeah, since this isn't an "akka" setting you typically make it in a user-defined root element
that's the correct convention IMHO
Natan Vivo
@nvivo
Apr 20 2015 23:49
Right. So, there is no way to set that in the actor code? Something like an attribute or interface?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:49
the mailbox?
Natan Vivo
@nvivo
Apr 20 2015 23:49
Yes
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:49
no, that has to be declared as part of Props
the message queue the mailbox uses is determined by your actor code - the interfaces
99% of the time that's a detail that comes up when you use stashing (this happens under the hood, unknown to the user)
Natan Vivo
@nvivo
Apr 20 2015 23:51
I mean the type. Is there a way to say something like context.ActorOf<Foo>().WithMailbox<MyMailbox>()?
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:51
ah, no
it has to be registered with the systems
errr, ActorSystem
because it maintains a list of all registered mailbox types
Natan Vivo
@nvivo
Apr 20 2015 23:51
Ok. I think I got it
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:52
and there are other configuration options that have to be passed in - some of that might be legacy stuff as a result of the coupling between dispatchers and mailboxes on the JVM
@HCanber and @rogeralsing could tell you - I've not worked with it much myself
Natan Vivo
@nvivo
Apr 20 2015 23:53
So, there is no mailbox registered in the default config currently, as there is only one mailbox and the priority one must be implemented by the user
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:53
there's a default mailbox implementation - unbounded concurrent queue
Natan Vivo
@nvivo
Apr 20 2015 23:53
There is nothing to document about these names then
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:53
but yeah, no other ones to speak of
there's a bunch of stuff in JVM akka for shared mailboxes
I don't think we'll ever implement those
Natan Vivo
@nvivo
Apr 20 2015 23:54
Yep
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:54
routers are the correct tool for that job
Natan Vivo
@nvivo
Apr 20 2015 23:54
Too much baggage
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:54
agree
don't port stuff that's deprecated, right? ;)
Natan Vivo
@nvivo
Apr 20 2015 23:55
:-) Ok, let's see what I can do here. Maybe tomorrow I'll have more questions
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:55
sounds good bud
keep up the good work
Natan Vivo
@nvivo
Apr 20 2015 23:55
Thanks for the explanations
Aaron Stannard
@Aaronontheweb
Apr 20 2015 23:55
you're welcome - I hope they helped :p