You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Blake Bender (Jira)" <ji...@apache.org> on 2021/01/25 15:59:01 UTC

[jira] [Resolved] (GEODE-8830) Exceptions not correctly re-thrown in the tx manager

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

Blake Bender resolved GEODE-8830.
---------------------------------
    Resolution: Fixed

> 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)