Improve locking semantics

pull/896/head
Onder Kalaci 2016-10-18 15:04:08 +03:00
parent 916d8ef406
commit 983163761f
1 changed files with 11 additions and 0 deletions

View File

@ -323,6 +323,10 @@ CreateMultipleTaskRouterModifyTask(Query *originalQuery, Query *query,
List *insertShardPlacementList = NULL; List *insertShardPlacementList = NULL;
List *intersectedPlacementList = NULL; List *intersectedPlacementList = NULL;
bool queryRoutable = false; bool queryRoutable = false;
bool upsertQuery = false;
/* grab shared metadata lock to stop concurrent placement additions */
LockShardDistributionMetadata(shardId, ShareLock);
/* /*
* Replace the partitioning qual parameter value in all baserestrictinfos. * Replace the partitioning qual parameter value in all baserestrictinfos.
@ -375,6 +379,12 @@ CreateMultipleTaskRouterModifyTask(Query *originalQuery, Query *query,
/* this is required for correct deparsing of the query */ /* this is required for correct deparsing of the query */
ReorderInsertSelectTargetLists(copiedQuery, copiedInsertRte, copiedSubqueryRte); ReorderInsertSelectTargetLists(copiedQuery, copiedInsertRte, copiedSubqueryRte);
/* set the upsert flag */
if (originalQuery->onConflict != NULL)
{
upsertQuery = true;
}
/* setting an alias simplifies deparsing of RETURNING */ /* setting an alias simplifies deparsing of RETURNING */
if (copiedInsertRte->alias == NULL) if (copiedInsertRte->alias == NULL)
{ {
@ -391,6 +401,7 @@ CreateMultipleTaskRouterModifyTask(Query *originalQuery, Query *query,
modifyTask->dependedTaskList = NULL; modifyTask->dependedTaskList = NULL;
modifyTask->anchorShardId = shardId; modifyTask->anchorShardId = shardId;
modifyTask->taskPlacementList = insertShardPlacementList; modifyTask->taskPlacementList = insertShardPlacementList;
modifyTask->upsertQuery = upsertQuery;
return modifyTask; return modifyTask;
} }