[ 
https://issues.apache.org/jira/browse/GEODE-8830?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mario Salazar de Torres reassigned GEODE-8830:
----------------------------------------------

    Assignee: Mario Salazar de Torres

> Exceptions not correctly re-thrown in the tx manager
> ----------------------------------------------------
>
>                 Key: GEODE-8830
>                 URL: https://issues.apache.org/jira/browse/GEODE-8830
>             Project: Geode
>          Issue Type: Bug
>          Components: native client
>    Affects Versions: 1.12.0, 1.13.0, 1.13.1
>            Reporter: Mario Salazar de Torres
>            Assignee: Mario Salazar de Torres
>            Priority: Major
>              Labels: pull-request-available
>
> Under several transactional scenarios exceptions are converted from its more 
> specific type to *Exception* type within the internal code of the native 
> client. The scenarios are the following ones:
>  # Whenever a transaction commit conflicts the native client user would 
> expect a *CommitConflictException*, but instead the user can only catch an 
> exception of type *Exception*.
>  # Whenever a transaction prepare conflicts the native client user would 
> expect a *CommitConflictException*, but instead the user can only catch an 
> exception of type *Exception*.
>  # Whenever rollback/prepare/commit is executed with no transaction ongoing 
> the native client user would expect an *IllegalStateException*, but instead 
> the user can only catch an exception of type *Exception*.
> ----
> *Example:*
> {code:c++}
> auto tx_manager = cache.getCacheTransactionManager();
> // First transaction starts here
> tx_manager->begin();
> region->put("key", "A");
> // First transaction is suspended before doing the commit
> auto& tx_id = txm->suspend();
> // Second transaction starts here
> tx_manager->begin();
> region->put("key", "B");
> tx_manager->commit();
> // After successfully committing the second transaction, the first 
> transaction is resumed
> tx_manager->resume(tx_id);
> try {
>   tx_manager->commit();
> }
> catch(CommitConflictException& ex) {
>   // This is what should be in the output in this example
>   std::cerr << "A conflict occurred while committing the transaction!" << 
> std::endl;
> }
> catch(Exception& ex) {
>   // However, as there is some issue with exception handling, this is what's 
> currently shown
>   std::cerr << "An unknown exception occurred while committing the 
> transaction!" << std::endl;
> }{code}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to