Hi,
reply inline

Le Wed, 10 Jun 2009 21:37:10 +0200,
Emmanuel Lecharny <elecha...@apache.org> a écrit :

> Hi guys,
> 
> as I'm commuting every day for a long distance, I have had time to
> think about what I would see in MINA 3.0. Here is the result of my
> random thoughts....

And not see anymore ;)

> 
> 
> Mina 3.0 design and expected features
> -------------------------------------
> 
> - selectors usage
> We should be able to define the number of selectors to use, and to 
> define what they will be used for. For instance, atm, we have a
> selector in the Acceptor, plus a selector per Processor. This is not
> necessarily the best solution.

> 
> * do some perf tests to see if it's better to use one or many
> selectors.
> * decouple the selector usage from the the selector definition. It 
> should be possible to define one single selector and use it in many
> places
> * the Acceptor and Processor should not necessarily be associated
> with a thread. it's up to the user to define the thread model to use

Actually look like we need different strategy for different usage. 
On the right threading/selector strategy look like there is no real
consensus and we will need to experiment for finding the default
solution.

> - Chain
> The current chain implemention is cumbersome. We would like to have 
> something easier to manipluate, and also easier to debug.
> 
> * the chain should be optionally dynamic : a session can add a new 
> filter in the chain whenever needed
> * we should not always copy the chain in each session, if the chain
> is immutable

Yes, cause most of time we configure the chain on the acceptor and
never change it again.
Look like we agreed on copy-on-write for that.

> * however, it should be possible to change the global chain without 
> breaking the processing.
> * we should have one chain for incoming messages, and another one for 
> outgoing messages
> * it should be possible to have a multi-stage codec (ie, add more
> than one codec filter in the chain)
Mandatory, it's very often I use a TextLineCodec and a String-to-Pojo
filter, and I'm sure I'm not alone.

> * we should allow a queuing mechanism to be put in between each
> filters
What is that for ? Look like you got a new idea :)

> * the Head and Tail filters are useless : they should be removed
Yes

> * a chain may not be a list of filters. It can be a graph
If we can keep the API simple enough, why not.

> - Filters
> 
> * a filter should accept a stream<Object>, the Object can change from 
> one filter to another. it's up to the user to correctly handle the
> Object.

You want to say multi layer codec ?

> * the executor filter could be present in moe than one place in the 
> chain (SEDA)

Mandatory if someone really want SEDA.

> * statistic must be established with a filter
Again mandatory.
You won't do stats the same way on HTTP or FTP and stats can be very
costy.

> * we should define two interfaces for filters : IngoingFilter and 
> OutgoingFilter. They will expose the methods to process ingoing and 
> outgoing messages

The question is where to put sessionOpen/Closed/Idle in a two chains
model.

> 
> - Session
> * we should have two kind of sessions : statefull and stateless. 
> Sometime, we don't need to store any kind of information in a session
If we create the HashMap on first additon, where is the gain ?

> * we should add a sessionManager instead of all the existing queues
> used to manage the dead sessions, the idle sessions, etc.
We need to rethink the whole separation between IoProcessor and
IoService and where we manage closing/accepting queues.

> * session should not necessarily be associated with a processor.
+1

> * If a session is statefull, then we should attach the data to the 
> channel instead of creating a map for that
Can you say more about that, where is the gain ?

> * A session must be attached to an acceptor, allowing more than one 
> chain if the acceptor is to deal with more than one single
> SocketServer
We need to find away for running more than 1 kind of port/protocol with
the same set of Thread/Executors. I suppose it would be interesting
for ADS. On my side I run servers with 3 or 4 SocketAcceptors for
different protocols, somthing like 10 SocketConnectors for different
protocols.
Perfs aren't an issue for me actually, be it can change.
 
> 
> - codec
> * we don't have stateful or stateless codecs. We should distinguish
> the two kinds of codec someone can use.
+1

> * we should efine a collection of existing codecs
For that we need a standard way of doing a codec on the Pojo side.
I'm sure LDAP pjo oof ADs are very different (and got different
dependencies) of the one of Asyncweb or Vysper.

> * as we can handle more than one protocol, we must add a
> demuxingCodec which point to the next filter, conditionally

Here the graph ? :)

> 
> - Buffer
> * We should not wrap ByteBuffer into our own IoBuffer class. We
> should have a list of ByteBuffers instead, containing all the
> ByteBuffers.
And some extended Stream interface for manipulation.
> 
> - General
> * offer a NIO 2.0 library
>
Well it's going to be soon mandatory :)
 
> 
> This is just a starting point ... Feel free to comment, add or remove 
> some items !
> 

We need at first a great test platform for testing the different
protocols and implementation ideas (Thread/Selector/Channel
strategies). So we make choice based on facts for the engine.

Julien

Attachment: signature.asc
Description: PGP signature

Reply via email to