Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Akka.Remote.Artery transport #4436

Open
2 of 41 tasks
Arkatufus opened this issue May 26, 2020 · 7 comments
Open
2 of 41 tasks

Implement Akka.Remote.Artery transport #4436

Arkatufus opened this issue May 26, 2020 · 7 comments

Comments

@Arkatufus
Copy link
Contributor

Arkatufus commented May 26, 2020

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 Compress
      • Port CompressionProtocol
      • Port CompressionTable
      • Port DecompressionTable
      • Port TopHeavyHitters
    • Port Tcp
      • Port ArteryTcpTransport
      • Port SslEngineProvider
      • Port TcpFraming
    • 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
  • Modernize/update current code to support Artery:

    • Port/upgrade Akka.Streams.Attributes
      • New Attributes internal list is reversed from previous versions
    • Port/upgrade Akka.Streams.ActorMaterializer
@Aaronontheweb
Copy link
Member

Based on our conversation in chat, not doing Aeron ports - correct? @Arkatufus

@Arkatufus
Copy link
Contributor Author

Correct, since there are no such thing as a proper port of Aeron in C#. Unless we want to port that over too. not.

@Arkatufus
Copy link
Contributor Author

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/

@Aaronontheweb Aaronontheweb added this to Needs triage in Akka.NET Sprint 2/8 - 2/22 via automation Feb 3, 2021
@Aaronontheweb
Copy link
Member

@Arkatufus adding an issue for this to the current project.

Here's what I really want out of this:

  1. Take all of the items on your checklist, convert them into individual Github issues.
  2. For each Github issue, link to the other "critical dependency" issues that have to be completed first. I.E. if we have to add CompressionTable before can we add CompressionProtocol, we should document that in the CompressionProtocol github issue and link to the CompressionTable implementation issue.
  3. 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 dev just yet.
  4. 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?

