*/
validate_index(relationId, indexRelationId, snapshot);
+ PrintSnapMgrStatus("concurrent index build, before snapshot release");
+
/*
* Drop the reference snapshot. We must do this before waiting out other
* snapshot holders, else we will deadlock against other processes also
limitXmin = snapshot->xmin;
PopActiveSnapshot();
+ PrintSnapMgrStatus("concurrent index build, after PopActiveSnapshot");
UnregisterSnapshot(snapshot);
+ PrintSnapMgrStatus("concurrent index build, after UnregisterSnapshot");
InvalidateCatalogSnapshot();
+ PrintSnapMgrStatus("concurrent index build, after InvalidateCatalogSnapshot");
+
/*
* The index is now valid in the sense that it contains all currently
* interesting tuples. But since it might not contain tuples deleted just
Assert(HistoricSnapshotActive());
return tuplecid_data;
}
+
+void
+PrintSnapMgrStatus(const char *context)
+{
+ int asdepth = 0;
+ ActiveSnapshotElt *active;
+
+ for (active = ActiveSnapshot; active != NULL; active = active->as_next)
+ asdepth++;
+
+ elog(LOG, "%s: %d reg snaps, %d active snaps, cat snap %p, xmin %u",
+ context, RegisteredSnapshots, asdepth,
+ CatalogSnapshot, MyPgXact->xmin);
+}