You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Marshall Schor (JIRA)" <de...@uima.apache.org> on 2018/07/03 21:34:00 UTC

[jira] [Commented] (UIMA-5763) UIMA: need a way to lock a CAS to prevent user from releasing it prematurely

    [ https://issues.apache.org/jira/browse/UIMA-5763?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16531957#comment-16531957 ] 

Marshall Schor commented on UIMA-5763:
--------------------------------------

There are 2 topics in this comment chain:  a "no_access" and "read-only".  The original impetus was to prevent accidental "releasing" of CASes in uima-as context while the cas was sent to a remote service. 

The various expansions and augmentations in the comment chain, if implemented, probably slightly slow down normal CAS operations. 
 * I wonder if it's worth checking on every FS creation or feature update, whether or not a global (to the CAS) read-only flag is set.  
 * I wonder if it's worth checking on every index or feature access, whether or not a no-access flag is set.

Doing the original request (preventing a user from accidentally releasing a CAS) is a very low frequency operation, so no performance impact would be expected.

For the next release, I'll make a new Jira, which will cover a minimal implementation of the original intent (preventing accidental releasing of CASes), and leave this Jira open, in case we figure out a good approach on going forward with read-only / no-access that won't impact performance.

> UIMA: need a way to lock a CAS to prevent user from releasing it prematurely
> ----------------------------------------------------------------------------
>
>                 Key: UIMA-5763
>                 URL: https://issues.apache.org/jira/browse/UIMA-5763
>             Project: UIMA
>          Issue Type: New Feature
>          Components: UIMA
>            Reporter: Jerry Cwiklik
>            Assignee: Marshall Schor
>            Priority: Major
>             Fix For: 3.0.1SDK, 2.10.3SDK
>
>
> UIMA-AS client supports an async style of sending CASes for processing to a remote service. When using sendCAS( CAS aCas), the code serializes CAS and dispatches it to the remote but keeps the CAS in a cache. When a reply comes, the cached CAS is used to deserialize a response. The contract is that the user code should not call CAS.release(). When a reply finally comes, the CAS is handed over to an application callback and upon return from the callback, the UIMA-AS releases the CAS. 
> Problem: there is nothing to prevent user code to violate the contract. If CAS.release() is called while UIMA-AS client awaits reply (or during reply deserialization), bad things happen. In a specific use case, a NPE was thrown during deserialization and debugging was quite painful.
> Proposed solution: to protect integrity of a CAS need a way to lock/unlock it. Such facility can be added to CASImpl class. When a user code tries to call release()  when a CAS is locked,  the code should throw an exception (IllegalStateException or similar). 
> WDYT?
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)