[ https://issues.apache.org/jira/browse/GEODE-8830?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated GEODE-8830: ---------------------------------- Labels: pull-request-available (was: ) > 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 > 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)