Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 00:12
    Zetanova commented #5416
  • 00:01
    Zetanova synchronize #5416
  • Dec 07 21:57
    Arkatufus ready_for_review #5418
  • Dec 07 21:57
    Arkatufus synchronize #5418
  • Dec 07 21:52
    Arkatufus synchronize #5418
  • Dec 07 21:49
    Arkatufus commented #5418
  • Dec 07 21:48
    Arkatufus synchronize #5418
  • Dec 07 21:31
    Zetanova synchronize #5416
  • Dec 07 21:04
    Arkatufus commented #5418
  • Dec 07 21:03
    Arkatufus synchronize #5418
  • Dec 07 21:03
    Arkatufus converted_to_draft #5418
  • Dec 07 21:03
    Arkatufus opened #5418
  • Dec 07 20:45
    Zetanova commented #5416
  • Dec 07 18:33
    BobbyMorris commented #231
  • Dec 07 18:33
    BobbyMorris commented #231
  • Dec 07 18:26
    Aaronontheweb commented #5416
  • Dec 07 18:25
    Zetanova commented #5416
  • Dec 07 18:19
    Aaronontheweb commented #5416
  • Dec 07 18:05
    Zetanova synchronize #5416
  • Dec 07 15:07
    Zetanova commented #5416
Marc Piechura
@marcpiechura
@hhko Tell is fire and forget, I.e. your command will be finished immediately, I suppose you want to trigger some action, maybe with some response and the button should be disabled during execution ? Then I would use Ask instead of Tell
If your command supports async execution ofc
anthonyhawes
@anthonyhawes
@hhko I have used a combination of two actors with MVVM, a UI actor which is passed the instance of the view model in it's constructor and a service actor which does work in the background. View model commands use Tell to send messages to the service actor and pass the UI actor as the sender, so all responses from the service are handled by the UI actor which can safely set properties on the view model
Vasily Kirichenko
@vasily-kirichenko
@anthonyhawes why not just save the UI execution context and perform view model mutation in it?
AndreSteenbergen
@AndreSteenbergen
Andrey Leskov
@andreyleskov
Hey, everybody! Should it be ещ possible use akka cluster with DI? I remember somebody was telling that it is ok to serialize DI props with Hyperion with surrogates.
Chandra Sekhar Manginipalli
@leo12chandu
What is the default serializer akka.net uses for messages between actors? I know it uses protobuf for internal messages like cluster gossip, etc.
Is it Newtonsoft.JSON?
Chandra Sekhar Manginipalli
@leo12chandu
I saw somewhere its JSON and from Akka.net 1.5, the default is changed to hyperion.
Alex Hofer
@alexhofer
According to the docs @leo12chandu you are correct:
https://getakka.net/articles/networking/serialization.html
Chandra Sekhar Manginipalli
@leo12chandu
Thanks Alex
I found out from prior trials that Hyperion has issues when a full framework actor has to communicate with a .net core framework actor. This means with the new version of akka.net we cannot have full framework apps sending messages to core akka app it sounds like. I will try to put together a test app with akka.net 1.8 and see how it behaves.
Specially when we have Dictionaries and IEnumerables.
Alex Hofer
@alexhofer
Yes we encountered that issue too. Its either .Net Core everything or nothing. Unless you roll your own serializer
Chandra Sekhar Manginipalli
@leo12chandu
Aha. Thats a bummer that hyperion being a faster serializer than protobuf with an Achilles heal. Wouldnt it be nice if there was a way to translate the types using manifest. Did you end up using protobuf as your custom or microsoft bond or something else?
Alex Hofer
@alexhofer
Nope we just went all .Net Core. Luckily everything we needed worked in it. However we did run into a serialization issue with naming in our POCOs which caused the serializer to not deserialize properly and silently get rid of the message which was hard to track down.
Chandra Sekhar Manginipalli
@leo12chandu
ugh. ok.
Aaron Stannard
@Aaronontheweb
@leo12chandu @alexhofer technically, we do have a way of achieving x-framework with .NET core and .NET full
Chandra Sekhar Manginipalli
@leo12chandu
we do?
the knowntypes thingy?
Aaron Stannard
@Aaronontheweb
akkadotnet/akka.net#2947
bit of a hack around Hyperion itself
which is why the serialization doesn't "just work" out of the box
but it deals with the fact that .NET Core moved all of the default namespaces for primitives
Chandra Sekhar Manginipalli
@leo12chandu
@Aaronontheweb - data.Replace("System.Private.CoreLib", "%CORE%"); works because we are using json serialized string. With hyperion, we dont have a string as a type for serialized data. So, how do we even replace the mscorlib and CoreLib in the hyperion serialized data?
Chandra Sekhar Manginipalli
@leo12chandu
Or are you saying, use some other serializer like json first to serialize the whole shabang and then replace the library versions. And then serialize that whole Json'd string into using hyperion?
Vasily Kirichenko
@vasily-kirichenko
I have a Source.Queue. At some point I know that I've enqueued all messages into it and I need to wait until all of them reached the sink (Sink.Ignore). If I just wait the Task that ViaMaterialized(Sink.Ignore) returns, I wait forever because the stream is not terminated. Any ideas how to do this?
I could enqueue a special message (KillYourself) and raise exception in a Via(x => ...) added at the end of the stream, but it does not feel right.
Bartosz Sypytkowski
@Horusiath
@vasily-kirichenko ISourceQueueWithComplete has Complete method
Vasily Kirichenko
@vasily-kirichenko
yes, just tried it :) It completes the stream immediately
the messages in the queue are lost
Bartosz Sypytkowski
@Horusiath
@vasily-kirichenko yes, this is actually as desgined (as stream doesn't know which message is the last one) - you can send special message like FinishStream and then use flow.TakeWhile(msg => !(msg is FinishStream))
Vasily Kirichenko
@vasily-kirichenko
@Horusiath it does not work very well with SelectAsyncUnordered though ;)
Bartosz Sypytkowski
@Horusiath
if you cannot pass control message as part of the stream, you can always add KillSwitch and execute it manually
Vasily Kirichenko
@vasily-kirichenko
but it will kill the stream immediately?
Bartosz Sypytkowski
@Horusiath
yes, but when you tell it to
you know, there's no magic there - you cannot tell stream to stop itself once there are no more messages, because it doesn't understand how to interpret "no more". In event streams you don't have all of them given up front
you can apply some timeout and tell something like "complete this stream, if no message arrived for the last X seconds" (bascially combination of KeepAlive + TakeWhile could do that)
Vasily Kirichenko
@vasily-kirichenko
no, timeout is not an option. OK, a special message works (FSharpResult.Error(obj()) :))
one more question: does ISourceQueueWithComplete.WatchCompletionAsync().Wait() is the same as adding ToMaterialized(Sink.Ignore<...>(), Keep.Both) and Wait() on the Task that Sink.Ignore returns?
I mean, does the former completes when all the messages reached the end of stream, or when the source queue completes?
ah, got it
as I added TakeWhile(x => x.IsOk) at the end of stream, it's safe to WatchCompletionAsync.
Sam13
@Sam13
Is there any documentation about how to improve performance of SQLite persistence for journalling and snapshots? When I trace my application with JetBrains dotTrace I can see that a lot of time is burned in Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader()
Vasily Kirichenko
@vasily-kirichenko
is an idea of storing application settings via akka persistence crazy?
Vasily Kirichenko
@vasily-kirichenko

