mirror of
https://github.com/postgres/postgres.git
synced 2025-08-30 06:01:21 +03:00
Report progress of CREATE INDEX operations
This uses the progress reporting infrastructure added by c16dc1aca5
,
adding support for CREATE INDEX and CREATE INDEX CONCURRENTLY.
There are two pieces to this: one is index-AM-agnostic, and the other is
AM-specific. The latter is fairly elaborate for btrees, including
reportage for parallel index builds and the separate phases that btree
index creation uses; other index AMs, which are much simpler in their
building procedures, have simplistic reporting only, but that seems
sufficient, at least for non-concurrent builds.
The index-AM-agnostic part is fairly complete, providing insight into
the CONCURRENTLY wait phases as well as block-based progress during the
index validation table scan. (The index validation index scan requires
patching each AM, which has not been included here.)
Reviewers: Rahila Syed, Pavan Deolasee, Tatsuro Yamada
Discussion: https://postgr.es/m/20181220220022.mg63bhk26zdpvmcj@alvherre.pgsql
This commit is contained in:
@@ -2807,6 +2807,7 @@ FastPathGetRelationLockEntry(LOCALLOCK *locallock)
|
||||
* xacts merely awaiting such a lock are NOT reported.
|
||||
*
|
||||
* The result array is palloc'd and is terminated with an invalid VXID.
|
||||
* *countp, if not null, is updated to the number of items set.
|
||||
*
|
||||
* Of course, the result could be out of date by the time it's returned,
|
||||
* so use of this function has to be thought about carefully.
|
||||
@@ -2817,7 +2818,7 @@ FastPathGetRelationLockEntry(LOCALLOCK *locallock)
|
||||
* uses of the result.
|
||||
*/
|
||||
VirtualTransactionId *
|
||||
GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
|
||||
GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode, int *countp)
|
||||
{
|
||||
static VirtualTransactionId *vxids;
|
||||
LOCKMETHODID lockmethodid = locktag->locktag_lockmethodid;
|
||||
@@ -2964,6 +2965,8 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
|
||||
LWLockRelease(partitionLock);
|
||||
vxids[count].backendId = InvalidBackendId;
|
||||
vxids[count].localTransactionId = InvalidLocalTransactionId;
|
||||
if (countp)
|
||||
*countp = count;
|
||||
return vxids;
|
||||
}
|
||||
|
||||
@@ -3019,6 +3022,8 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode)
|
||||
|
||||
vxids[count].backendId = InvalidBackendId;
|
||||
vxids[count].localTransactionId = InvalidLocalTransactionId;
|
||||
if (countp)
|
||||
*countp = count;
|
||||
return vxids;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user