mirror of https://github.com/citusdata/citus.git
Use AccessShareLock on the source table while creating a colocated table
While creating a colocated table, we don't want the source table to be dropped. However, using a ShareLock blocks DML statements on the source table, and using AccessShareLock is enough to prevent DROP. Therefore, we just loosened the lock to AccessShareLock.pull/974/head
parent
6810835e1a
commit
a0c92b38cb
|
@ -41,6 +41,7 @@
|
||||||
#include "nodes/primnodes.h"
|
#include "nodes/primnodes.h"
|
||||||
#include "postmaster/postmaster.h"
|
#include "postmaster/postmaster.h"
|
||||||
#include "storage/fd.h"
|
#include "storage/fd.h"
|
||||||
|
#include "storage/lmgr.h"
|
||||||
#include "storage/lock.h"
|
#include "storage/lock.h"
|
||||||
#include "utils/builtins.h"
|
#include "utils/builtins.h"
|
||||||
#include "utils/elog.h"
|
#include "utils/elog.h"
|
||||||
|
@ -247,8 +248,8 @@ CreateColocatedShards(Oid targetRelationId, Oid sourceRelationId)
|
||||||
/* we plan to add shards: get an exclusive metadata lock on the target relation */
|
/* we plan to add shards: get an exclusive metadata lock on the target relation */
|
||||||
LockRelationDistributionMetadata(targetRelationId, ExclusiveLock);
|
LockRelationDistributionMetadata(targetRelationId, ExclusiveLock);
|
||||||
|
|
||||||
/* a share metadata lock is enough on the source relation */
|
/* we don't want source table to get dropped before we colocate with it */
|
||||||
LockRelationDistributionMetadata(sourceRelationId, ShareLock);
|
LockRelationOid(sourceRelationId, AccessShareLock);
|
||||||
|
|
||||||
/* prevent placement changes of the source relation until we colocate with them */
|
/* prevent placement changes of the source relation until we colocate with them */
|
||||||
sourceShardIntervalList = LoadShardIntervalList(sourceRelationId);
|
sourceShardIntervalList = LoadShardIntervalList(sourceRelationId);
|
||||||
|
|
Loading…
Reference in New Issue