How to check whether the handle is always valid with NativeBoost ?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

How to check whether the handle is always valid with NativeBoost ?

Blondeau Vincent

Hi !

 

I am doing a binding to the R library with NativeBoost.

So I create some external objects and apply some functions on them.

 

If the handle to the object is not valid, either the function crashes or gives a bad result.

 

How can I ensure to have a valid pointer at anytime ?

 

I see two solutions:

-          Either check at any NativeBoost call that the handle is valid (by checking the session id)

-          Or do a proxy that checks the session and recreate the external object.

 

What do you think ?

 

Thanks in advance,

 

Cheers,

Vincent BLONDEAU

 




Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.
Reply | Threaded
Open this post in threaded view
|

Re: How to check whether the handle is always valid with NativeBoost ?

Max Leske
Good question! I’d be interested in a good solution as well.


On 13.11.2014, at 18:05, Blondeau Vincent <[hidden email]> wrote:

Hi !
 
I am doing a binding to the R library with NativeBoost.
So I create some external objects and apply some functions on them.
 
If the handle to the object is not valid, either the function crashes or gives a bad result.
 
How can I ensure to have a valid pointer at anytime ?
 
I see two solutions:
-          Either check at any NativeBoost call that the handle is valid (by checking the session id)
-          Or do a proxy that checks the session and recreate the external object.
 
What do you think ?
 
Thanks in advance,
 
Cheers,
Vincent BLONDEAU
 



Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.

Reply | Threaded
Open this post in threaded view
|

Re: How to check whether the handle is always valid with NativeBoost ?

Eliot Miranda-2
In reply to this post by Blondeau Vincent
Hi Vincent,

   one way, used in VisualWorks, is to ensure that only valid handles exist.  So very early at startup the system does some allInstances invocations on the classes of handles and invalidates all the handles found.  This doesn't fix handles stored as raw integers anywhere, but provided the system is designed to have specific objects for external handles (and I hope it is) this shouldn't happen.

Since snapshot is relatively rare and start-up relatively frequent (at least in e.g. a web deployment context), one performance improvement is to do the allInstances before snapshot, and then merely enumerate the collection of handles, rather than use allInstances.

On Thu, Nov 13, 2014 at 9:05 AM, Blondeau Vincent <[hidden email]> wrote:

Hi !

 

I am doing a binding to the R library with NativeBoost.

So I create some external objects and apply some functions on them.

 

If the handle to the object is not valid, either the function crashes or gives a bad result.

 

How can I ensure to have a valid pointer at anytime ?

 

I see two solutions:

-          Either check at any NativeBoost call that the handle is valid (by checking the session id)

-          Or do a proxy that checks the session and recreate the external object.

 

What do you think ?

 

Thanks in advance,

 

Cheers,

Vincent BLONDEAU

 




Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.



--
best,
Eliot
Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] Re: How to check whether the handle is always valid with NativeBoost ?

Igor Stasenko


On 13 November 2014 18:37, Eliot Miranda <[hidden email]> wrote:
 
Hi Vincent,

   one way, used in VisualWorks, is to ensure that only valid handles exist.  So very early at startup the system does some allInstances invocations on the classes of handles and invalidates all the handles found.  This doesn't fix handles stored as raw integers anywhere, but provided the system is designed to have specific objects for external handles (and I hope it is) this shouldn't happen.

Since snapshot is relatively rare and start-up relatively frequent (at least in e.g. a web deployment context), one performance improvement is to do the allInstances before snapshot, and then merely enumerate the collection of handles, rather than use allInstances.

 
Just to add:
 - (re)validating external resources could vary depending on library or how short/long-lived the resource is etc.
As you described, one of the scenarios is to flush invalid handles at system startup.
In NB i using session checking, to do it lazily, once there's an attempt to use external resource.
But all that, of course, doesn't addresses the problem when external resource get invalidated, for one or another reason, during same session.

Using proxy to control each and every access to external resource is, of course, an ultimate solution, but alas, quite expensive since imposes high overhead. I would call it a brute-force solution.

To minimize overhead, my approach often is to place a check at key entry part of algorithm,
so if check passed, then rest of algorithm can run safely without excessive checking.
But that really depends on design of external library/framework, whether it possible or not.
Usually, if you cleverly organize the access to services, it is possible to do it without using brute-force proxyfying.

On Thu, Nov 13, 2014 at 9:05 AM, Blondeau Vincent <[hidden email]> wrote:

Hi !

 

I am doing a binding to the R library with NativeBoost.

So I create some external objects and apply some functions on them.

 

If the handle to the object is not valid, either the function crashes or gives a bad result.

 

How can I ensure to have a valid pointer at anytime ?

 

I see two solutions:

-          Either check at any NativeBoost call that the handle is valid (by checking the session id)

-          Or do a proxy that checks the session and recreate the external object.

 

What do you think ?

 

Thanks in advance,

 

Cheers,

Vincent BLONDEAU

 




Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.



--
best,
Eliot




--
Best regards,
Igor Stasenko.
Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] Re: How to check whether the handle is always valid with NativeBoost ?

Blondeau Vincent

Hi

 

Thanks a lot for your answers !

It is very helpful.

 

But how can I launch a script at the startup or shutdown of the image especially for Pharo ?

 

Vincent

 

 

 

De : Pharo-dev [mailto:[hidden email]] De la part de Igor Stasenko
Envoyé : jeudi 13 novembre 2014 23:40
À : Squeak Virtual Machine Development Discussion
Cc : Pharo Development List
Objet : Re: [Pharo-dev] [Vm-dev] Re: How to check whether the handle is always valid with NativeBoost ?

 

 

 