@Aaronontheweb Aaronontheweb moved this from Needs triage to Low priority in Akka.NET Sprint 2/8 - 2/22 Feb 3, 2021
@Arkatufus
Copy link
Contributor Author

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

  • trait akka.remote.artery.InboundContext
  • trait akka.remote.artery.OutboundContext
  • class akka.remote.artery.AssociationState
    • case class akka.remote.artery.AssociationState.QuarantinedTimestamp
  • case class akka.remote.artery.AssociationState.UniqueRemoteAddressValue
  • case class akka.remote.artery.AssociationState.UidKnown
  • case class akka.remote.artery.AssociationState.UidUnknown
  • case class akka.remote.artery.AssociationState.UidQuarantined
  • 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)
  • trait akka.remote.artery.Association.QueueWrapper
  • trait akka.remote.artery.Association.StopSignal
  • class akka.remote.artery.Association.QueueWrapperImpl
  • class akka.remote.artery.Association.DisabledQueueWrapper
  • class akka.remote.artery.Association.RemovedQueueWrapper
  • class akka.remote.artery.Association.LazyQueueWrapper
  • class akka.remote.artery.Association.OutboundStreamStopIdleSignal
  • class akka.remote.artery.Association.OutboundStreamStopQuarantinedSignal
  • 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)
    • trait akka.remote.artery.Encoder.OutboundCompressionAccess
  • class akka.remote.artery.Decoder
    • trait akka.remote.artery.Decoder.InboundCompressionAccess
  • class akka.remote.artery.Decoder.InboundCompressionAccessImpl
  • 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

  • java.nio.ByteBuffer (ported to C#)
  • org.agrona.concurrent.ManyToManyConcurrentArrayQueue.java, used ConcurrentQueue to replace.

Ported Content

  • class akka.remote.artery.OutOfBuffersException
  • class akka.remote.artery.EnvelopeBufferPool
  • class akka.remote.artery.ByteFlag
  • class akka.remote.artery.HeaderBuilder
  • class akka.remote.artery.SerializationFormatCache
  • class akka.remote.artery.HeaderBuilderImpl
  • 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

  • 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

  • trait akka.remote.artery.InboundEnvelope
  • 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

  • class akka.remote.artery.ObjectPool

OutboundEnvelope.scala

Dependency:

Classes

  • class akka.remote.artery.ObjectPool

Ported Content

  • trait akka.remote.artery.OutboundEnvelope
  • class akka.remote.artery.ReusableOutboundEnvelope

QuarantinedEvent.scala

Ported Content

  • akka.remote.artery.QuarantinedEvent
  • akka.remote.artery.GracefulShutdownQuarantinedEvent
  • 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

  • class akka.remote.artery.RestartCounter

SendQueue.scala

Ported Content

  • class akka.remote.artery.SendQueue
    • trait akka.remote.artery.SendQueue.ProducerApi
    • trait akka.remote.artery.SendQueue.QueueValue
    • 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

  • static class akka.remote.artery.TestManagementCommands
    • case class akka.remote.artery.TestManagementCommands.FailInboundStreamOnce
  • class akka.remote.artery.SharedTestState
  • case class akka.remote.artery.TestState
  • class akka.remote.artery.OutboundTestStage
  • class akka.remote.artery.InboundTestStage

compress/CompressionProtocol.scala

Ported Content

  • static class akka.remote.artery.compress.CompressionProtocol
    • trait akka.remote.artery.compress.CompressionProtocol.CompressionMessage
    • trait akka.remote.artery.compress.CompressionProtocol.CompressionAckMessage
    • trait akka.remote.artery.compress.CompressionProtocol.CompressionAdvertisement
  • case class akka.remote.artery.compress.CompressionProtocol.ActorRefCompressionAdvertisement
  • case class akka.remote.artery.compress.CompressionProtocol.ActorRefCompressionAdvertisementAck
  • case class akka.remote.artery.compress.CompressionProtocol.ClassManifestCompressionAdvertisement
  • case class akka.remote.artery.compress.CompressionProtocol.ClassManifestCompressionAdvertisementAck
  • static class akka.remote.artery.compress.CompressionProtocol.Events
    • trait akka.remote.artery.compress.CompressionProtocol.Events.Event
    • case class akka.remote.artery.compress.CompressionProtocol.Events.HeavyHitterDetected
    • case class akka.remote.artery.compress.CompressionProtocol.Events.ReceivedActorRefCompressionTable
    • case class akka.remote.artery.compress.CompressionProtocol.Events.ReceivedClassManifestCompressionTable

compress/CountMinSketch.java

Ported Content

  • class akka.remote.artery.compress.CountMinSketch
    • 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

  • class akka.remote.artery.compress.CompressionTable

compress/DecompressionTable.scala

Dependency

Classes

  • class akka.remote.artery.compress.CompressionTable

Ported Content

  • 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

  • trait akka.remote.artery.compress.InboundCompressions
  • class akka.remote.artery.compress.InboundCompressionsImpl
  • class akka.remote.artery.compress.InboundActorRefCompressions
  • class akka.remote.artery.compress.InboundManifestCompressions
  • class akka.remote.artery.compress.InboundCompression
    • class akka.remote.artery.compress.InboundCompression.Tables
  • class akka.remote.artery.compress.UnknownCompressedIdException
  • class akka.remote.artery.compress.NoInboundCompressions

compress/TopHeavyHitters.scala

Ported Content

  • class akka.remote.artery.compress.TopHeavyHitters
    • 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

  • 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

@Arkatufus
Copy link
Contributor Author

I'll be splitting these into separate issues

@Kiddinglife
Copy link

Kiddinglife commented May 23, 2021

areon donet already ported by people it is open sourced. https://github.com/AdaptiveConsulting/Aeron.NET

@Aaronontheweb Aaronontheweb modified the milestones: 1.5.0, 1.5.1 Mar 2, 2023
@Aaronontheweb Aaronontheweb modified the milestones: 1.5.1, 1.5.2 Mar 15, 2023
@Aaronontheweb Aaronontheweb modified the milestones: 1.5.2, 1.5.3 Apr 6, 2023
@Aaronontheweb Aaronontheweb modified the milestones: 1.5.3, 1.5.4 Apr 20, 2023
@Aaronontheweb Aaronontheweb added this to the 1.5.5 milestone Apr 25, 2023
@Aaronontheweb Aaronontheweb modified the milestones: 1.5.5, 1.5.6, 1.5.7, 1.6.0 May 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
No open projects
Development

No branches or pull requests

3 participants