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> >> >> >> >