Always helps to fully read the PR code, not just the snippet in the email.

It still is thread handing off, as such ignore my previous comment, and +1 to 
the general idea.

Just one other question:

"why not use an existing actor framework instead of coding our own, e.g. vert.x 
or akka?"

I’d be a bit wary of trying to re-implement these, a bit like with why we use 
Netty. 

I note that right now the simple model is fine, but as the idea extends we 
could end up if not careful coding up a framework, which if we start at the 
offset using one like vert.x, we could avoid.


Anyhow as said +1 to the general idea.



> On 11 Jul 2017, at 04:46, Michael André Pearce <[email protected]> 
> wrote:
> 
> Being maybe naive here, but won't this make the handlePacket method blocking 
> now? 
> 
> Isn't the idea to do work load hand off to other threads which are in the 
> executor?
> 
> 
> 
>> On 11 Jul 2017, at 00:30, Clebert Suconic <[email protected]> wrote:
>> 
>> Also: I need some help with this.
>> 
>> 
>> Actor is defined as Actor<T>
>> 
>> 
>> Does anyone know a way to define a method similar to this:
>> 
>> 
>> SomeFactory:
>> Actor<T> newActor(T type)
>> 
>> 
>> That is, type of Actor is passed in as argument. This is because I
>> would like OrderedExecutorFactory to include the new Actor method, and
>> I couldn't figure out how to do this through a factory.
>> 
>> On Mon, Jul 10, 2017 at 7:26 PM, Clebert Suconic
>> <[email protected]> wrote:
>>> I am replacing the use of an executor on ServerSessionHandler by a new
>>> class I just wrote (after some deep technical discussion with
>>> Francesco, to give him the credits)..
>>> 
>>> ServerSessionHandler is currently creating a new Runnable on every
>>> call made through the PacketHandler...
>>> 
>>> this is because:
>>> 
>>> of this method:
>>> 
>>> @Override
>>>  public void handlePacket(final Packet packet) {
>>>     channel.confirm(packet);
>>>     callExecutor.execute(() -> internalHandlePacket(packet));
>>>  }
>>> 
>>> 
>>> 
>>> The new Actor class is similar to an executor, but it varies on the 
>>> following:
>>> 
>>> Instead of receiving a Runnable, it receives an argument (or message)
>>> that is then sent to a listener method:
>>> 
>>> 
>>> The implementation gets a lot clearer:
>>> 
>>> 
>>> @Override
>>> public void handlePacket(final Packet packet) {
>>>  channel.confirm(packet);
>>> 
>>>  // This method will call onMessagePacket through an actor
>>>  packetActor.sendMessage(packet);
>>> }
>>> 
>>> 
>>> 
>>> And the method is just called without a new Runnable.
>>> 
>>> 
>>> 
>>> Here's the PR: https://github.com/apache/activemq-artemis/pull/1395
>>> 
>>> 
>>> 
>>> 
>>> --
>>> Clebert Suconic
>> 
>> 
>> 
>> -- 
>> Clebert Suconic

Reply via email to