You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Samarth Jain (JIRA)" <ji...@apache.org> on 2015/04/30 21:52:06 UTC
[jira] [Created] (PHOENIX-1943) UPSERT SELECT is not thread safe
Samarth Jain created PHOENIX-1943:
-------------------------------------
Summary: UPSERT SELECT is not thread safe
Key: PHOENIX-1943
URL: https://issues.apache.org/jira/browse/PHOENIX-1943
Project: Phoenix
Issue Type: Bug
Reporter: Samarth Jain
Assignee: Samarth Jain
When UPSERT SELECT is run on the client side, we use the UpsertingParallelIteratorFactory where every iterator returned by newIterator() method calls the UpsertSelect method. Each of these mutating iterators are called from different threads in parallel. However, the upsertSelect() method called from each of these iterators uses the same mutationState instance which is not thread safe.
In particular this code in UpsertCompiler#upsertSelect
{code}
PhoenixStatement statement = context.getStatement();
PhoenixConnection connection = statement.getConnection();
.....
.....
// Commit a batch if auto commit is true and we're at our batch size
if (isAutoCommit && rowCount % batchSize == 0) {
MutationState state = new MutationState(tableRef, mutation, 0, maxSize, connection);
connection.getMutationState().join(state);
connection.commit();
mutation.clear();
}
{code}
[~rajeshbabu] - I will try and get a fix for this by EOD today.
FYI [~jamestaylor]
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)