You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by Jonathan Adams <Jo...@Clearswift.com> on 2016/11/16 13:41:49 UTC

Sending custom events to a TSCont

Hi,

I am writing a plugin that will perform some (relatively) slow actions on an incoming request. My plan is that, rather than having the plugin block waiting for each action to finish, they will launch in separate threads and then send an event to the appropriate TSCont instance to indicate the action is finished.

I know I can use TSContCall to send an event which expects a TSEvent value. But I want to send a custom event, not one of the TSEvent values.

As a simple solution I picked one of the TSEvent values that I would never expect to get normally (one of the internal values) and used that to indicate this is a custom event, bundling up the actual event details in the event data object.

Does this seem like a reasonable solution? Has anyone done anything like this before? Is there a better method to generate custom events?

Additionally, in my prototype I noticed that handling this event appears to happen in the same thread as the TSContCall call (that is, it appears to be synchronous). Is this safe? In particular I am likely to be doing something like calling TSHttpTxnReenable in response to this event. Are there any rules around interacting with transactions on different threads that I would need to be aware of? Or is it simply a matter of guarding access with a mutex as appropriate?

Thanks,

Jonathan.


Jonathan Adams

Software Engineer

[Telephone] +44 118 903 8610

[Twitter]@clearswift

[Clearswift] <http://www.clearswift.com/>

1310 Waterside | Arlington Business Park | Theale | Berkshire | RG7 4SA | United Kingdom

RELEASED: Clearswift v4.5 Gateways. Upgrade to the latest Clearswift technology today. Learn more here.<https://www.clearswift.com/training-and-support/migration-and-upgrades>

This e-mail and any files transmitted with it are strictly confidential, may be privileged and are intended only for use by the addressee unless otherwise indicated.  If you are not the intended recipient any use, dissemination, printing or copying is strictly prohibited and may be unlawful.  If you have received this e-mail in error, please delete it immediately and contact the sender as soon as possible.  Clearswift cannot be held liable for delays in receipt of an email or any errors in its content. Clearswift accepts no responsibility once an e-mail and any attachments leave us. Unless expressly stated, opinions in this message are those of the individual sender and not of Clearswift.

This email message has been inspected by Clearswift for inappropriate content and security threats. 

To find out more about Clearswift’s solutions please visit www.clearswift.com


Re: Sending custom events to a TSCont

Posted by Alan Carroll <so...@yahoo-inc.com.INVALID>.
I'd try picking a value >= 70000 and just casting it to the enum. I don't think there's an official mechanism for doing that. Although you could use EVENT_IMMEDIATE and pass additional data in the edata field.
 

    On Wednesday, November 16, 2016 7:42 AM, Jonathan Adams <Jo...@Clearswift.com> wrote:
 

 Hi,

I am writing a plugin that will perform some (relatively) slow actions on an incoming request. My plan is that, rather than having the plugin block waiting for each action to finish, they will launch in separate threads and then send an event to the appropriate TSCont instance to indicate the action is finished.

I know I can use TSContCall to send an event which expects a TSEvent value. But I want to send a custom event, not one of the TSEvent values.

As a simple solution I picked one of the TSEvent values that I would never expect to get normally (one of the internal values) and used that to indicate this is a custom event, bundling up the actual event details in the event data object.

Does this seem like a reasonable solution? Has anyone done anything like this before? Is there a better method to generate custom events?

Additionally, in my prototype I noticed that handling this event appears to happen in the same thread as the TSContCall call (that is, it appears to be synchronous). Is this safe? In particular I am likely to be doing something like calling TSHttpTxnReenable in response to this event. Are there any rules around interacting with transactions on different threads that I would need to be aware of? Or is it simply a matter of guarding access with a mutex as appropriate?

Thanks,

Jonathan.


Jonathan Adams

Software Engineer

[Telephone] +44 118 903 8610

[Twitter]@clearswift

[Clearswift] <http://www.clearswift.com/>

1310 Waterside | Arlington Business Park | Theale | Berkshire | RG7 4SA | United Kingdom

RELEASED: Clearswift v4.5 Gateways. Upgrade to the latest Clearswift technology today. Learn more here.<https://www.clearswift.com/training-and-support/migration-and-upgrades>

This e-mail and any files transmitted with it are strictly confidential, may be privileged and are intended only for use by the addressee unless otherwise indicated.  If you are not the intended recipient any use, dissemination, printing or copying is strictly prohibited and may be unlawful.  If you have received this e-mail in error, please delete it immediately and contact the sender as soon as possible.  Clearswift cannot be held liable for delays in receipt of an email or any errors in its content. Clearswift accepts no responsibility once an e-mail and any attachments leave us. Unless expressly stated, opinions in this message are those of the individual sender and not of Clearswift.

This email message has been inspected by Clearswift for inappropriate content and security threats. 

To find out more about Clearswift’s solutions please visit www.clearswift.com