uima-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marshall Schor <...@schor.com>
Subject Re: [jira] [Commented] (UIMA-5763) UIMA: need a way to lock a CAS to prevent user from releasing it prematurely
Date Wed, 18 Apr 2018 17:51:09 GMT
Re: is this like a "read-only" state? 

Yes, we could have a getter. 

However, treating this as a "read-only state" would have problems, because the
asynchronous arrival of a uima-as CAS returning from a service would update the
CAS, potentially at exactly the same time another thread could be accessing the
CAS as "read-only".

It's better to think of this as a no-access state (read or write) by the user.

-Marshall


On 4/17/2018 5:55 PM, Richard Eckart de Castilho (JIRA) wrote:
>     [ https://issues.apache.org/jira/browse/UIMA-5763?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16441556#comment-16441556
] 
>
> Richard Eckart de Castilho commented on UIMA-5763:
> --------------------------------------------------
>
> So you are basically talking about doing setting "read-only" flag on the CAS?
>
> Can we also have a getter like "isReadOnly()" or "isLocked()"?
>
>> 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)
>


Mime
View raw message