Thinks so...
> Am 26.10.2018 um 16:33 schrieb Julian Feinauer <j.feina...@pragmaticminds.de>:
>
> Hey,
>
>
> is this regarding the feature to return a Future of the send to fail if netty
> is not able to send something, or?
>
>
> Julian
>
> ________________________________
> Von: Sebastian Rühl <sebastian.ruehl...@googlemail.com.INVALID>
> Gesendet: Freitag, 26. Oktober 2018 16:24:28
> An: dev@plc4x.apache.org
> Betreff: Re: OPM / Connection Pool
>
> And btw:
>
> Regarding timeouts:
> https://netty.io/4.1/api/io/netty/handler/timeout/ReadTimeoutHandler.html
> <https://netty.io/4.1/api/io/netty/handler/timeout/ReadTimeoutHandler.html>
>
> https://netty.io/4.1/api/io/netty/handler/timeout/WriteTimeoutHandler.html
> <https://netty.io/4.1/api/io/netty/handler/timeout/WriteTimeoutHandler.html>
>
> As simple as inserting one line of code in the pipelines :)
> `channel.pipeline().addLast("readTimeoutHandler", new ReadTimeoutHandler
> <https://netty.io/4.1/api/io/netty/handler/timeout/ReadTimeoutHandler.html>(30);`
>
>> Am 26.10.2018 um 16:17 schrieb Sebastian Rühl
>> <sebastian.ruehl...@googlemail.com>:
>>
>> Hi Both,
>>
>> What we would need then is something like this:
>> https://netty.io/4.1/api/io/netty/handler/traffic/ChannelTrafficShapingHandler.html
>>
>> <https://netty.io/4.1/api/io/netty/handler/traffic/ChannelTrafficShapingHandler.html>
>>
>> …only message based (e.g. 100 requests).
>> This could then be implemented in driver-bases (like the
>> SingleItemToSingleRequestProtocol) and could be used for protocol that
>> don’t have sophisticated traffic control implementation like S7
>>
>> Sebastian
>>
>>> Am 26.10.2018 um 16:04 schrieb Julian Feinauer
>>> <j.feina...@pragmaticminds.de <mailto:j.feina...@pragmaticminds.de>>:
>>>
>>> Hey Chris,
>>>
>>>
>>> yes, indeed, sorry for the confusion.
>>>
>>> I agree with this "low level" limiting, as this is simply necessary to
>>> ensure connection.
>>>
>>> What I mean is that we could decide in an application to not send more than
>>> 100 requests / s (for whatever reason) and handle that before forwarding
>>> the requests to the pool.
>>>
>>>
>>> Julian
>>>
>>> ________________________________
>>> Von: Christofer Dutz <christofer.d...@c-ware.de
>>> <mailto:christofer.d...@c-ware.de>>
>>> Gesendet: Freitag, 26. Oktober 2018 16:01:37
>>> An: dev@plc4x.apache.org <mailto:dev@plc4x.apache.org>
>>> Betreff: Re: OPM / Connection Pool
>>>
>>> Hi Julian,
>>>
>>> I think we might be thinking of different things when referring to
>>> "limiting".
>>> In my case I know that a Siemens S7 device is able to process a maximum
>>> number of concurrent requests. If more are sent, they are simply discarded
>>> and an error response is sent.
>>> This maximum number of concurrent requests is agreed upon during the
>>> connection phase in the maxAmqCaller and maxAmqCallee parameters. The S7
>>> driver now automatically limits the number of requests sent out to respect
>>> these boundaries. And I don't see an option to handle this generically
>>> except to limit it to 1 globally.
>>>
>>> I think you are referring to something else. Could you please explain to us
>>> what you mean with "request limiting".
>>>
>>> Chris
>>>
>>> Am 26.10.18, 15:55 schrieb "Julian Feinauer" <j.feina...@pragmaticminds.de
>>> <mailto:j.feina...@pragmaticminds.de>>:
>>>
>>> Hey Sebastian,
>>>
>>>
>>> the only problem witht he reuse i had is possible internal state during
>>> in-flight messages or problems with multi threading (I'm not sure if all
>>> drivers are thread safe and stateless during in-flight messages), but I
>>> agree that this is minor currently, just wanted to add the todo to keep it
>>> in view : )
>>>
>>> Request Limiting is, as I think, no concern of the driver itself, I
>>> think, so I would add request limiting probably in an layer above thus I'm
>>> totally fine.
>>>
>>>
>>> With regards to Marcels branch I thought it would be ideal to move over
>>> its ProxyConnection as this is everything thats needed to fix the todo (all
>>> methods delegate untill close() is called then all throw an unsupported
>>> operation exception. This is similar to what common jdbc pools do, I
>>> checked dbcp and some other one).
>>>
>>>
>>> Yes, we can directly add the validation hook from commons pool, but I
>>> think we need a plc specific ping method in the api to call as we have no
>>> "common" field or "query" we can issue.
>>>
>>>
>>> Best
>>>
>>> Julian
>>>
>>> ________________________________
>>> Von: Sebastian Rühl <sebastian.ruehl...@googlemail.com.INVALID
>>> <mailto:sebastian.ruehl...@googlemail.com.INVALID>>
>>> Gesendet: Freitag, 26. Oktober 2018 13:23:55
>>> An: dev@plc4x.apache.org <mailto:dev@plc4x.apache.org>
>>> Betreff: Re: OPM / Connection Pool
>>>
>>> Hi Julian,
>>>
>>> Regarding the reuse of Connections:
>>> I was aware of that issue but forgot to add a TODO for that (sorry for
>>> that). But in general a pool is not a request limiter rater a connection
>>> limiter. Therefore the continue use shouldn’t be that big of an issue for
>>> the time being (Till we resolve that issue).
>>>
>>> Request Limiting:
>>> A separate generic request limiter feature would be nice but is
>>> out-of-scope of the pool. In case of S7 this is builtin
>>> (maxAmqCaller/maxAmqCallee).
>>>
>>> Regarding the branch of Marcel (And thanks for the great contribution
>>> Marcel :):
>>> He did some good work but at the end the implementation was initially too
>>> different from the commons-pool one as I would have reverted/changed almost
>>> every line. So the idea was it to write it upfront in the separate module
>>> to have the possibility to compare it side by side and pick the goodies.
>>>
>>> Regarding validation:
>>> The commons-pool validation calls isConnected() on return. So we could
>>> implement the „ping“ in the isConnected() as well or implement a ping() as
>>> you described.
>>>
>>> Sebastian
>>>
>>>> Am 25.10.2018 um 23:13 schrieb Julian Feinauer
>>>> <j.feina...@pragmaticminds.de <mailto:j.feina...@pragmaticminds.de>>:
>>>>
>>>> Hey all,
>>>>
>>>> just wanted to keep you up to date with some things Sebastian and I
>>>> discussed off-list.
>>>> Thanks to Sebastians support the Object Plc Mapping (opm) is now mergend
>>>> into master and I would love to get some feedback.
>>>> I hope that I can soon add some documentation on the side about that and I
>>>> would be happy if someone likes to implement writing (currently only
>>>> reading is supported), see PLC4X-70.
>>>>
>>>> Sebastian also added an implementation for the Connection Pool. This can
>>>> become one of the most important features to make it usable in enterprise
>>>> applications (pooling, keep connections open, …).
>>>> It is important to note that Marcel opened a PR for the same feature and
>>>> my impression is that both implementations are lacking some (different)
>>>> things and thus, together, are a pretty good first shot.
>>>> Thus, I suggest that we keep PR-30 open [1] or at least the branch intact
>>>> and move the Proxy Implementations over (added a TODO in the
>>>> PooledPlcDriverManager which is dangerous, I think) and also add some
>>>> validation (this should be added to the driver interface or the SPI
>>>> somewhere, I guess to be able to have a reasonable “ping” for all plc’s,
>>>> it is in our case not as easy as a “SELECT 1” in JDBC).
>>>>
>>>> Thus, we are on a great way, and as soon as we have moved over the
>>>> necessary parts from PR-30 and probably also added the validation I would
>>>> be very happy to ship OPM as feature in one of our applications. I’ll then
>>>> also prepare a sample on that because it makes PLC Connections really as
>>>> easy as querying a Database via JPA.
>>>>
>>>> Thanks especially to Marcel and Sebastian!
>>>> Julian
>>>>
>>>> [1] https://github.com/apache/incubator-plc4x/pull/30
>>>> <https://github.com/apache/incubator-plc4x/pull/30>
>>>
>>>
>>>
>>
>