more concretely:

  1. On start we spawn a singleton persistent actor (Config).
  2. It's state contains a list of ids of persistent actors, each of which stores configuration of a single kind of "worker" (WorkerConfig).
  3. The Config actor spawns an actor for each such configuration, providing ids.
  4. Each WorkerConfig actor loads the config (via persistence) and spawns any required worker actors (via ClusterPoolRouter I think).
  5. Configuration is changed via sending messaged to Config actor.
  6. If configuration changed, Config actor stops/spawn WorkerConfig actors, pass them config changes, they stop/spawn Worker actors.

Does it look too complicated or just not a right job for Persistence (I've never used it before)? One downside of this that I can see is versioning.

Garrard Kitchen
@garrardkitchen
Is this normal behaviour? I have 1 seed and 2 worker nodes. If I restart either of the worker nodes, they register as cluster members with other nodes. However, if I restart the seed node, it does not register as member in other nodes. Surely, split-brain can't happen if there's a concensus?
fliuAtAim
@fliuAtAim
Do you guys mind not retiring your betas? Some people are still using them.
Chandra Sekhar Manginipalli
@leo12chandu
is there a way to replace substring of a hyperion serialized stream of bytes?
Chandra Sekhar Manginipalli
@leo12chandu
I am trying to replace the references to mscorlib and System.Private.CoreLib so it could work against 4.5.1 and Core but by the time it seriaizes it already is in its own encoding version of bytes hence trying to override it in Akka.Serialization.Serializer.ToBinary of my implementation