You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
https://jira.hyperledger.org/browse/FAB-1668
Phantom reads problem:
-----------------------------
If a transaction executes a key range query (say key_1 - key_n) leveldb
serves all the keys in the given range in sorted order of keys.
Between simulation and validation of a transaction, some other transaction
may insert one or more keys in this range. Now, this change cannot
be detected by merely checking the versions of the keys present in
the read-set of the transaction.
(though, this check can detect updates and deletes).
A serializable isolation level does not permit phantom reads.
Situations where the phantom reads may not be acceptable:
-----------------------------
- A chaincode may take a decision based on aggregates of the results of
the range query such as min/max/avg/sum etc. This would be affected
if a new entry gets added to the range query results.
- A chaincode may want to change all the marbles
owned by a specific user to blue in a tran `t1`. The chaincode may do so
by performing a range query to get all the marbles for the user and
change their color to blue. Now, if a new white marble get added to
the user's assets by an another transaction `t2`,
`t1` should be marked as invalid.
Solution in this change-set:
-----------------------------
For solving this, we can capture the details of the range query
(the query and it's results) during the simulation time and
re-execute the query during validation time and compare the results.
If the results (keys and versions) are still the same,
we can safely commit the transaction.
This changes set introduces
- Structures for capturing the range query details in rwset
- Detection of phantom items (insertion/deletion)
that affect the results of the range query during validation
- Mark the transactions that are affected by the phantom items
as invalid to ensure serializability in the presence of range queries
Change-Id: I909841a0234c37795ad7a4ffcca8a9ebd9c9f994
Signed-off-by: manish <[email protected]>
0 commit comments