On 13 November 2014 18:37, Eliot Miranda <[hidden email]> wrote:

 

Hi Vincent,

 

   one way, used in VisualWorks, is to ensure that only valid handles exist.  So very early at startup the system does some allInstances invocations on the classes of handles and invalidates all the handles found.  This doesn't fix handles stored as raw integers anywhere, but provided the system is designed to have specific objects for external handles (and I hope it is) this shouldn't happen.

 

Since snapshot is relatively rare and start-up relatively frequent (at least in e.g. a web deployment context), one performance improvement is to do the allInstances before snapshot, and then merely enumerate the collection of handles, rather than use allInstances.

 

 

Just to add:

 - (re)validating external resources could vary depending on library or how short/long-lived the resource is etc.

As you described, one of the scenarios is to flush invalid handles at system startup.

In NB i using session checking, to do it lazily, once there's an attempt to use external resource.

But all that, of course, doesn't addresses the problem when external resource get invalidated, for one or another reason, during same session.

Using proxy to control each and every access to external resource is, of course, an ultimate solution, but alas, quite expensive since imposes high overhead. I would call it a brute-force solution.

To minimize overhead, my approach often is to place a check at key entry part of algorithm,

so if check passed, then rest of algorithm can run safely without excessive checking.

But that really depends on design of external library/framework, whether it possible or not.

Usually, if you cleverly organize the access to services, it is possible to do it without using brute-force proxyfying.

 

On Thu, Nov 13, 2014 at 9:05 AM, Blondeau Vincent <[hidden email]> wrote:

Hi !

 

I am doing a binding to the R library with NativeBoost.

So I create some external objects and apply some functions on them.

 

If the handle to the object is not valid, either the function crashes or gives a bad result.

 

How can I ensure to have a valid pointer at anytime ?

 

I see two solutions:

-          Either check at any NativeBoost call that the handle is valid (by checking the session id)

-          Or do a proxy that checks the session and recreate the external object.

 

What do you think ?

 

Thanks in advance,

 

Cheers,

Vincent BLONDEAU

 

 



Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.



 

--

best,

Eliot

 




--

Best regards,
Igor Stasenko.




Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.
Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] Re: How to check whether the handle is always valid with NativeBoost ?

Blondeau Vincent

 

 

De : Pharo-dev [mailto:[hidden email]] De la part de Blondeau Vincent
Envoyé : lundi 17 novembre 2014 16:41
À : Pharo Development List
Cc : Squeak Virtual Machine Development Discussion
Objet : Re: [Pharo-dev] [Vm-dev] Re: How to check whether the handle is always valid with NativeBoost ?

 

Hi

 

Thanks a lot for your answers !

It is very helpful.

 

But how can I launch a script at the startup or shutdown of the image especially for Pharo ?

 

Implement in the class side :

>>initialize

>>          Smalltalk addToStartUpList: self.

 

And

>>startUp

                “some code”

>>shutDown

                “some code”

 

 

Vincent

 

 

 

De : Pharo-dev [[hidden email]] De la part de Igor Stasenko
Envoyé : jeudi 13 novembre 2014 23:40
À : Squeak Virtual Machine Development Discussion
Cc : Pharo Development List
Objet : Re: [Pharo-dev] [Vm-dev] Re: How to check whether the handle is always valid with NativeBoost ?

 

 

 

On 13 November 2014 18:37, Eliot Miranda <[hidden email]> wrote:

 

Hi Vincent,

 

   one way, used in VisualWorks, is to ensure that only valid handles exist.  So very early at startup the system does some allInstances invocations on the classes of handles and invalidates all the handles found.  This doesn't fix handles stored as raw integers anywhere, but provided the system is designed to have specific objects for external handles (and I hope it is) this shouldn't happen.

 

Since snapshot is relatively rare and start-up relatively frequent (at least in e.g. a web deployment context), one performance improvement is to do the allInstances before snapshot, and then merely enumerate the collection of handles, rather than use allInstances.

 

 

Just to add:

 - (re)validating external resources could vary depending on library or how short/long-lived the resource is etc.

As you described, one of the scenarios is to flush invalid handles at system startup.

In NB i using session checking, to do it lazily, once there's an attempt to use external resource.

But all that, of course, doesn't addresses the problem when external resource get invalidated, for one or another reason, during same session.

Using proxy to control each and every access to external resource is, of course, an ultimate solution, but alas, quite expensive since imposes high overhead. I would call it a brute-force solution.

To minimize overhead, my approach often is to place a check at key entry part of algorithm,

so if check passed, then rest of algorithm can run safely without excessive checking.

But that really depends on design of external library/framework, whether it possible or not.

Usually, if you cleverly organize the access to services, it is possible to do it without using brute-force proxyfying.

 

On Thu, Nov 13, 2014 at 9:05 AM, Blondeau Vincent <[hidden email]> wrote:

Hi !

 

I am doing a binding to the R library with NativeBoost.

So I create some external objects and apply some functions on them.

 

If the handle to the object is not valid, either the function crashes or gives a bad result.

 

How can I ensure to have a valid pointer at anytime ?

 

I see two solutions:

-          Either check at any NativeBoost call that the handle is valid (by checking the session id)

-          Or do a proxy that checks the session and recreate the external object.

 

What do you think ?

 

Thanks in advance,

 

Cheers,

Vincent BLONDEAU

 

 



Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.



 

--

best,

Eliot

 




--

Best regards,
Igor Stasenko.

 



Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.




Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis.

This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Worldline liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted.