This is an automated email from the ASF dual-hosted git repository.
dbarnes pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new dca0240 GEODE-5298: User Guide - Document Transactions + Functions
Limitation
dca0240 is described below
commit dca0240e60ab0e0b81f77dc18a0074e6dbb07bb5
Author: Dave Barnes <[email protected]>
AuthorDate: Wed Jun 6 16:20:01 2018 -0700
GEODE-5298: User Guide - Document Transactions + Functions Limitation
---
.../working_with_transactions.html.md.erb | 40 ++++++++++++++--------
1 file changed, 25 insertions(+), 15 deletions(-)
diff --git
a/geode-docs/developing/transactions/working_with_transactions.html.md.erb
b/geode-docs/developing/transactions/working_with_transactions.html.md.erb
index d75f6ad..5e89c1a 100644
--- a/geode-docs/developing/transactions/working_with_transactions.html.md.erb
+++ b/geode-docs/developing/transactions/working_with_transactions.html.md.erb
@@ -62,7 +62,7 @@ Cache c = CacheFactory.getInstance(system);
The copy-on-read attribute and the operations affected by the attribute
setting are discussed in detail in [Managing Data
Entries](../../basic_config/data_entries_custom_classes/managing_data_entries.html).
-## Making a Safe Change Within a Transaction Using CopyHelper.copy
+## <a id="concept_fdr_wht_vk" class="no-quick-link"></a>Making a Safe Change
Within a Transaction Using CopyHelper.copy
If `copy-on-read` is *not* globally set, and the cache uses replicated
regions, explicitly make copies of the cache objects that are to be modified
within a transaction. The `CopyHelper.copy` method makes copies:
@@ -76,37 +76,47 @@ r.put("stringBuf", s);
cTxMgr.commit();
```
-## Transactions and Functions
+## <a id="concept_ihn_zmt_vk" class="no-quick-link"></a>Transactions and
Functions
-You can run a function from inside a transaction and you can nest a
transaction within a function, as long as your combination of functions and
transactions does not result in nested transactions. See [Function
Execution](../function_exec/chapter_overview.html) for more about functions.
+A function may contain transactions, and a transaction may contain functions,
as long as you observe these restrictions:
-A single transaction may contain multiple functions.
+ - **Your combination of functions and transactions must not result in nested
transactions.**
-If you are suspending and resuming a transaction with multiple function calls,
all functions in the transaction must execute on the same member.
+ - **When a transaction contains a function,** the function must operate only
on keys that are colocated with the keys in the transaction,
+as described in [Data Location for Cache
Transactions](data_location_cache_transactions.html). This implies:
+
+ - A function within a transaction must not specify execution on a
particular server or member.
+<%=vars.product_name%> throws `UnsupportedOperationException` if
`FunctionService` calls `onMember()`, `onServer()`,
+or similar methods from within a transaction.
+
+ - A function within a transaction can request a particular
region—that is, the `FunctionService.onRegion()` method is permitted.
+
+
+See [Function Execution](../function_exec/chapter_overview.html) for more
about functions.
See [Transaction Embedded within a Function
Example](transactional_function_example.html#concept_22331B3DBFAB4C0BA95EF103BFB71257)
for an example.
-## Using Queries and Indexes with Transactions
+## <a id="concept_ty1_vnt_vk" class="no-quick-link"></a>Using Queries and
Indexes with Transactions
Queries and indexes reflect the cache contents and ignore the changes made by
ongoing transactions. If you do a query from inside a transaction, the query
does not reflect the changes made inside that transaction.
-## Collections and Region.Entry Instances in Transactions
+## <a id="concept_ksh_twz_vk" class="no-quick-link"></a>Collections and
Region.Entry Instances in Transactions
Collections and region entries used in a transaction must be created inside
the transaction. After the transaction has completed, the application can no
longer use any region entry or collection or associated iterator created within
the transaction. An attempted use outside of the transaction will throw an
`IllegalStateException` exception.
Region collection operations include `Region.keySet`, `Region.entrySet`, and
`Region.values`. You can create instances of `Region.Entry` through the
`Region.getEntry` operation or by looking at the contents of the result
returned by a `Region.entrySet` operation.
-## Using Eviction and Expiration Operations
+## <a id="concept_vyt_txz_vk" class="no-quick-link"></a>Using Eviction and
Expiration Operations
Entry expiration and LRU eviction affect the committed state. They are not
part of a transaction, and therefore they cannot be rolled back.
-## About Eviction
+### About Eviction
LRU eviction operations do not cause write conflicts with existing
transactions, despite destroying or invalidating entries. LRU eviction is
deferred on entries modified by the transaction until the commit completes.
Because anything touched by the transaction has had its LRU clock reset,
eviction of those entries is not likely to happen immediately after the commit.
When a transaction commits its changes in a region with distributed scope, the
operation can invoke eviction controllers in the remote caches, as well as in
the local cache.
-## Configure Expiration
+### Configure Expiration
Local expiration actions do not cause write conflicts, but distributed
expiration can cause conflicts and prevent transactions from committing in the
members receiving the distributed operation.
@@ -128,7 +138,7 @@ Local expiration actions do not cause write conflicts, but
distributed expiratio
- Run the transactions from the member in which expiration is configured.
-## Transactions and Consistent Regions
+## <a id="transactions_and_consistency" class="no-quick-link"></a>Transactions
and Consistent Regions
A transaction that modifies a region in which consistency checking is enabled
generates all necessary version information for region updates when the
transaction commits.
@@ -136,7 +146,7 @@ If a transaction modifies a normal, preloaded or empty
region, the transaction i
The limitation for transactions with a normal, preloaded or empty region is
that, when consistency checking is enabled, a transaction cannot perform a
`localDestroy` or `localInvalidate` operation against the region.
<%=vars.product_name%> throws an `UnsupportedOperationInTransactionException`
exception in such cases. An application should use a `Destroy` or `Invalidate`
operation in place of a `localDestroy` or `localInvalidate` when consistency
checks are enabled.
-## Suspending and Resuming Transactions
+## <a id="concept_u5b_ryz_vk" class="no-quick-link"></a>Suspending and
Resuming Transactions
The <%=vars.product_name%> `CacheTransactionManager` API provides the ability
to suspend and resume transactions with the `suspend` and `resume` methods. The
ability to suspend and resume is useful when a thread must perform some
operations that should not be part of the transaction before the transaction
can complete. A complex use case of suspend and resume implements a transaction
that spans clients in which only one client at a time will not be suspended.
@@ -152,7 +162,7 @@ If a suspended transaction is not touched for a period of
time, <%=vars.product_
See [Basic Suspend and Resume Transaction
Example](transaction_suspend_resume_example.html) for a sample code fragment
that suspends and resumes a transaction.
-## Using Cache Writer and Cache Listener Plug-Ins
+## <a id="concept_ysx_nf1_wk" class="no-quick-link"></a>Using Cache Writer and
Cache Listener Plug-Ins
All standard <%=vars.product_name%> application plug-ins work with
transactions. In addition, the transaction interface offers specialized
plug-ins that support transactional operation.
@@ -175,7 +185,7 @@ Like JTA global transactions, you can use transaction
plug-in event handlers to
**Note:**
You can also use transaction plug-in event handlers when running JTA global
transactions.
-## TransactionWriter
+### TransactionWriter
When you commit a transaction, if a transaction writer is installed in the
cache where the data updates were performed, it is called. The writer can do
whatever work you need, including aborting the transaction.
@@ -183,7 +193,7 @@ The transaction writer is the last place that an
application can rollback a tran
A typical usage scenario would be to use the transaction writer to prepare the
commit on the external database. Then in a transaction listener, you can apply
the commit on the database.
-## Transaction Listeners
+### Transaction Listeners
When the transaction ends, its thread calls the transaction listener to
perform the appropriate follow-up for successful commits, failed commits, or
voluntary rollbacks. The transaction that caused the listener to be called no
longer exists by the time the listener code executes.
--
To stop receiving notification emails like this one, please contact
[email protected].