Selector question

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Selector question

Josh Spiegel
Hi, 

In the documentation ServerConnector, I see the following text:

<quote>
It is the selector thread that will call the Callback instances passed in the EndPoint.fillInterested(Callback) or EndPoint.write(Callback, java.nio.ByteBuffer...) methods. It is expected that these callbacks may do some non-blocking IO work, but will always dispatch to the Executor service any blocking, long running or application tasks.
</quote>

But I also found this blog that made it sound like maybe this is no longer the case?

Can anybody clarify?  Specifically, I would like to know if onFillable() will be run by a selector for ServerConnector/AbstractConnection.  And if not, is it ok to do blocking operations in onFillable()?

Thanks,
Josh

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users
Reply | Threaded
Open this post in threaded view
|

Re: Selector question

Joakim Erdfelt-8
Why do you need to know that?

The ManagedSelector behavior is controlled by the Threading Strategy.
Typically this is the EatWhatYouKill strategy.

Each task from a select() call is identified by the strategy for its behavior, will it block? can it block? etc.
The Threading strategy also makes the call on if the task should execute, invoke, or run.  
The Threading strategy is also aware of the state of the ThreadPool when making its decisions.  (eg: behaviors change when the thread pool has few idle threads left)

In short, by the time you are in the EndPoint, you can make no assumptions about behavior at the selector / threading strategy / thread pool / executor.


Joakim Erdfelt / [hidden email]

On Thu, May 24, 2018 at 6:01 PM, Josh Spiegel <[hidden email]> wrote:
Hi, 

In the documentation ServerConnector, I see the following text:

<quote>
It is the selector thread that will call the Callback instances passed in the EndPoint.fillInterested(Callback) or EndPoint.write(Callback, java.nio.ByteBuffer...) methods. It is expected that these callbacks may do some non-blocking IO work, but will always dispatch to the Executor service any blocking, long running or application tasks.
</quote>

But I also found this blog that made it sound like maybe this is no longer the case?

Can anybody clarify?  Specifically, I would like to know if onFillable() will be run by a selector for ServerConnector/AbstractConnection.  And if not, is it ok to do blocking operations in onFillable()?

Thanks,
Josh

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users


_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users
Reply | Threaded
Open this post in threaded view
|

Re: Selector question

Greg Wilkins
In reply to this post by Josh Spiegel

Josh,

that javadoc is indeed out of date.

We now allow Callback instances to use the Invocable interface to declare if they are blocking or non-blocking, with blocking being assumed.  So there are no limits on what can be done... other than if a callback declares itself to be non-blocking, then it should not block no linger too long.

I will remove that old documentation.

cheers





On 25 May 2018 at 01:01, Josh Spiegel <[hidden email]> wrote:
Hi, 

In the documentation ServerConnector, I see the following text:

<quote>
It is the selector thread that will call the Callback instances passed in the EndPoint.fillInterested(Callback) or EndPoint.write(Callback, java.nio.ByteBuffer...) methods. It is expected that these callbacks may do some non-blocking IO work, but will always dispatch to the Executor service any blocking, long running or application tasks.
</quote>

But I also found this blog that made it sound like maybe this is no longer the case?

Can anybody clarify?  Specifically, I would like to know if onFillable() will be run by a selector for ServerConnector/AbstractConnection.  And if not, is it ok to do blocking operations in onFillable()?

Thanks,
Josh

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users



--

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users
Reply | Threaded
Open this post in threaded view
|

Re: Selector question

Greg Wilkins
See commit e6e49bdc85

On 25 May 2018 at 07:48, Greg Wilkins <[hidden email]> wrote:

Josh,

that javadoc is indeed out of date.

We now allow Callback instances to use the Invocable interface to declare if they are blocking or non-blocking, with blocking being assumed.  So there are no limits on what can be done... other than if a callback declares itself to be non-blocking, then it should not block no linger too long.

I will remove that old documentation.

cheers





On 25 May 2018 at 01:01, Josh Spiegel <[hidden email]> wrote:
Hi, 

In the documentation ServerConnector, I see the following text:

<quote>
It is the selector thread that will call the Callback instances passed in the EndPoint.fillInterested(Callback) or EndPoint.write(Callback, java.nio.ByteBuffer...) methods. It is expected that these callbacks may do some non-blocking IO work, but will always dispatch to the Executor service any blocking, long running or application tasks.
</quote>

But I also found this blog that made it sound like maybe this is no longer the case?

Can anybody clarify?  Specifically, I would like to know if onFillable() will be run by a selector for ServerConnector/AbstractConnection.  And if not, is it ok to do blocking operations in onFillable()?

Thanks,
Josh

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users



--



--

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users
Reply | Threaded
Open this post in threaded view
|

Re: Selector question

Josh Spiegel
Greg/Joakim,

Makes sense - thank you for the quick response.

Josh


On Thu, May 24, 2018 at 11:01 PM, Greg Wilkins <[hidden email]> wrote:
See commit e6e49bdc85

On 25 May 2018 at 07:48, Greg Wilkins <[hidden email]> wrote:

Josh,

that javadoc is indeed out of date.

We now allow Callback instances to use the Invocable interface to declare if they are blocking or non-blocking, with blocking being assumed.  So there are no limits on what can be done... other than if a callback declares itself to be non-blocking, then it should not block no linger too long.

I will remove that old documentation.

cheers





On 25 May 2018 at 01:01, Josh Spiegel <[hidden email]> wrote:
Hi, 

In the documentation ServerConnector, I see the following text:

<quote>
It is the selector thread that will call the Callback instances passed in the EndPoint.fillInterested(Callback) or EndPoint.write(Callback, java.nio.ByteBuffer...) methods. It is expected that these callbacks may do some non-blocking IO work, but will always dispatch to the Executor service any blocking, long running or application tasks.
</quote>

But I also found this blog that made it sound like maybe this is no longer the case?

Can anybody clarify?  Specifically, I would like to know if onFillable() will be run by a selector for ServerConnector/AbstractConnection.  And if not, is it ok to do blocking operations in onFillable()?

Thanks,
Josh

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users



--



--

_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users


_______________________________________________
jetty-users mailing list
[hidden email]
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users