akka.net
akka.net copied to clipboard
Implement Akka.Remote.Artery transport
This is a very large implementation project, it will be split into separate port/update projects, and each project has to work/compatible with previous Akka.NET implementation. We need to make sure that all projects still work with current test implementation with no/very little modification.
Current worklist:
-
[ ] Port Akka.Remote.Artery:
- [ ] ~~Port
Aeron:~~- [ ] ~~Port
AeronSink~~ - [ ] ~~Port
AeronSource~~ - [ ] ~~Port
ArteryAeronUdpTransport~~ - [ ] Port
TaskRunner
- [ ] ~~Port
- [ ] Port
Compress- [ ] Port
CompressionProtocol - [ ] Port
CompressionTable - [ ] Port
DecompressionTable - [ ] Port
TopHeavyHitters
- [ ] Port
- [ ] Port
Tcp- [ ] Port
ArteryTcpTransport - [ ] Port
SslEngineProvider - [ ] Port
TcpFraming
- [ ] Port
- [x] Port
ArterySettings - [ ] Port
ArteryTransport - [ ] Port
Association - [ ] Port
Codecs - [ ] Port
Control - [ ] Port
EnvelopeBufferPool - [ ] Port
FixedSizePartitionHub - [ ] Port
Handshake - [ ] Port
ImmutableLongMap - [ ] Port
InboundEnvelope - [ ] Port
InboundQuarantineCheck - [ ] Port
LruBoundedCache - [ ] Port
MessageDispatcher - [ ] Port
ObjectPool - [ ] Port
OutboundEnvelope - [ ] Port
QuarantinedEvent - [ ] Port
RemoteInstrument - [ ] Port
RemotingFlightRecorder - [ ] Port
RestartCounter - [ ] Port
SendQueue - [ ] Port
SystemMessageDelivery - [ ] Port
TestStage
- [ ] ~~Port
-
[ ] Modernize/update current code to support
Artery:- [x] Port/upgrade Akka.Streams.Attributes
- [ ] New Attributes internal list is reversed from previous versions
- [ ] Port/upgrade Akka.Streams.ActorMaterializer
- [x] Port/upgrade Akka.Streams.Attributes
Based on our conversation in chat, not doing Aeron ports - correct? @Arkatufus
Correct, since there are no such thing as a proper port of Aeron in C#. Unless we want to port that over too. not.
An issue raised by @to11mtm, will have to keep an eye on TCS creation to avoid deadlocks. https://devblogs.microsoft.com/premier-developer/the-danger-of-taskcompletionsourcet-class/
@Arkatufus adding an issue for this to the current project.
Here's what I really want out of this:
- Take all of the items on your checklist, convert them into individual Github issues.
- For each Github issue, link to the other "critical dependency" issues that have to be completed first. I.E. if we have to add
CompressionTablebefore can we addCompressionProtocol, we should document that in theCompressionProtocolgithub issue and link to theCompressionTableimplementation issue. - Each issue should also link to a bit of documentation describing how to contribute towards Artery - i.e. which branch to use, porting notes from Scala, etc. We don't want this stuff going into
devjust yet. - Arrange all of this into a project on Github, so we can have visibility into the progress of how far along the port is.
Think you can do this next week or this week?
Current port status
ArteryTransport.scala
One of the main class of artery, this file touches almost everything in the akka.remote.artery namespace. Some of the Ported Content have already been ported (marked with a check), while others are still in the stub method form.
Note that while there is an Association.scala file, the AssociationState class belongs to
this file.
Dependency
Classes
Artery
- akka.remote.artery.ArterySettings
- akka.remote.artery.Association
- akka.remote.artery.AssociationRegistry --> akka/remote/artery/Association.scala
- akka.remote.artery.Decoder --> akka/remote/artery/Codecs.scala
- akka.remote.artery.Encoder --> akka/remote/artery/Codecs.scala
- akka.remote.artery.EnvelopeBuffer --> akka/remote/artery/EnvelopeBufferPool.scala
- akka.remote.artery.EnvelopeBufferPool
- akka.remote.artery.FlushOnShutdown
- akka.remote.artery.MessageDispatcher
- akka.remote.artery.Quarantined --> akka/remote/artery/Control.scala
- akka.remote.artery.RemotingFlightRecorder (WILL NOT PORT)
- akka.remote.artery.RestartCounter
- akka.remote.artery.ReusableInboundEnvelope --> akka/remote/artery/InboundEnvelope.scala
- akka.remote.artery.ReusableOutboundEnvelope --> akka/remote/artery/OutboundEnvelope.scala
- akka.remote.artery.SharedTestState --> akka/remote/artery/TestStage.scala
- akka.remote.artery.compress.CompressionProtocol.ActorRefCompressionAdvertisement
- akka.remote.artery.compress.CompressionProtocol.ActorRefCompressionAdvertisementAck
- akka.remote.artery.compress.CompressionProtocol.ClassManifestCompressionAdvertisement
- akka.remote.artery.compress.CompressionProtocol.ClassManifestCompressionAdvertisementAck
- akka.remote.artery.compress.CompressionTable
- akka.remote.artery.compress.InboundCompressionsImpl
- akka.remote.artery.compress.NoInboundCompressions
Other Akka Namespace
- akka.stream.Materializer --> akka/stream/Materializer.scala
- akka.stream.SharedKillSwitch
- akka.stream.SystemMaterializer --> akka/stream/SystemMaterializer.scala
Traits
- akka.remote.artery.ControlMessage --> akka/remote/artery/Control.scala
- akka.remote.artery.Decoder.InboundCompressionAccess --> akka/remote/artery/Codecs.scala
- akka.remote.artery.Encoder.OutboundCompressionAccess --> akka/remote/artery/Codecs.scala
- akka.remote.artery.InboundControlJunction.ControlMessageObserver --> akka/remote/artery/Control.scala
- akka.remote.artery.InboundControlJunction.ControlMessageSubject --> akka/remote/artery/Control.scala
- akka.remote.artery.InboundEnvelope
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.OutboundEnvelope
- akka.remote.artery.compress.InboundCompressions
External Dependency
- an update to Akka.Actor.IScheduler to have a ScheduleRepeatedly method that takes (TimeSpan initialDelay, TimeSpan interval, Action runable) as arguments
Ported Content
- [x] trait akka.remote.artery.InboundContext
- [x] trait akka.remote.artery.OutboundContext
- [x] class akka.remote.artery.AssociationState
- [x] case class akka.remote.artery.AssociationState.QuarantinedTimestamp
- [x] case class akka.remote.artery.AssociationState.UniqueRemoteAddressValue
- [x] case class akka.remote.artery.AssociationState.UidKnown
- [x] case class akka.remote.artery.AssociationState.UidUnknown
- [x] case class akka.remote.artery.AssociationState.UidQuarantined
- [x] trait akka.remote.artery.AssociationState.UniqueRemoteAddressState
- [ ] class akka.remote.artery.ArteryTransport (partial port, stub methods)
Association.scala
Dependency
Classes
- akka.actor.ActorSelectionMessage
- akka.dispatch.sysmsg.Unwatch
- akka.dispatch.sysmsg.DeathWatchNotification
- akka.event.MarkerLoggingAdapter --> akka/event/Logging.scala
- akka.remote.DaemonMsgCreate
- akka.remote.RemoteLogMarker
- akka.remote.artery.compress.CompressionTable
- akka.remote.artery.ArteryTransport
- akka.remote.artery.AssociationState --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.FlushBeforeDeathWatchNotification
- akka.remote.artery.ObjectPool
- akka.remote.artery.RestartCounter
- akka.remote.artery.SystemMessageDelivery.ClearSystemMessageDelivery
- akka.stream.Materializer --> akka/stream/Materializer.scala
- akka.stream.SharedKillSwitch
- akka.util.WildcardIndex
Traits
- akka.remote.artery.ControlMessage --> akka/remote/artery/Control.scala
- akka.remote.artery.Decoder.InboundCompressionAccess --> akka/remote/artery/Codecs.scala
- akka.remote.artery.Encoder.OutboundCompressionAccess --> akka/remote/artery/Codecs.scala
- akka.remote.artery.InboundControlJunction.ControlMessageSubject --> akka/remote/artery/Control.scala
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.OutboundEnvelope
- akka.remote.artery.OutboundControlJunction.OutboundControlIngress--> akka/remote/artery/Control.scala
- akka.remote.artery.SendQueue.ProducerApi
External Dependency
- java.util.concurrent.CountDownLatch.java
- Ported to C# (Akka.Remote.Artery.Utils.Concurrent.CountDownLatch)
- Async code need code review
- java.util.concurrent.LinkedBlockingQueue.java
- Ported to C# (Akka.Remote.Artery.Utils.Concurrent.LinkedBlockingQueue)
- Much rather have a better battle tested code instead.
- I'm not confident with my multi-thread concurrent codes.
- org.agrona.concurrent.ManyToOneConcurrentArrayQueue.java
- Replaced with ConcurrentQueue wrapped inside a java-like API facade (Akka.Remote.Artery.Utils.Concurrent.ConcurrentQueueWrapper)
- Might need to find a similar alternative or port the required functionality.
Ported Content
- [ ] class akka.remote.artery.Association (partial port, stub methods)
- [x] trait akka.remote.artery.Association.QueueWrapper
- [x] trait akka.remote.artery.Association.StopSignal
- [x] class akka.remote.artery.Association.QueueWrapperImpl
- [x] class akka.remote.artery.Association.DisabledQueueWrapper
- [x] class akka.remote.artery.Association.RemovedQueueWrapper
- [x] class akka.remote.artery.Association.LazyQueueWrapper
- [x] class akka.remote.artery.Association.OutboundStreamStopIdleSignal
- [x] class akka.remote.artery.Association.OutboundStreamStopQuarantinedSignal
- [x] class akka.remote.artery.Association.OutboundStreamMatValues
- [ ] class akka.remote.artery.AssociationRegistry (empty stub class)
Codecs.scala
Dependency
Classes
- akka.remote.MessageSerializer
- akka.remote.artery.ArterySettings
- akka.remote.artery.EnvelopeBuffer --> akka/remote/artery/EnvelopeBufferPool.scala
- akka.remote.artery.EnvelopeBufferPool
- akka.remote.artery.ObjectPool
- akka.remote.artery.RemoteInstruments (Not ported)
- akka.remote.artery.ReusableInboundEnvelope --> akka/remote/artery/InboundEnvelope.scala
- akka.remote.artery.compress.CompressionTable
- akka.remote.serialization.AbstractActorRefResolveCache
- akka.serialization.SerializationExtension
- akka.serialization.Serializers
- akka.serialization.Serialization
Traits
- akka.remote.artery.InboundContext
- akka.remote.artery.InboundEnvelope
- akka.remote.artery.OutboundEnvelope
- akka.remote.artery.compress.InboundCompressions
Ported Content
- [ ] class akka.remote.artery.Encoder (partial port, stub methods, missing graph logic implementation)
- [x] trait akka.remote.artery.Encoder.OutboundCompressionAccess
- [ ] class akka.remote.artery.Decoder
- [x] trait akka.remote.artery.Decoder.InboundCompressionAccess
- [ ] class akka.remote.artery.Decoder.InboundCompressionAccessImpl
- [x] case class akka.remote.artery.Decoder.RetryResolveRemoteDeployedRecipient
- [ ] case class akka.remote.artery.Decoder.AdvertiseActorRefCompressionTable
- [ ] case class akka.remote.artery.Decoder.AdvertiseClassManifestCompressionTable
- [ ] class akka.remote.artery.ActorRefResolveCacheWithAddress
- [ ] class akka.remote.artery.Deserializer
- [ ] class akka.remote.artery.DuplicateHandshakeReq
EnvelopeBufferPool.scala
Dependency
Classes
- akka.remote.artery.ArteryTransport
- akka.remote.artery.LruBoundedCache
- akka.remote.artery.RemoteInstruments (WILL NOT PORT)
- akka.serialization.Serialization
- akka.remote.artery.compress.CompressionTable
Traits
- akka.remote.artery.OutboundEnvelope
- akka.remote.artery.compress.InboundCompressions
External Dependency
- [x] java.nio.ByteBuffer (ported to C#)
- org.agrona.concurrent.ManyToManyConcurrentArrayQueue.java, used ConcurrentQueue to replace.
Ported Content
- [x] class akka.remote.artery.OutOfBuffersException
- [x] class akka.remote.artery.EnvelopeBufferPool
- [x] class akka.remote.artery.ByteFlag
- [x] class akka.remote.artery.HeaderBuilder
- [x] class akka.remote.artery.SerializationFormatCache
- [x] class akka.remote.artery.HeaderBuilderImpl
- [x] class akka.remote.artery.EnvelopeBuffer
FixedSizePartitionHub.scala
Dependency
Class
- akka.stream.scaladsl.PartitionHub
Traits
- akka.stream.scaladsl.PartitionHub.Internal.PartitionQueue
External Dependency
- org.agrona.concurrent.OneToOneConcurrentArrayQueue.java, might need to find a similar alternative or port the required functionality. See if we can use ConcurrentQueue backed class to replace this.
Ported Content
- [ ] class akka.remote.artery.FixedSizePartitionHub
- [ ] class akka.remote.artery.FixedSizePartitionQueue
FlushBeforeDeathWatchNotification.scala
Dependency
Classes
- akka.remote.artery.Association
- akka.remote.artery.FlushAck --> akka/remote/artery/Control.scala
Ported Content
- [ ] class akka.stream.artery.FlushBeforeDeathWatchNotification
FlushOnShutdown.scala
- [x] class akka.remote.artery.FlushOnShutdown
Handshake.scala
Dependency
Classes
- akka.remote.artery.ObjectPool
- akka.remote.artery.OutboundEnvelope
- akka.remote.artery.Reply --> akka/remote/artery/Control.scala
- akka.remote.artery.ReusableOutboundEnvelope --> akka/remote/artery/OutboundEnvelope.scala
Traits
- akka.remote.artery.ControlMessage
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
Ported Content
- [ ] class akka.remote.artery.OutboundHandshake
- [ ] class akka.remote.artery.OutboundHandshake.HandshakeTimeoutException
- [ ] case class akka.remote.artery.OutboundHandshake.HandshakeReq
- [ ] case class akka.remote.artery.OutboundHandshake.HandshakeRsp
- [ ] case class akka.remote.artery.OutboundHandshake.Start
- [ ] case class akka.remote.artery.OutboundHandshake.ReqInProgress
- [ ] case class akka.remote.artery.OutboundHandshake.Completed
- [ ] case class akka.remote.artery.OutboundHandshake.HandshakeTimeout
- [ ] case class akka.remote.artery.OutboundHandshake.HandshakeRetryTick
- [ ] case class akka.remote.artery.OutboundHandshake.InjectHandshakeTick
- [ ] case class akka.remote.artery.OutboundHandshake.LivenessProbeTick
- [ ] trait akka.remote.artery.OutboundHandshake.HandshakeState
ImmutableLongMap.scala
This is basically a Dictionary<long, T>, but specialized for long keys with less than 1000 entries. Do we need this kind of optimization?
InboundEnvelope.scala
Dependency
Classes
- akka.remote.artery.ByteFlag --> akka/remote/artery/EnvelopeBufferPool.scala
- akka.remote.artery.EnvelopeBuffer --> akka/remote/artery/EnvelopeBufferPool.scala
Traits
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
Ported Content
- [x] trait akka.remote.artery.InboundEnvelope
- [x] class akka.remote.artery.ReusableInboundEnvelope
InboundQuarantineCheck.scala
Dependency
Classes
- akka.actor.ActorSelectionMessage --> akka/actor/ActorSelection.scala
- akka.remote.HeartbeatMessage --> akka/remote/Remoting.scala
- akka.remote.artery.Association
- akka.remote.artery.AssociationState --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.InboundEnvelope
- akka.remote.artery.Quarantined --> akka/remote/artery/Control.scala
Traits
- akka.remote.artery.InboundContext --> akka/remote/artery/ArteryTransport.scala
Ported Content
- [ ] class akka.remote.artery.InboundQuarantineCheck
LruBoundedCache.scala
Already ported, its in Akka.Remote.Serialization.LruBoundedCache.cs
MessageDispatcher.scala
Dependency
Classes
- akka.actor.ActorSelectionMessage --> akka/actor/ActorSelection.scala
- akka.remote.artery.InboundEnvelope
Traits
- akka.actor.PossiblyHarmful --> Already ported, its in Akka.Actor.INoSerializationVerificationNeeded.cs
Ported Content
- [ ] class akka.remote.artery.MessageDispatcher
ObjectPool.scala
Dependency
External Dependency
- org.agrona.concurrent.ManyToManyConcurrentArrayQueue.java, Replaced with ConcurrentQueue.
Ported Content
- [x] class akka.remote.artery.ObjectPool
OutboundEnvelope.scala
Dependency:
Classes
- class akka.remote.artery.ObjectPool
Ported Content
- [x] trait akka.remote.artery.OutboundEnvelope
- [x] class akka.remote.artery.ReusableOutboundEnvelope
QuarantinedEvent.scala
Ported Content
- [x] akka.remote.artery.QuarantinedEvent
- [x] akka.remote.artery.GracefulShutdownQuarantinedEvent
- [x] akka.remote.artery.ThisActorSystemQuarantinedEvent
RemoteInstrument.scala
Not ported to Akka.Net
RemotingFlightRecorder.scala
Not ported to Akka.Net
RestartCounter.scala
Dependency
Classes
- scala.concurrent.duration.Deadline (already ported as Akka.Remote.Deadline)
Ported Content
- [x] class akka.remote.artery.RestartCounter
SendQueue.scala
Ported Content
- [x] class akka.remote.artery.SendQueue
- [x] trait akka.remote.artery.SendQueue.ProducerApi
- [x] trait akka.remote.artery.SendQueue.QueueValue
- [x] trait akka.remote.artery.SendQueue.WakeupSignal
SystemMessageDelivery.scala
Dependency
Classes
- akka.remote.artery.ArterySettings
- akka.remote.artery.AssociationState --> akka/remote/artery/ArteryTransport.scala
Traits
- akka.remote.artery.ArteryMessage --> akka/remote/artery/Control.scala
- akka.remote.artery.InboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.InboundEnvelope
- akka.remote.artery.InboundControlJunction.ControlMessageObserver --> akka/remote/artery/Control.scala
- akka.remote.artery.InboundControlJunction.ControlMessageSubject --> akka/remote/artery/Control.scala
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.OutboundEnvelope
- akka.remote.artery.Reply --> akka/remote/artery/Control.scala
External Requirements
- class java.util.ArrayDeque
Ported Content
- [ ] class akka.remote.artery.SystemMessageDelivery
- [ ] class akka.remote.artery.SystemMessageDelivery.SystemMessageAcker
- [ ] class akka.remote.artery.SystemMessageDelivery.SystemMessageEnvelope
- [ ] class akka.remote.artery.SystemMessageDelivery.Ack
- [ ] class akka.remote.artery.SystemMessageDelivery.Nack
- [ ] class akka.remote.artery.SystemMessageDelivery.ClearSystemMessageDelivery
- [ ] class akka.remote.artery.SystemMessageDelivery.GaveUpSystemMessageException
- [ ] trait akka.remote.artery.SystemMessageDelivery.AckedDeliveryMessage
TestStage.scala
Dependency
Traits
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.OutboundEnvelope
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.OutboundEnvelope
Ported Content
- [x] static class akka.remote.artery.TestManagementCommands
- [x] case class akka.remote.artery.TestManagementCommands.FailInboundStreamOnce
- [x] class akka.remote.artery.SharedTestState
- [x] case class akka.remote.artery.TestState
- [x] class akka.remote.artery.OutboundTestStage
- [x] class akka.remote.artery.InboundTestStage
compress/CompressionProtocol.scala
Ported Content
- [x] static class akka.remote.artery.compress.CompressionProtocol
- [x] trait akka.remote.artery.compress.CompressionProtocol.CompressionMessage
- [x] trait akka.remote.artery.compress.CompressionProtocol.CompressionAckMessage
- [x] trait akka.remote.artery.compress.CompressionProtocol.CompressionAdvertisement
- [x] case class akka.remote.artery.compress.CompressionProtocol.ActorRefCompressionAdvertisement
- [x] case class akka.remote.artery.compress.CompressionProtocol.ActorRefCompressionAdvertisementAck
- [x] case class akka.remote.artery.compress.CompressionProtocol.ClassManifestCompressionAdvertisement
- [x] case class akka.remote.artery.compress.CompressionProtocol.ClassManifestCompressionAdvertisementAck
- [x] static class akka.remote.artery.compress.CompressionProtocol.Events
- [x] trait akka.remote.artery.compress.CompressionProtocol.Events.Event
- [x] case class akka.remote.artery.compress.CompressionProtocol.Events.HeavyHitterDetected
- [x] case class akka.remote.artery.compress.CompressionProtocol.Events.ReceivedActorRefCompressionTable
- [x] case class akka.remote.artery.compress.CompressionProtocol.Events.ReceivedClassManifestCompressionTable
compress/CountMinSketch.java
Ported Content
- [x] class akka.remote.artery.compress.CountMinSketch
- [x] static class akka.remote.artery.compress.CountMinSketch.Murmur3
compress/CompressionTable.scala
Dependency
Classes
- akka.remote.artery.compress.DecompressionTable
External Dependency
- org.agrona.collections.Object2IntHashMap.java, replaced with ImmutableDictionary
Ported Content
- [x] class akka.remote.artery.compress.CompressionTable
compress/DecompressionTable.scala
Dependency
Classes
- class akka.remote.artery.compress.CompressionTable
Ported Content
- [x] class akka.remote.artery.compress.DecompressionTable
compress/InboundCompressions.scala
Dependency
Classes
- akka.remote.artery.ArterySettings
- akka.remote.artery.Association
- akka.remote.artery.AssociationState --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.compress.CompressionProtocol.ActorRefCompressionAdvertisement
- akka.remote.artery.compress.CompressionProtocol.ClassManifestCompressionAdvertisement
- akka.remote.artery.compress.CompressionTable
- akka.remote.artery.compress.DecompressionTable
- akka.remote.artery.compress.TopHeavyHitters
Traits
- akka.remote.artery.InboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.RemotingFlightRecorder (WILL NOT PORT)
External Dependency
- org.agrona.collections.Long2ObjectHashMap.java, replaced with Dictionary
Ported Content
- [x] trait akka.remote.artery.compress.InboundCompressions
- [x] class akka.remote.artery.compress.InboundCompressionsImpl
- [x] class akka.remote.artery.compress.InboundActorRefCompressions
- [x] class akka.remote.artery.compress.InboundManifestCompressions
- [x] class akka.remote.artery.compress.InboundCompression
- [x] class akka.remote.artery.compress.InboundCompression.Tables
- [x] class akka.remote.artery.compress.UnknownCompressedIdException
- [x] class akka.remote.artery.compress.NoInboundCompressions
compress/TopHeavyHitters.scala
Ported Content
- [x] class akka.remote.artery.compress.TopHeavyHitters
- [x] case class akka.remote.artery.compress.TopHeavyHitters.HashCodeVal
tcp/ArteryTcpTransport.scala
Dependency:
Classes
- akka.remote.artery.ArterySettings
- akka.remote.artery.ArteryTransport
- akka.remote.artery.Association
- akka.remote.artery.AssociationState --> akka/remote/artery/ArteryTransport.scala
- akka.remote.artery.DuplicateHandshakeReq --> akka/remote/artery/Control.scala
- akka.remote.artery.EnvelopeBuffer --> akka/remote/artery/EnvelopeBufferPool.scala
- akka.remote.artery.EnvelopeBufferPool
- akka.remote.artery.tcp.SSLEngineProvider
- akka.remote.artery.tcp.SSLEngineProviderSetup --> akka/remote/artery/tcp/SSLEngineProvider.scala
- akka.remote.artery.tcp.TcpFraming
- akka.stream.KillSwitches
- akka.stream.SharedKillSwitch
- akka.stream.scaladsl.Tcp
- akka.stream.scaladsl.Tcp.IncomingConnection
- akka.stream.scaladsl.Tcp.ServerBinding
Traits
- akka.remote.artery.Decoder.InboundCompressionAccess
- akka.remote.artery.InboundEnvelope
- akka.remote.artery.OutboundContext --> akka/remote/artery/ArteryTransport.scala
External Dependency
- [x] java.nio.ByteBuffer (ported to C#)
- java.net.ssl.SSLEngine
- java.net.InetSocketAddress
Ported Content
- [ ] class akka.remote.artery.tcp.ArteryTcpTransport
tcp/ConfigSSLEngineProvider.scala
Dependency:
Classes
- akka.remote.artery.tcp.SecureRandomFactory
- akka.remote.artery.tcp.SSLEngineProvider
- akka.stream.TLSRole
External Dependency
- javax.net.ssl.SSLContext
- javax.net.ssl.SSLEngine
- java.security.KeyStore
- javax.net.ssl.KeyManager
- javax.net.ssl.KeyManagerFactory
- javax.net.ssl.TrustManager
- javax.net.ssl.TrustManagerFactory
- java.security.SecureRandom
Ported Content
- [ ] class akka.remote.artery.tcp.ConfigSSLEngineProvider
tcp/SecureRandomFactory.scala
Dependency
External Dependency
- java.security.SecureRandom
Ported Content
- [ ] class akka.remote.artery.tcp.SecureRandomFactory
tcp/SSLEngineProvider.scala
Dependency:
External Dependency
- javax.net.ssl.SSLEngine
- javax.net.ssl.SSLSession
Ported Content
- [ ] trait akka.remote.artery.tcp.SSLEngineProvider
- [ ] class akka.remote.artery.tcp.SslTransportException
- [ ] class akka.remote.artery.tcp.SSLEngineProviderSetup
tcp/TcpFraming.scala
Dependency:
Classes
- akka.remote.artery.EnvelopeBuffer
- akka.stream.impl.io.ByteStringParser
Ported Content
- [ ] class akka.remote.artery.tcp.TcpFraming
- [ ] case class akka.remote.artery.tcp.TcpFraming.ReadStreamId
- [ ] case class akka.remote.artery.tcp.TcpFraming.ReadFrame
tcp/ssl/PemManagersProvider.scala
Dependency:
Classes
- akka.pki.pem.DERPrivateKeyLoader
- akka.pki.pem.PEMDecoder
External Dependency
- java.security.PrivateKey
- java.security.KeyStore
- java.security.cert.Certificate
- java.security.cert.CertificateFactory
- java.security.cert.X509Certificate
- javax.net.ssl.KeyManager
- javax.net.ssl.KeyManagerFactory
- javax.net.ssl.TrustManager
- javax.net.ssl.TrustManagerFactory
Ported Content
- [ ] static class akka.remote.artery.tcp.ssl.PemManagersProvider
tcp/ssl/RotatingKeySSLEngineProvider.scala
Dependency
Classes
- akka.remote.artery.tcp.SSLEngineProvider
- akka.remote.artery.tcp.SecureRandomFactory
- akka.remote.artery.tcp.ssl.PemManagersProvider
- akka.remote.artery.tcp.ssl.PeerSubjectVerifier --> akka/remote/artery/tcp/ssl/SessionVerifier.scala
- akka.remote.artery.tcp.ssl.SSLEngineConfig
- akka.stream.TLSRole --> akka-stream/src/main/scala/akka.stream/SslTslOptions.scala
- akka.stream.Client --> akka-stream/src/main/scala/akka.stream/SslTslOptions.scala
External Dependency
- javax.net.ssl.KeyManager
- javax.net.ssl.SSLContext
- javax.net.ssl.SSLEngine
- javax.net.ssl.SSLSession
- javax.net.ssl.TrustManager
- java.security.PrivateKey
- java.security.SecureRandom
- java.security.cert.Certificate
- java.security.cert.X509Certificate
Ported Content
- [ ] class akka.remote.artery.tcp.ssl.RotatingKeySSLEngineProvider
- [ ] case class akka.remote.artery.tcp.ssl.RotatingKeySSLEngineProvider.CachedContext
- [ ] case class akka.remote.artery.tcp.ssl.RotatingKeySSLEngineProvider.ConfiguredContext
tcp/ssl/SessionVerifier.scala
Dependency
Classes
akka.remote.artery.tcp.ssl.X509Readers
External Dependency
- javax.net.ssl.SSLSession
- java.security.cert.X509Certificate
Ported Content
- [ ] trait akka.remote.artery.tcp.ssl.SessionVerifier
- [ ] class akka.remote.artery.tcp.ssl.NoopSessionVerifier
- [ ] class akka.remote.artery.tcp.ssl.PeerSubjectVerifier
tcp/ssl/SSLEngineConfig.scala
Ported Content
- [ ] class akka.remote.artery.tcp.ssl.SSLEngineConfig
tcp/ssl/X509Readers.scala
Dependency
External Dependency
- java.security.cert.X509Certificate
Ported Content
- [ ] static class class akka.remote.artery.tcp.ssl.X509Readers
Additional files that needed porting outside of artery
- [ ] akka-stream/src/main/scala/akka.stream/SslTslOptions.scala
- [ ] akka-stream/src/main/scala/akka.stream/impl/io/ByteStringParser.scala
I'll be splitting these into separate issues
areon donet already ported by people it is open sourced. https://github.com/AdaptiveConsulting/Aeron.NET