8000 Setup error context callback for transaction lock waits · postgres/postgres@f88d4cf · GitHub
[go: up one dir, main page]

Skip to content
{"payload":{"commit":{"oid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","url":"/postgres/postgres/commit/f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","authoredDate":"2014-03-19T15:10:36.000-03:00","committedDate":"2014-03-19T15:10:36.000-03:00","shortMessage":null,"shortMessageMarkdown":"\u003cdiv\u003eSetup error context callback for transaction lock waits\u003c/div\u003e","shortMessageMarkdownLink":null,"bodyMessageHtml":"With this in place, a session blocking behind another one because of\ntuple locks will get a context line mentioning the relation name, tuple\nTID, and operation being done on tuple. For example:\n\nLOG: process 11367 still waiting for ShareLock on transaction 717 after 1000.108 ms\nDETAIL: Process holding the lock: 11366. Wait queue: 11367.\nCONTEXT: while updating tuple (0,2) in relation \"foo\"\nSTATEMENT: UPDATE foo SET value = 3;\n\nMost usefully, the new line is displayed by log entries due to\nlog_lock_waits, although of course it will be printed by any other log\nmessage as well.\n\nAuthor: Christian Kruse, some tweaks by Álvaro Herrera\nReviewed-by: Amit Kapila, Andres Freund, Tom Lane, Robert Haas","authors":[{"login":"alvherre","displayName":"Alvaro Herrera","avatarUrl":"https://avatars.githubusercontent.com/u/340005?v=4","path":"/alvherre","isGitHub":false}],"committerAttribution":false,"committer":{"login":"alvherre","displayName":"Alvaro Herrera","avatarUrl":"https://avatars.githubusercontent.com/u/340005?v=4","path":"/alvherre","isGitHub":false},"parents":["ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620"],"globalRelayId":"MDY6Q29tbWl0OTI3NDQyOmY4OGQ0Y2ZjOWQ0MTdkYWMyZWU0MWE4ZjVlNTkzODk4ZTU2ZmQyYmQ=","sha1":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","sha2":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd"},"currentUser":null,"repo":{"id":927442,"defaultBranch":"master","name":"postgres","ownerLogin":"postgres","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2010-09-21T11:35:45.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/177543?v=4","public":true,"private":false,"isOrgOwned":true},"diffEntryData":[{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":104,"text":"@@ -105,11 +105,12 @@ static void GetMultiXactIdHintBits(MultiXactId multi, uint16 *new_infomask,","html":"@@ -105,11 +105,12 @@ static void GetMultiXactIdHintBits(MultiXactId multi, uint16 *new_infomask,","displayNoNewLineWarning":false,"position":0,"left":104,"right":104},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":105,"text":" \t\t\t\t\t uint16 *new_infomask2);","html":" \t\t\t\t\t \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003enew_infomask2\u003c/span\u003e);","displayNoNewLineWarning":false,"position":1,"left":105,"right":105},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":106,"text":" static TransactionId MultiXactIdGetUpdateXid(TransactionId xmax,","html":" \u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003eTransactionId\u003c/span\u003e \u003cspan class=pl-en\u003eMultiXactIdGetUpdateXid\u003c/span\u003e(\u003cspan class=pl-smi\u003eTransactionId\u003c/span\u003e \u003cspan class=pl-s1\u003exmax\u003c/span\u003e,","displayNoNewLineWarning":false,"position":2,"left":106,"right":106},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":107,"text":" \t\t\t\t\t\tuint16 t_infomask);","html":" \t\t\t\t\t\t\u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003et_infomask\u003c/span\u003e);","displayNoNewLineWarning":false,"position":3,"left":107,"right":107},{"stylingDirective":null,"type":"DELETION","blobLineNumber":108,"text":"-static void MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":"-\u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003evoid\u003c/span\u003e \u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e,","displayNoNewLineWarning":false,"position":4,"left":108,"right":107},{"stylingDirective":null,"type":"DELETION","blobLineNumber":109,"text":"-\t\t\t\tint *remaining, uint16 infomask);","html":"-\t\t\t\t\u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e, \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e);","displayNoNewLineWarning":false,"position":5,"left":109,"right":107},{"stylingDirective":null,"type":"DELETION","blobLineNumber":110,"text":"-static bool ConditionalMultiXactIdWait(MultiXactId multi,","html":"-\u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003ebool\u003c/span\u003e \u003cspan class=pl-en\u003eConditionalMultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e,","displayNoNewLineWarning":false,"position":6,"left":110,"right":107},{"stylingDirective":null,"type":"DELETION","blobLineNumber":111,"text":"-\t\t\t\t\t\t MultiXactStatus status, int *remaining,","html":"-\t\t\t\t\t\t \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e,","displayNoNewLineWarning":false,"position":7,"left":111,"right":107},{"stylingDirective":null,"type":"DELETION","blobLineNumber":112,"text":"-\t\t\t\t\t\t uint16 infomask);","html":"-\t\t\t\t\t\t \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e);","displayNoNewLineWarning":false,"position":8,"left":112,"right":107},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":108,"text":"+static void MultiXactIdWait(MultiXactId multi, MultiXactStatus status, uint16 infomask,","html":"+\u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003evoid\u003c/span\u003e \u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e,","displayNoNewLineWarning":false,"position":9,"left":112,"right":108},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":109,"text":"+\t\t\t\tRelation rel, ItemPointer ctid, XLTW_Oper oper,","html":"+\t\t\t\t\u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-smi\u003eItemPointer\u003c/span\u003e \u003cspan class=pl-s1\u003ectid\u003c/span\u003e, \u003cspan class=pl-smi\u003eXLTW_Oper\u003c/span\u003e \u003cspan class=pl-s1\u003eoper\u003c/span\u003e,","displayNoNewLineWarning":false,"position":10,"left":112,"right":109},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":110,"text":"+\t\t\t\tint *remaining);","html":"+\t\t\t\t\u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e);","displayNoNewLineWarning":false,"position":11,"left":112,"right":110},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":111,"text":"+static bool ConditionalMultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":"+\u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003ebool\u003c/span\u003e \u003cspan class=pl-en\u003eConditionalMultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e,","displayNoNewLineWarning":false,"position":12,"left":112,"right":111},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":112,"text":"+\t\t\t\t\t\t uint16 infomask, Relation rel, ItemPointer ctid,","html":"+\t\t\t\t\t\t \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, \u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-smi\u003eItemPointer\u003c/span\u003e \u003cspan class=pl-s1\u003ectid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":13,"left":112,"right":112},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":113,"text":"+\t\t\t\t\t\t XLTW_Oper oper, int *remaining);","html":"+\t\t\t\t\t\t \u003cspan class=pl-smi\u003eXLTW_Oper\u003c/span\u003e \u003cspan class=pl-s1\u003eoper\u003c/span\u003e, \u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e);","displayNoNewLineWarning":false,"position":14,"left":112,"right":113},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":114,"text":" static XLogRecPtr log_heap_new_cid(Relation relation, HeapTuple tup);","html":" \u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003eXLogRecPtr\u003c/span\u003e \u003cspan class=pl-en\u003elog_heap_new_cid\u003c/span\u003e(\u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erelation\u003c/span\u003e, \u003cspan class=pl-smi\u003eHeapTuple\u003c/span\u003e \u003cspan class=pl-s1\u003etup\u003c/span\u003e);","displayNoNewLineWarning":false,"position":15,"left":113,"right":114},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":115,"text":" static HeapTuple ExtractReplicaIdentity(Relation rel, HeapTuple tup, bool key_modified,","html":" \u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003eHeapTuple\u003c/span\u003e \u003cspan class=pl-en\u003eExtractReplicaIdentity\u003c/span\u003e(\u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-smi\u003eHeapTuple\u003c/span\u003e \u003cspan class=pl-s1\u003etup\u003c/span\u003e, \u003cspan class=pl-smi\u003ebool\u003c/span\u003e \u003cspan class=pl-s1\u003ekey_modified\u003c/span\u003e,","displayNoNewLineWarning":false,"position":16,"left":114,"right":115},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":116,"text":" \t\t\t\t\t\t\t\t\t\tbool *copy);","html":" \t\t\t\t\t\t\t\t\t\t\u003cspan class=pl-smi\u003ebool\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003ecopy\u003c/span\u003e);","displayNoNewLineWarning":false,"position":17,"left":115,"right":116},{"stylingDirective":null,"type":"HUNK","blobLineNumber":2714,"text":"@@ -2714,8 +2715,9 @@ heap_delete(Relation relation, ItemPointer tid,","html":"@@ -2714,8 +2715,9 @@ heap_delete(Relation relation, ItemPointer tid,","displayNoNewLineWarning":false,"position":18,"left":2713,"right":2714},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2715,"text":" \t\tif (infomask \u0026 HEAP_XMAX_IS_MULTI)","html":" \t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003einfomask\u003c/span\u003e \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e \u003cspan class=pl-c1\u003eHEAP_XMAX_IS_MULTI\u003c/span\u003e)","displayNoNewLineWarning":false,"position":19,"left":2714,"right":2715},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2716,"text":" \t\t{","html":" \t\t{","displayNoNewLineWarning":false,"position":20,"left":2715,"right":2716},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2717,"text":" \t\t\t/* wait for multixact */","html":" \t\t\t\u003cspan class=pl-c\u003e/* wait for multixact */\u003c/span\u003e","displayNoNewLineWarning":false,"position":21,"left":2716,"right":2717},{"stylingDirective":null,"type":"DELETION","blobLineNumber":2717,"text":"-\t\t\tMultiXactIdWait((MultiXactId) xwait, MultiXactStatusUpdate,","html":"-\t\t\t\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e((\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e) \u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003eMultiXactStatusUpdate\u003c/span\u003e,","displayNoNewLineWarning":false,"position":22,"left":2717,"right":2717},{"stylingDirective":null,"type":"DELETION","blobLineNumber":2718,"text":"-\t\t\t\t\t\t\tNULL, infomask);","html":"-\t\t\t\t\t\t\t\u003cspan class=pl-c1\u003eNULL\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e);","displayNoNewLineWarning":false,"position":23,"left":2718,"right":2717},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2718,"text":"+\t\t\tMultiXactIdWait((MultiXactId) xwait, MultiXactStatusUpdate, infomask,","html":"+\t\t\t\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e((\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e) \u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003eMultiXactStatusUpdate\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e,","displayNoNewLineWarning":false,"position":24,"left":2718,"right":2718},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2719,"text":"+\t\t\t\t\t\t\trelation, \u0026tp.t_data-\u003et_ctid, XLTW_Delete,","html":"+\t\t\t\t\t\t\t\u003cspan class=pl-s1\u003erelation\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003etp\u003c/span\u003e.\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e, \u003cspan class=pl-s1\u003eXLTW_Delete\u003c/span\u003e,","displayNoNewLineWarning":false,"position":25,"left":2718,"right":2719},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2720,"text":"+\t\t\t\t\t\t\tNULL);","html":"+\t\t\t\t\t\t\t\u003cspan class=pl-c1\u003eNULL\u003c/span\u003e);","displayNoNewLineWarning":false,"position":26,"left":2718,"right":2720},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2721,"text":" \t\t\tLockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);","html":" \t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003ebuffer\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_EXCLUSIVE\u003c/span\u003e);","displayNoNewLineWarning":false,"position":27,"left":2719,"right":2721},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2722,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":28,"left":2720,"right":2722},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2723,"text":" \t\t\t/*","html":" \t\t\t\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":29,"left":2721,"right":2723},{"stylingDirective":null,"type":"HUNK","blobLineNumber":2742,"text":"@@ -2741,7 +2743,7 @@ heap_delete(Relation relation, ItemPointer tid,","html":"@@ -2741,7 +2743,7 @@ heap_delete(Relation relation, ItemPointer tid,","displayNoNewLineWarning":false,"position":30,"left":2740,"right":2742},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2743,"text":" \t\telse","html":" \t\t\u003cspan class=pl-k\u003eelse\u003c/span\u003e","displayNoNewLineWarning":false,"position":31,"left":2741,"right":2743},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2744,"text":" \t\t{","html":" \t\t{","displayNoNewLineWarning":false,"position":32,"left":2742,"right":2744},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2745,"text":" \t\t\t/* wait for regular transaction to end */","html":" \t\t\t\u003cspan class=pl-c\u003e/* wait for regular transaction to end */\u003c/span\u003e","displayNoNewLineWarning":false,"position":33,"left":2743,"right":2745},{"stylingDirective":null,"type":"DELETION","blobLineNumber":2744,"text":"-\t\t\tXactLockTableWait(xwait);","html":"-\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exwait\u003c/span\u003e);","displayNoNewLineWarning":false,"position":34,"left":2744,"right":2745},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2746,"text":"+\t\t\tXactLockTableWait(xwait, relation, \u0026tp.t_data-\u003et_ctid, XLTW_Delete);","html":"+\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exwait\u003c/span\u003e\u003cspan class=\"x x-first\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x\"\u003erelation\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"pl-s1 x\"\u003etp\u003c/span\u003e\u003cspan class=\"x\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003et_data\u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003et_ctid\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x x-last\"\u003eXLTW_Delete\u003c/span\u003e);","displayNoNewLineWarning":false,"position":35,"left":2744,"right":2746},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2747,"text":" \t\t\tLockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);","html":" \t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003ebuffer\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_EXCLUSIVE\u003c/span\u003e);","displayNoNewLineWarning":false,"position":36,"left":2745,"right":2747},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2748,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":37,"left":2746,"right":2748},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2749,"text":" \t\t\t/*","html":" \t\t\t\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":38,"left":2747,"right":2749},{"stylingDirective":null,"type":"HUNK","blobLineNumber":3267,"text":"@@ -3266,8 +3268,9 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,","html":"@@ -3266,8 +3268,9 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,","displayNoNewLineWarning":false,"position":39,"left":3265,"right":3267},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3268,"text":" \t\t\tint\t\t\tremain;","html":" \t\t\t\u003cspan class=pl-smi\u003eint\u003c/span\u003e\t\t\t\u003cspan class=pl-s1\u003eremain\u003c/span\u003e;","displayNoNewLineWarning":false,"position":40,"left":3266,"right":3268},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3269,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":41,"left":3267,"right":3269},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3270,"text":" \t\t\t/* wait for multixact */","html":" \t\t\t\u003cspan class=pl-c\u003e/* wait for multixact */\u003c/span\u003e","displayNoNewLineWarning":false,"position":42,"left":3268,"right":3270},{"stylingDirective":null,"type":"DELETION","blobLineNumber":3269,"text":"-\t\t\tMultiXactIdWait((MultiXactId) xwait, mxact_status, \u0026remain,","html":"-\t\t\t\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e((\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e) \u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003emxact_status\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003eremain\u003c/span\u003e,","displayNoNewLineWarning":false,"position":43,"left":3269,"right":3270},{"stylingDirective":null,"type":"DELETION","blobLineNumber":3270,"text":"-\t\t\t\t\t\t\tinfomask);","html":"-\t\t\t\t\t\t\t\u003cspan class=pl-s1\u003einfomask\u003c/span\u003e);","displayNoNewLineWarning":false,"position":44,"left":3270,"right":3270},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":3271,"text":"+\t\t\tMultiXactIdWait((MultiXactId) xwait, mxact_status, infomask,","html":"+\t\t\t\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e((\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e) \u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003emxact_status\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e,","displayNoNewLineWarning":false,"position":45,"left":3270,"right":3271},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":3272,"text":"+\t\t\t\t\t\t\trelation, \u0026oldtup.t_data-\u003et_ctid, XLTW_Update,","html":"+\t\t\t\t\t\t\t\u003cspan class=pl-s1\u003erelation\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003eoldtup\u003c/span\u003e.\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e, \u003cspan class=pl-s1\u003eXLTW_Update\u003c/span\u003e,","displayNoNewLineWarning":false,"position":46,"left":3270,"right":3272},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":3273,"text":"+\t\t\t\t\t\t\t\u0026remain);","html":"+\t\t\t\t\t\t\t\u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003eremain\u003c/span\u003e);","displayNoNewLineWarning":false,"position":47,"left":3270,"right":3273},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3274,"text":" \t\t\tLockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);","html":" \t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003ebuffer\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_EXCLUSIVE\u003c/span\u003e);","displayNoNewLineWarning":false,"position":48,"left":3271,"right":3274},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3275,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":49,"left":3272,"right":3275},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3276,"text":" \t\t\t/*","html":" \t\t\t\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":50,"left":3273,"right":3276},{"stylingDirective":null,"type":"HUNK","blobLineNumber":3343,"text":"@@ -3341,7 +3344,8 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,","html":"@@ -3341,7 +3344,8 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,","displayNoNewLineWarning":false,"position":51,"left":3340,"right":3343},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3344,"text":" \t\t\telse","html":" \t\t\t\u003cspan class=pl-k\u003eelse\u003c/span\u003e","displayNoNewLineWarning":false,"position":52,"left":3341,"right":3344},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3345,"text":" \t\t\t{","html":" \t\t\t{","displayNoNewLineWarning":false,"position":53,"left":3342,"right":3345},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3346,"text":" \t\t\t\t/* wait for regular transaction to end */","html":" \t\t\t\t\u003cspan class=pl-c\u003e/* wait for regular transaction to end */\u003c/span\u003e","displayNoNewLineWarning":false,"position":54,"left":3343,"right":3346},{"stylingDirective":null,"type":"DELETION","blobLineNumber":3344,"text":"-\t\t\t\tXactLockTableWait(xwait);","html":"-\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e);","displayNoNewLineWarning":false,"position":55,"left":3344,"right":3346},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":3347,"text":"+\t\t\t\tXactLockTableWait(xwait, relation, \u0026oldtup.t_data-\u003et_ctid,","html":"+\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003erelation\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003eoldtup\u003c/span\u003e.\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":56,"left":3344,"right":3347},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":3348,"text":"+\t\t\t\t\t\t\t\t XLTW_Update);","html":"+\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_Update\u003c/span\u003e);","displayNoNewLineWarning":false,"position":57,"left":3344,"right":3348},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3349,"text":" \t\t\t\tLockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);","html":" \t\t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003ebuffer\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_EXCLUSIVE\u003c/span\u003e);","displayNoNewLineWarning":false,"position":58,"left":3345,"right":3349},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3350,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":59,"left":3346,"right":3350},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":3351,"text":" \t\t\t\t/*","html":" \t\t\t\t\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":60,"left":3347,"right":3351},{"stylingDirective":null,"type":"HUNK","blobLineNumber":4405,"text":"@@ -4402,14 +4406,18 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,","html":"@@ -4402,14 +4406,18 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,","displayNoNewLineWarning":false,"position":61,"left":4401,"right":4405},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4406,"text":" \t\t\t\tif (nowait)","html":" \t\t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003enowait\u003c/span\u003e)","displayNoNewLineWarning":false,"position":62,"left":4402,"right":4406},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4407,"text":" \t\t\t\t{","html":" \t\t\t\t{","displayNoNewLineWarning":false,"position":63,"left":4403,"right":4407},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4408,"text":" \t\t\t\t\tif (!ConditionalMultiXactIdWait((MultiXactId) xwait,","html":" \t\t\t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (!\u003cspan class=pl-en\u003eConditionalMultiXactIdWait\u003c/span\u003e((\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e) \u003cspan class=pl-s1\u003exwait\u003c/span\u003e,","displayNoNewLineWarning":false,"position":64,"left":4404,"right":4408},{"stylingDirective":null,"type":"DELETION","blobLineNumber":4405,"text":"-\t\t\t\t\t\t\t\t\t\t\t\t\tstatus, NULL, infomask))","html":"-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-c1\u003eNULL\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e))","displayNoNewLineWarning":false,"position":65,"left":4405,"right":4408},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4409,"text":"+\t\t\t\t\t\t\t\t\t\t\t\t status, infomask, relation,","html":"+\t\t\t\t\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, \u003cspan class=pl-s1\u003erelation\u003c/span\u003e,","displayNoNewLineWarning":false,"position":66,"left":4405,"right":4409},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4410,"text":"+\t\t\t\t\t\t\t\t\t\t\t\t\t\u0026tuple-\u003et_data-\u003et_ctid,","html":"+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003etuple\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":67,"left":4405,"right":4410},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4411,"text":"+\t\t\t\t\t\t\t\t\t\t\t\t\tXLTW_Lock, NULL))","html":"+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003cspan class=pl-s1\u003eXLTW_Lock\u003c/span\u003e, \u003cspan class=pl-c1\u003eNULL\u003c/span\u003e))","displayNoNewLineWarning":false,"position":68,"left":4405,"right":4411},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4412,"text":" \t\t\t\t\t\tereport(ERROR,","html":" \t\t\t\t\t\t\u003cspan class=pl-en\u003eereport\u003c/span\u003e(\u003cspan class=pl-c1\u003eERROR\u003c/span\u003e,","displayNoNewLineWarning":false,"position":69,"left":4406,"right":4412},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4413,"text":" \t\t\t\t\t\t\t\t(errcode(ERRCODE_LOCK_NOT_AVAILABLE),","html":" \t\t\t\t\t\t\t\t(\u003cspan class=pl-en\u003eerrcode\u003c/span\u003e(\u003cspan class=pl-c1\u003eERRCODE_LOCK_NOT_AVAILABLE\u003c/span\u003e),","displayNoNewLineWarning":false,"position":70,"left":4407,"right":4413},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4414,"text":" \t\t\t\t\t\t\t\t errmsg(\"could not obtain lock on row in relation \\\"%s\\\"\",","html":" \t\t\t\t\t\t\t\t \u003cspan class=pl-en\u003eerrmsg\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;could not obtain lock on row in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e,","displayNoNewLineWarning":false,"position":71,"left":4408,"right":4414},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4415,"text":" \t\t\t\t\t\t\t\t\t\tRelationGetRelationName(relation))));","html":" \t\t\t\t\t\t\t\t\t\t\u003cspan class=pl-en\u003eRelationGetRelationName\u003c/span\u003e(\u003cspan class=pl-s1\u003erelation\u003c/span\u003e))));","displayNoNewLineWarning":false,"position":72,"left":4409,"right":4415},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4416,"text":" \t\t\t\t}","html":" \t\t\t\t}","displayNoNewLineWarning":false,"position":73,"left":4410,"right":4416},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4417,"text":" \t\t\t\telse","html":" \t\t\t\t\u003cspan class=pl-k\u003eelse\u003c/span\u003e","displayNoNewLineWarning":false,"position":74,"left":4411,"right":4417},{"stylingDirective":null,"type":"DELETION","blobLineNumber":4412,"text":"-\t\t\t\t\tMultiXactIdWait((MultiXactId) xwait, status, NULL, infomask);","html":"-\t\t\t\t\t\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e((\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e) \u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-c1\u003eNULL\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e);","displayNoNewLineWarning":false,"position":75,"left":4412,"right":4417},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4418,"text":"+\t\t\t\t\tMultiXactIdWait((MultiXactId) xwait, status, infomask,","html":"+\t\t\t\t\t\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e((\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e) \u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e,","displayNoNewLineWarning":false,"position":76,"left":4412,"right":4418},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4419,"text":"+\t\t\t\t\t\t\t\t\trelation, \u0026tuple-\u003et_data-\u003et_ctid,","html":"+\t\t\t\t\t\t\t\t\t\u003cspan class=pl-s1\u003erelation\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003etuple\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":77,"left":4412,"right":4419},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4420,"text":"+\t\t\t\t\t\t\t\t\tXLTW_Lock, NULL);","html":"+\t\t\t\t\t\t\t\t\t\u003cspan class=pl-s1\u003eXLTW_Lock\u003c/span\u003e, \u003cspan class=pl-c1\u003eNULL\u003c/span\u003e);","displayNoNewLineWarning":false,"position":78,"left":4412,"right":4420},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4421,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":79,"left":4413,"right":4421},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4422,"text":" \t\t\t\t/* if there are updates, follow the update chain */","html":" \t\t\t\t\u003cspan class=pl-c\u003e/* if there are updates, follow the update chain */\u003c/span\u003e","displayNoNewLineWarning":false,"position":80,"left":4414,"right":4422},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4423,"text":" \t\t\t\tif (follow_updates 8000 \u0026\u0026","html":" \t\t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003efollow_updates\u003c/span\u003e \u003cspan class=pl-c1\u003e\u0026amp;\u0026amp;\u003c/span\u003e","displayNoNewLineWarning":false,"position":81,"left":4415,"right":4423},{"stylingDirective":null,"type":"HUNK","blobLineNumber":4471,"text":"@@ -4464,7 +4472,8 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,","html":"@@ -4464,7 +4472,8 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,","displayNoNewLineWarning":false,"position":82,"left":4463,"right":4471},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4472,"text":" \t\t\t\t\t\t\t\t\t\tRelationGetRelationName(relation))));","html":" \t\t\t\t\t\t\t\t\t\t\u003cspan class=pl-en\u003eRelationGetRelationName\u003c/span\u003e(\u003cspan class=pl-s1\u003erelation\u003c/span\u003e))));","displayNoNewLineWarning":false,"position":83,"left":4464,"right":4472},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4473,"text":" \t\t\t\t}","html":" \t\t\t\t}","displayNoNewLineWarning":false,"position":84,"left":4465,"right":4473},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4474,"text":" \t\t\t\telse","html":" \t\t\t\t\u003cspan class=pl-k\u003eelse\u003c/span\u003e","displayNoNewLineWarning":false,"position":85,"left":4466,"right":4474},{"stylingDirective":null,"type":"DELETION","blobLineNumber":4467,"text":"-\t\t\t\t\tXactLockTableWait(xwait);","html":"-\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e);","displayNoNewLineWarning":false,"position":86,"left":4467,"right":4474},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4475,"text":"+\t\t\t\t\tXactLockTableWait(xwait, relation, \u0026tuple-\u003et_data-\u003et_ctid,","html":"+\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003erelation\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003etuple\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":87,"left":4467,"right":4475},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":4476,"text":"+\t\t\t\t\t\t\t\t\t XLTW_Lock);","html":"+\t\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_Lock\u003c/span\u003e);","displayNoNewLineWarning":false,"position":88,"left":4467,"right":4476},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4477,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":89,"left":4468,"right":4477},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4478,"text":" \t\t\t\t/* if there are updates, follow the update chain */","html":" \t\t\t\t\u003cspan class=pl-c\u003e/* if there are updates, follow the update chain */\u003c/span\u003e","displayNoNewLineWarning":false,"position":90,"left":4469,"right":4478},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":4479,"text":" \t\t\t\tif (follow_updates \u0026\u0026","html":" \t\t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003efollow_updates\u003c/span\u003e \u003cspan class=pl-c1\u003e\u0026amp;\u0026amp;\u003c/span\u003e","displayNoNewLineWarning":false,"position":91,"left":4470,"right":4479},{"stylingDirective":null,"type":"HUNK","blobLineNumber":5159,"text":"@@ -5151,7 +5160,9 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid,","html":"@@ -5151,7 +5160,9 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid,","displayNoNewLineWarning":false,"position":92,"left":5150,"right":5159},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5160,"text":" \t\t\t\t\tif (needwait)","html":" \t\t\t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003eneedwait\u003c/span\u003e)","displayNoNewLineWarning":false,"position":93,"left":5151,"right":5160},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5161,"text":" \t\t\t\t\t{","html":" \t\t\t\t\t{","displayNoNewLineWarning":false,"position":94,"left":5152,"right":5161},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5162,"text":" \t\t\t\t\t\tLockBuffer(buf, BUFFER_LOCK_UNLOCK);","html":" \t\t\t\t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003ebuf\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_UNLOCK\u003c/span\u003e);","displayNoNewLineWarning":false,"position":95,"left":5153,"right":5162},{"stylingDirective":null,"type":"DELETION","blobLineNumber":5154,"text":"-\t\t\t\t\t\tXactLockTableWait(members[i].xid);","html":"-\t\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003emembers\u003c/span\u003e[\u003cspan class=pl-s1\u003ei\u003c/span\u003e].\u003cspan class=pl-c1\u003exid\u003c/span\u003e);","displayNoNewLineWarning":false,"position":96,"left":5154,"right":5162},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":5163,"text":"+\t\t\t\t\t\tXactLockTableWait(members[i].xid, rel,","html":"+\t\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003emembers\u003c/span\u003e[\u003cspan class=pl-s1\u003ei\u003c/span\u003e].\u003cspan class=pl-c1\u003exid\u003c/span\u003e, \u003cspan class=pl-s1\u003erel\u003c/span\u003e,","displayNoNewLineWarning":false,"position":97,"left":5154,"right":5163},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":5164,"text":"+\t\t\t\t\t\t\t\t\t\t \u0026mytup.t_data-\u003et_ctid,","html":"+\t\t\t\t\t\t\t\t\t\t \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003emytup\u003c/span\u003e.\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":98,"left":5154,"right":5164},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":5165,"text":"+\t\t\t\t\t\t\t\t\t\t XLTW_LockUpdated);","html":"+\t\t\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_LockUpdated\u003c/span\u003e);","displayNoNewLineWarning":false,"position":99,"left":5154,"right":5165},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5166,"text":" \t\t\t\t\t\tpfree(members);","html":" \t\t\t\t\t\t\u003cspan class=pl-en\u003epfree\u003c/span\u003e(\u003cspan class=pl-s1\u003emembers\u003c/span\u003e);","displayNoNewLineWarning":false,"position":100,"left":5155,"right":5166},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5167,"text":" \t\t\t\t\t\tgoto l4;","html":" \t\t\t\t\t\tgoto \u003cspan class=pl-ent\u003el4\u003c/span\u003e;","displayNoNewLineWarning":false,"position":101,"left":5156,"right":5167},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5168,"text":" \t\t\t\t\t}","html":" \t\t\t\t\t}","displayNoNewLineWarning":false,"position":102,"left":5157,"right":5168},{"stylingDirective":null,"type":"HUNK","blobLineNumber":5221,"text":"@@ -5211,7 +5222,8 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid,","html":"@@ -5211,7 +5222,8 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid,","displayNoNewLineWarning":false,"position":103,"left":5210,"right":5221},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5222,"text":" \t\t\t\tif (needwait)","html":" \t\t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003eneedwait\u003c/span\u003e)","displayNoNewLineWarning":false,"position":104,"left":5211,"right":5222},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5223,"text":" \t\t\t\t{","html":" \t\t\t\t{","displayNoNewLineWarning":false,"position":105,"left":5212,"right":5223},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5224,"text":" \t\t\t\t\tLockBuffer(buf, BUFFER_LOCK_UNLOCK);","html":" \t\t\t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003ebuf\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_UNLOCK\u003c/span\u003e);","displayNoNewLineWarning":false,"position":106,"left":5213,"right":5224},{"stylingDirective":null,"type":"DELETION","blobLineNumber":5214,"text":"-\t\t\t\t\tXactLockTableWait(rawxmax);","html":"-\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003erawxmax\u003c/span\u003e);","displayNoNewLineWarning":false,"position":107,"left":5214,"right":5224},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":5225,"text":"+\t\t\t\t\tXactLockTableWait(rawxmax, rel, \u0026mytup.t_data-\u003et_ctid,","html":"+\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003erawxmax\u003c/span\u003e, \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003emytup\u003c/span\u003e.\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":108,"left":5214,"right":5225},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":5226,"text":"+\t\t\t\t\t\t\t\t\t XLTW_LockUpdated);","html":"+\t\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_LockUpdated\u003c/span\u003e);","displayNoNewLineWarning":false,"position":109,"left":5214,"right":5226},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5227,"text":" \t\t\t\t\tgoto l4;","html":" \t\t\t\t\tgoto \u003cspan class=pl-ent\u003el4\u003c/span\u003e;","displayNoNewLineWarning":false,"position":110,"left":5215,"right":5227},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5228,"text":" \t\t\t\t}","html":" \t\t\t\t}","displayNoNewLineWarning":false,"position":111,"left":5216,"right":5228},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":5229,"text":" \t\t\t\tif (res != HeapTupleMayBeUpdated)","html":" \t\t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003eres\u003c/span\u003e \u003cspan class=pl-c1\u003e!=\u003c/span\u003e \u003cspan class=pl-s1\u003eHeapTupleMayBeUpdated\u003c/span\u003e)","displayNoNewLineWarning":false,"position":112,"left":5217,"right":5229},{"stylingDirective":null,"type":"HUNK","blobLineNumber":6087,"text":"@@ -6076,6 +6088,15 @@ HeapTupleGetUpdateXid(HeapTupleHeader tuple)","html":"@@ -6076,6 +6088,15 @@ HeapTupleGetUpdateXid(HeapTupleHeader tuple)","displayNoNewLineWarning":false,"position":113,"left":6075,"right":6087},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6088,"text":" * Do_MultiXactIdWait","html":" \u003cspan class=pl-c\u003e * Do_MultiXactIdWait\u003c/span\u003e","displayNoNewLineWarning":false,"position":114,"left":6076,"right":6088},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6089,"text":" *\t\tActual implementation for the two functions below.","html":" \u003cspan class=pl-c\u003e *\t\tActual implementation for the two functions below.\u003c/span\u003e","displayNoNewLineWarning":false,"position":115,"left":6077,"right":6089},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6090,"text":" *","html":" \u003cspan class=pl-c\u003e *\u003c/span\u003e","displayNoNewLineWarning":false,"position":116,"left":6078,"right":6090},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6091,"text":"+ * 'multi', 'status' and 'infomask' indicate what to sleep on (the status is","html":"+\u003cspan class=pl-c\u003e * \u0026#39;multi\u0026#39;, \u0026#39;status\u0026#39; and \u0026#39;infomask\u0026#39; indicate what to sleep on (the status is\u003c/span\u003e","displayNoNewLineWarning":false,"position":117,"left":6078,"right":6091},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6092,"text":"+ * needed to ensure we only sleep on conflicting members, and the infomask is","html":"+\u003cspan class=pl-c\u003e * needed to ensure we only sleep on conflicting members, and the infomask is\u003c/span\u003e","displayNoNewLineWarning":false,"position":118,"left":6078,"right":6092},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6093,"text":"+ * used to optimize multixact access in case it's a lock-only multi); 'nowait'","html":"+\u003cspan class=pl-c\u003e * used to optimize multixact access in case it\u0026#39;s a lock-only multi); \u0026#39;nowait\u0026#39;\u003c/span\u003e","displayNoNewLineWarning":false,"position":119,"left":6078,"right":6093},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6094,"text":"+ * indicates whether to use conditional lock acquisition, to allow callers to","html":"+\u003cspan class=pl-c\u003e * indicates whether to use conditional lock acquisition, to allow callers to\u003c/span\u003e","displayNoNewLineWarning":false,"position":120,"left":6078,"right":6094},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6095,"text":"+ * fail if lock is unavailable. 'rel', 'ctid' and 'oper' are used to set up","html":"+\u003cspan class=pl-c\u003e * fail if lock is unavailable. \u0026#39;rel\u0026#39;, \u0026#39;ctid\u0026#39; and \u0026#39;oper\u0026#39; are used to set up\u003c/span\u003e","displayNoNewLineWarning":false,"position":121,"left":6078,"right":6095},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6096,"text":"+ * context information for error messages.\t'remaining', if not NULL, receives","html":"+\u003cspan class=pl-c\u003e * context information for error messages.\t\u0026#39;remaining\u0026#39;, if not NULL, receives\u003c/span\u003e","displayNoNewLineWarning":false,"position":122,"left":6078,"right":6096},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6097,"text":"+ * the number of members that are still running, including any (non-aborted)","html":"+\u003cspan class=pl-c\u003e * the number of members that are still running, including any (non-aborted)\u003c/span\u003e","displayNoNewLineWarning":false,"position":123,"left":6078,"right":6097},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6098,"text":"+ * subtransactions of our own transaction.","html":"+\u003cspan class=pl-c\u003e * subtransactions of our own transaction.\u003c/span\u003e","displayNoNewLineWarning":false,"position":124,"left":6078,"right":6098},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6099,"text":"+ *","html":"+\u003cspan class=pl-c\u003e *\u003c/span\u003e","displayNoNewLineWarning":false,"position":125,"left":6078,"right":6099},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6100,"text":" * We do this by sleeping on each member using XactLockTableWait. Any","html":" \u003cspan class=pl-c\u003e * We do this by sleeping on each member using XactLockTableWait. Any\u003c/span\u003e","displayNoNewLineWarning":false,"position":126,"left":6079,"right":6100},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6101,"text":" * members that belong to the current backend are *not* waited for, however;","html":" \u003cspan class=pl-c\u003e * members that belong to the current backend are *not* waited for, however;\u003c/span\u003e","displayNoNewLineWarning":false,"position":127,"left":6080,"right":6101},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6102,"text":" * this would not merely be useless but would lead to Assert failure inside","html":" \u003cspan class=pl-c\u003e * this would not merely be useless but would lead to Assert failure inside\u003c/span\u003e","displayNoNewLineWarning":false,"position":128,"left":6081,"right":6102},{"stylingDirective":null,"type":"HUNK","blobLineNumber":6113,"text":"@@ -6093,7 +6114,9 @@ HeapTupleGetUpdateXid(HeapTupleHeader tuple)","html":"@@ -6093,7 +6114,9 @@ HeapTupleGetUpdateXid(HeapTupleHeader tuple)","displayNoNewLineWarning":false,"position":129,"left":6092,"right":6113},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6114,"text":" */","html":" \u003cspan class=pl-c\u003e */\u003c/span\u003e","displayNoNewLineWarning":false,"position":130,"left":6093,"right":6114},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6115,"text":" static bool","html":" \u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003ebool\u003c/span\u003e","displayNoNewLineWarning":false,"position":131,"left":6094,"right":6115},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6116,"text":" Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":" \u003cspan class=pl-en\u003eDo_MultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e,","displayNoNewLineWarning":false,"position":132,"left":6095,"right":6116},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6096,"text":"-\t\t\t\t int *remaining, uint16 infomask, bool nowait)","html":"-\t\t\t\t \u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e, \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, \u003cspan class=pl-smi\u003ebool\u003c/span\u003e \u003cspan class=pl-s1\u003enowait\u003c/span\u003e)","displayNoNewLineWarning":false,"position":133,"left":6096,"right":6116},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6117,"text":"+\t\t\t\t uint16 infomask, bool nowait,","html":"+\t\t\t\t \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, \u003cspan class=pl-smi\u003ebool\u003c/span\u003e \u003cspan class=pl-s1\u003enowait\u003c/span\u003e,","displayNoNewLineWarning":false,"position":134,"left":6096,"right":6117},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6118,"text":"+\t\t\t\t Relation rel, ItemPointer ctid, XLTW_Oper oper,","html":"+\t\t\t\t \u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-smi\u003eItemPointer\u003c/span\u003e \u003cspan class=pl-s1\u003ectid\u003c/span\u003e, \u003cspan class=pl-smi\u003eXLTW_Oper\u003c/span\u003e \u003cspan class=pl-s1\u003eoper\u003c/span\u003e,","displayNoNewLineWarning":false,"position":135,"left":6096,"right":6118},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6119,"text":"+\t\t\t\t int *remaining)","html":"+\t\t\t\t \u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e)","displayNoNewLineWarning":false,"position":136,"left":6096,"right":6119},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6120,"text":" {","html":" {","displayNoNewLineWarning":false,"position":137,"left":6097,"right":6120},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6121,"text":" \tbool\t\tallow_old;","html":" \t\u003cspan class=pl-smi\u003ebool\u003c/span\u003e\t\t\u003cspan class=pl-s1\u003eallow_old\u003c/span\u003e;","displayNoNewLineWarning":false,"position":138,"left":6098,"right":6121},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6122,"text":" \tbool\t\tresult = true;","html":" \t\u003cspan class=pl-smi\u003ebool\u003c/span\u003e\t\t\u003cspan class=pl-s1\u003eresult\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e true;","displayNoNewLineWarning":false,"position":139,"left":6099,"right":6122},{"stylingDirective":null,"type":"HUNK","blobLineNumber":6152,"text":"@@ -6130,6 +6153,12 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":"@@ -6130,6 +6153,12 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","displayNoNewLineWarning":false,"position":140,"left":6129,"right":6152},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6153,"text":" \t\t\t/*","html":" \t\t\t\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":141,"left":6130,"right":6153},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6154,"text":" \t\t\t * This member conflicts with our multi, so we have to sleep (or","html":" \u003cspan class=pl-c\u003e\t\t\t * This member conflicts with our multi, so we have to sleep (or\u003c/span\u003e","displayNoNewLineWarning":false,"position":142,"left":6131,"right":6154},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6155,"text":" \t\t\t * return failure, if asked to avoid waiting.)","html":" \u003cspan class=pl-c\u003e\t\t\t * return failure, if asked to avoid waiting.)\u003c/span\u003e","displayNoNewLineWarning":false,"position":143,"left":6132,"right":6155},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6156,"text":"+\t\t\t *","html":"+\u003cspan class=pl-c\u003e\t\t\t *\u003c/span\u003e","displayNoNewLineWarning":false,"position":144,"left":6132,"right":6156},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6157,"text":"+\t\t\t * Note that we don't set up an error context callback ourselves,","html":"+\u003cspan class=pl-c\u003e\t\t\t * Note that we don\u0026#39;t set up an error context callback ourselves,\u003c/span\u003e","displayNoNewLineWarning":false,"position":145,"left":6132,"right":6157},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6158,"text":"+\t\t\t * but instead we pass the info down to XactLockTableWait.\tThis","html":"+\u003cspan class=pl-c\u003e\t\t\t * but instead we pass the info down to XactLockTableWait.\tThis\u003c/span\u003e","displayNoNewLineWarning":false,"position":146,"left":6132,"right":6158},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6159,"text":"+\t\t\t * might seem a bit wasteful because the context is set up and","html":"+\u003cspan class=pl-c\u003e\t\t\t * might seem a bit wasteful because the context is set up and\u003c/span\u003e","displayNoNewLineWarning":false,"position":147,"left":6132,"right":6159},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6160,"text":"+\t\t\t * tore down for each member of the multixact, but in reality it","html":"+\u003cspan class=pl-c\u003e\t\t\t * tore down for each member of the multixact, but in reality it\u003c/span\u003e","displayNoNewLineWarning":false,"position":148,"left":6132,"right":6160},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6161,"text":"+\t\t\t * should be barely noticeable, and it avoids duplicate code.","html":"+\u003cspan class=pl-c\u003e\t\t\t * should be barely noticeable, and it avoids duplicate code.\u003c/span\u003e","displayNoNewLineWarning":false,"position":149,"left":6132,"right":6161},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6162,"text":" \t\t\t */","html":" \u003cspan class=pl-c\u003e\t\t\t */\u003c/span\u003e","displayNoNewLineWarning":false,"position":150,"left":6133,"right":6162},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6163,"text":" \t\t\tif (nowait)","html":" \t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003enowait\u003c/span\u003e)","displayNoNewLineWarning":false,"position":151,"left":6134,"right":6163},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6164,"text":" \t\t\t{","html":" \t\t\t{","displayNoNewLineWarning":false,"position":152,"left":6135,"right":6164},{"stylingDirective":null,"type":"HUNK","blobLineNumber":6166,"text":"@@ -6138,7 +6167,7 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":"@@ -6138,7 +6167,7 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","displayNoNewLineWarning":false,"position":153,"left":6137,"right":6166},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6167,"text":" \t\t\t\t\tbreak;","html":" \t\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":154,"left":6138,"right":6167},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6168,"text":" \t\t\t}","html":" \t\t\t}","displayNoNewLineWarning":false,"position":155,"left":6139,"right":6168},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6169,"text":" \t\t\telse","html":" \t\t\t\u003cspan class=pl-k\u003eelse\u003c/span\u003e","displayNoNewLineWarning":false,"position":156,"left":6140,"right":6169},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6141,"text":"-\t\t\t\tXactLockTableWait(memxid);","html":"-\t\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ememxid\u003c/span\u003e);","displayNoNewLineWarning":false,"position":157,"left":6141,"right":6169},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6170,"text":"+\t\t\t\tXactLockTableWait(memxid, rel, ctid, oper);","html":"+\t\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ememxid\u003c/span\u003e\u003cspan class=\"x x-first\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x\"\u003erel\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x\"\u003ectid\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x x-last\"\u003eoper\u003c/span\u003e);","displayNoNewLineWarning":false,"position":158,"left":6141,"right":6170},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6171,"text":" \t\t}","html":" \t\t}","displayNoNewLineWarning":false,"position":159,"left":6142,"right":6171},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6172,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":160,"left":6143,"right":6172},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6173,"text":" \t\tpfree(members);","html":" \t\t\u003cspan class=pl-en\u003epfree\u003c/span\u003e(\u003cspan class=pl-s1\u003emembers\u003c/span\u003e);","displayNoNewLineWarning":false,"position":161,"left":6144,"right":6173},{"stylingDirective":null,"type":"HUNK","blobLineNumber":6187,"text":"@@ -6159,13 +6188,14 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":"@@ -6159,13 +6188,14 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","displayNoNewLineWarning":false,"position":162,"left":6158,"right":6187},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6188,"text":" *","html":" \u003cspan class=pl-c\u003e *\u003c/span\u003e","displayNoNewLineWarning":false,"position":163,"left":6159,"right":6188},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6189,"text":" * We return (in *remaining, if not NULL) the number of members that are still","html":" \u003cspan class=pl-c\u003e * We return (in *remaining, if not NULL) the number of members that are still\u003c/span\u003e","displayNoNewLineWarning":false,"position":164,"left":6160,"right":6189},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6190,"text":" * running, including any (non-aborted) subtransactions of our own transaction.","html":" \u003cspan class=pl-c\u003e * running, including any (non-aborted) subtransactions of our own transaction.\u003c/span\u003e","displayNoNewLineWarning":false,"position":165,"left":6161,"right":6190},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6162,"text":"- *","html":"-\u003cspan class=pl-c\u003e *\u003c/span\u003e","displayNoNewLineWarning":false,"position":166,"left":6162,"right":6190},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6191,"text":" */","html":" \u003cspan class=pl-c\u003e */\u003c/span\u003e","displayNoNewLineWarning":false,"position":167,"left":6163,"right":6191},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6192,"text":" static void","html":" \u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003evoid\u003c/span\u003e","displayNoNewLineWarning":false,"position":168,"left":6164,"right":6192},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6165,"text":"-MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":"-\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e,","displayNoNewLineWarning":false,"position":169,"left":6165,"right":6192},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6166,"text":"-\t\t\t\tint *remaining, uint16 infomask)","html":"-\t\t\t\t\u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e, \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e)","displayNoNewLineWarning":false,"position":170,"left":6166,"right":6192},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6193,"text":"+MultiXactIdWait(MultiXactId multi, MultiXactStatus status, uint16 infomask,","html":"+\u003cspan class=pl-en\u003eMultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e,","displayNoNewLineWarning":false,"position":171,"left":6166,"right":6193},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6194,"text":"+\t\t\t\tRelation rel, ItemPointer ctid, XLTW_Oper oper,","html":"+\t\t\t\t\u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-smi\u003eItemPointer\u003c/span\u003e \u003cspan class=pl-s1\u003ectid\u003c/span\u003e, \u003cspan class=pl-smi\u003eXLTW_Oper\u003c/span\u003e \u003cspan class=pl-s1\u003eoper\u003c/span\u003e,","displayNoNewLineWarning":false,"position":172,"left":6166,"right":6194},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6195,"text":"+\t\t\t\tint *remaining)","html":"+\t\t\t\t\u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e)","displayNoNewLineWarning":false,"position":173,"left":6166,"right":6195},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6196,"text":" {","html":" {","displayNoNewLineWarning":false,"position":174,"left":6167,"right":6196},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6168,"text":"-\tDo_MultiXactIdWait(multi, status, remaining, infomask, false);","html":"-\t\u003cspan class=pl-en\u003eDo_MultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-s1\u003eremaining\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, false);","displayNoNewLineWarning":false,"position":175,"left":6168,"right":6196},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6197,"text":"+\t(void) Do_MultiXactIdWait(multi, status, infomask, false,","html":"+\t(\u003cspan class=pl-smi\u003evoid\u003c/span\u003e) \u003cspan class=pl-en\u003eDo_MultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, false,","displayNoNewLineWarning":false,"position":176,"left":6168,"right":6197},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6198,"text":"+\t\t\t\t\t\t\t rel, ctid, oper, remaining);","html":"+\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-s1\u003ectid\u003c/span\u003e, \u003cspan class=pl-s1\u003eoper\u003c/span\u003e, \u003cspan class=pl-s1\u003eremaining\u003c/span\u003e);","displayNoNewLineWarning":false,"position":177,"left":6168,"right":6198},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6199,"text":" }","html":" }","displayNoNewLineWarning":false,"position":178,"left":6169,"right":6199},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6200,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":179,"left":6170,"right":6200},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6201,"text":" /*","html":" \u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":180,"left":6171,"right":6201},{"stylingDirective":null,"type":"HUNK","blobLineNumber":6212,"text":"@@ -6183,9 +6213,11 8000 @@ MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":"@@ -6183,9 +6213,11 @@ MultiXactIdWait(MultiXactId multi, MultiXactStatus status,","displayNoNewLineWarning":false,"position":181,"left":6182,"right":6212},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6213,"text":" */","html":" \u003cspan class=pl-c\u003e */\u003c/span\u003e","displayNoNewLineWarning":false,"position":182,"left":6183,"right":6213},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6214,"text":" static bool","html":" \u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003ebool\u003c/span\u003e","displayNoNewLineWarning":false,"position":183,"left":6184,"right":6214},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6215,"text":" ConditionalMultiXactIdWait(MultiXactId multi, MultiXactStatus status,","html":" \u003cspan class=pl-en\u003eConditionalMultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eMultiXactId\u003c/span\u003e \u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-smi\u003eMultiXactStatus\u003c/span\u003e \u003cspan class=pl-s1\u003estatus\u003c/span\u003e,","displayNoNewLineWarning":false,"position":184,"left":6185,"right":6215},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6186,"text":"-\t\t\t\t\t\t int *remaining, uint16 infomask)","html":"-\t\t\t\t\t\t \u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e, \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e)","displayNoNewLineWarning":false,"position":185,"left":6186,"right":6215},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6216,"text":"+\t\t\t\t\t\t uint16 infomask, Relation rel, ItemPointer ctid,","html":"+\t\t\t\t\t\t \u003cspan class=pl-smi\u003euint16\u003c/span\u003e \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, \u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-smi\u003eItemPointer\u003c/span\u003e \u003cspan class=pl-s1\u003ectid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":186,"left":6186,"right":6216},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6217,"text":"+\t\t\t\t\t\t XLTW_Oper oper, int *remaining)","html":"+\t\t\t\t\t\t \u003cspan class=pl-smi\u003eXLTW_Oper\u003c/span\u003e \u003cspan class=pl-s1\u003eoper\u003c/span\u003e, \u003cspan class=pl-smi\u003eint\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003eremaining\u003c/span\u003e)","displayNoNewLineWarning":false,"position":187,"left":6186,"right":6217},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6218,"text":" {","html":" {","displayNoNewLineWarning":false,"position":188,"left":6187,"right":6218},{"stylingDirective":null,"type":"DELETION","blobLineNumber":6188,"text":"-\treturn Do_MultiXactIdWait(multi, status, remaining, infomask, true);","html":"-\t\u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-en\u003eDo_MultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-s1\u003eremaining\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, true);","displayNoNewLineWarning":false,"position":189,"left":6188,"right":6218},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6219,"text":"+\treturn Do_MultiXactIdWait(multi, status, infomask, true,","html":"+\t\u003cspan class=pl-k\u003ereturn\u003c/span\u003e \u003cspan class=pl-en\u003eDo_MultiXactIdWait\u003c/span\u003e(\u003cspan class=pl-s1\u003emulti\u003c/span\u003e, \u003cspan class=pl-s1\u003estatus\u003c/span\u003e, \u003cspan class=pl-s1\u003einfomask\u003c/span\u003e, true,","displayNoNewLineWarning":false,"position":190,"left":6188,"right":6219},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":6220,"text":"+\t\t\t\t\t\t\t rel, ctid, oper, remaining);","html":"+\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-s1\u003ectid\u003c/span\u003e, \u003cspan class=pl-s1\u003eoper\u003c/span\u003e, \u003cspan class=pl-s1\u003eremaining\u003c/span\u003e);","displayNoNewLineWarning":false,"position":191,"left":6188,"right":6220},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6221,"text":" }","html":" }","displayNoNewLineWarning":false,"position":192,"left":6189,"right":6221},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6222,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":193,"left":6190,"right":6222},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":6223,"text":" /*","html":" \u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":194,"left":6191,"right":6223}],"diffNumber":0,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":8478,"linesChanged":80,"newTreeEntry":{"lineCount":8478,"path":"src/backend/access/heap/heapam.c","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"src/backend/access/heap/heapam.c","mode":100644},"linesAdded":56,"linesDeleted":24,"path":"src/backend/access/heap/heapam.c","pathDigest":"3b097bc5bff5567d6b7406cdc244c4776320db676812ead1676559914a256a0a","status":"MODIFIED","truncatedReason":null,"oldOid":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","newOid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","copilotChatReference":null,"deletedSha":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":167,"text":"@@ -168,7 +168,7 @@ _bt_doinsert(Relation rel, IndexTuple itup,","html":"@@ -168,7 +168,7 @@ _bt_doinsert(Relation rel, IndexTuple itup,","displayNoNewLineWarning":false,"position":0,"left":167,"right":167},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":168,"text":" \t\t{","html":" \t\t{","displayNoNewLineWarning":false,"position":1,"left":168,"right":168},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":169,"text":" \t\t\t/* Have to wait for the other guy ... */","html":" \t\t\t\u003cspan class=pl-c\u003e/* Have to wait for the other guy ... */\u003c/span\u003e","displayNoNewLineWarning":false,"position":2,"left":169,"right":169},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":170,"text":" \t\t\t_bt_relbuf(rel, buf);","html":" \t\t\t\u003cspan class=pl-en\u003e_bt_relbuf\u003c/span\u003e(\u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-s1\u003ebuf\u003c/span\u003e);","displayNoNewLineWarning":false,"position":3,"left":170,"right":170},{"stylingDirective":null,"type":"DELETION","blobLineNumber":171,"text":"-\t\t\tXactLockTableWait(xwait);","html":"-\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exwait\u003c/span\u003e);","displayNoNewLineWarning":false,"position":4,"left":171,"right":170},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":171,"text":"+\t\t\tXactLockTableWait(xwait, rel, \u0026itup-\u003et_tid, XLTW_InsertIndex);","html":"+\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exwait\u003c/span\u003e\u003cspan class=\"x x-first\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x\"\u003erel\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"pl-s1 x\"\u003eitup\u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003et_tid\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x x-last\"\u003eXLTW_InsertIndex\u003c/span\u003e);","displayNoNewLineWarning":false,"position":5,"left":171,"right":171},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":172,"text":" \t\t\t/* start over... */","html":" \t\t\t\u003cspan class=pl-c\u003e/* start over... */\u003c/span\u003e","displayNoNewLineWarning":false,"position":6,"left":172,"right":172},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":173,"text":" \t\t\t_bt_freestack(stack);","html":" \t\t\t\u003cspan class=pl-en\u003e_bt_freestack\u003c/span\u003e(\u003cspan class=pl-s1\u003estack\u003c/span\u003e);","displayNoNewLineWarning":false,"position":7,"left":173,"right":173},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":174,"text":" \t\t\tgoto top;","html":" \t\t\tgoto \u003cspan class=pl-ent\u003etop\u003c/span\u003e;","displayNoNewLineWarning":false,"position":8,"left":174,"right":174}],"diffNumber":1,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":2257,"linesChanged":2,"newTreeEntry":{"lineCount":2257,"path":"src/backend/access/nbtree/nbtinsert.c","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"src/backend/access/nbtree/nbtinsert.c","mode":100644},"linesAdded":1,"linesDeleted":1,"path":"src/backend/access/nbtree/nbtinsert.c","pathDigest":"11092c6fe19a320b93b5e4854f3f63503d7cadbeef4ee4c8cabdba20a3303073","status":"MODIFIED","truncatedReason":null,"oldOid":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","newOid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","copilotChatReference":null,"deletedSha":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":2294,"text":"@@ -2295,7 +2295,9 @@ IndexBuildHeapScan(Relation heapRelation,","html":"@@ -2295,7 +2295,9 @@ IndexBuildHeapScan(Relation heapRelation,","displayNoNewLineWarning":false,"position":0,"left":2294,"right":2294},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2295,"text":" \t\t\t\t\t\t\t * Must drop the lock on the buffer before we wait","html":" \u003cspan class=pl-c\u003e\t\t\t\t\t\t\t * Must drop the lock on the buffer before we wait\u003c/span\u003e","displayNoNewLineWarning":false,"position":1,"left":2295,"right":2295},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2296,"text":" \t\t\t\t\t\t\t */","html":" \u003cspan class=pl-c\u003e\t\t\t\t\t\t\t */\u003c/span\u003e","displayNoNewLineWarning":false,"position":2,"left":2296,"right":2296},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2297,"text":" \t\t\t\t\t\t\tLockBuffer(scan-\u003ers_cbuf, BUFFER_LOCK_UNLOCK);","html":" \t\t\t\t\t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003escan\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003ers_cbuf\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_UNLOCK\u003c/span\u003e);","displayNoNewLineWarning":false,"position":3,"left":2297,"right":2297},{"stylingDirective":null,"type":"DELETION","blobLineNumber":2298,"text":"-\t\t\t\t\t\t\tXactLockTableWait(xwait);","html":"-\t\t\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e);","displayNoNewLineWarning":false,"position":4,"left":2298,"right":2297},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2298,"text":"+\t\t\t\t\t\t\tXactLockTableWait(xwait, heapRelation,","html":"+\t\t\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003eheapRelation\u003c/span\u003e,","displayNoNewLineWarning":false,"position":5,"left":2298,"right":2298},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2299,"text":"+\t\t\t\t\t\t\t\t\t\t\t \u0026heapTuple-\u003et_data-\u003et_ctid,","html":"+\t\t\t\t\t\t\t\t\t\t\t \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003eheapTuple\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":6,"left":2298,"right":2299},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2300,"text":"+\t\t\t\t\t\t\t\t\t\t\t XLTW_InsertIndexUnique);","html":"+\t\t\t\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_InsertIndexUnique\u003c/span\u003e);","displayNoNewLineWarning":false,"position":7,"left":2298,"right":2300},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2301,"text":" \t\t\t\t\t\t\tgoto recheck;","html":" \t\t\t\t\t\t\tgoto \u003cspan class=pl-ent\u003erecheck\u003c/span\u003e;","displayNoNewLineWarning":false,"position":8,"left":2299,"right":2301},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2302,"text":" \t\t\t\t\t\t}","html":" \t\t\t\t\t\t}","displayNoNewLineWarning":false,"position":9,"left":2300,"right":2302},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2303,"text":" \t\t\t\t\t}","html":" \t\t\t\t\t}","displayNoNewLineWarning":false,"position":10,"left":2301,"right":2303},{"stylingDirective":null,"type":"HUNK","blobLineNumber":2342,"text":"@@ -2341,7 +2343,9 @@ IndexBuildHeapScan(Relation heapRelation,","html":"@@ -2341,7 +2343,9 @@ IndexBuildHeapScan(Relation heapRelation,","displayNoNewLineWarning":false,"position":11,"left":2340,"right":2342},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2343,"text":" \t\t\t\t\t\t\t * Must drop the lock on the buffer before we wait","html":" \u003cspan class=pl-c\u003e\t\t\t\t\t\t\t * Must drop the lock on the buffer before we wait\u003c/span\u003e","displayNoNewLineWarning":false,"position":12,"left":2341,"right":2343},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2344,"text":" \t\t\t\t\t\t\t */","html":" \u003cspan class=pl-c\u003e\t\t\t\t\t\t\t */\u003c/span\u003e","displayNoNewLineWarning":false,"position":13,"left":2342,"right":2344},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2345,"text":" \t\t\t\t\t\t\tLockBuffer(scan-\u003ers_cbuf, BUFFER_LOCK_UNLOCK);","html":" \t\t\t\t\t\t\t\u003cspan class=pl-en\u003eLockBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003escan\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003ers_cbuf\u003c/span\u003e, \u003cspan class=pl-c1\u003eBUFFER_LOCK_UNLOCK\u003c/span\u003e);","displayNoNewLineWarning":false,"position":14,"left":2343,"right":2345},{"stylingDirective":null,"type":"DELETION","blobLineNumber":2344,"text":"-\t\t\t\t\t\t\tXactLockTableWait(xwait);","html":"-\t\t\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e);","displayNoNewLineWarning":false,"position":15,"left":2344,"right":2345},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2346,"text":"+\t\t\t\t\t\t\tXactLockTableWait(xwait, heapRelation,","html":"+\t\t\t\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003eheapRelation\u003c/span\u003e,","displayNoNewLineWarning":false,"position":16,"left":2344,"right":2346},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2347,"text":"+\t\t\t\t\t\t\t\t\t\t\t \u0026heapTuple-\u003et_data-\u003et_ctid,","html":"+\t\t\t\t\t\t\t\t\t\t\t \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003eheapTuple\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":17,"left":2344,"right":2347},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":2348,"text":"+\t\t\t\t\t\t\t\t\t\t\t XLTW_InsertIndexUnique);","html":"+\t\t\t\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_InsertIndexUnique\u003c/span\u003e);","displayNoNewLineWarning":false,"position":18,"left":2344,"right":2348},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2349,"text":" \t\t\t\t\t\t\tgoto recheck;","html":" \t\t\t\t\t\t\tgoto \u003cspan class=pl-ent\u003erecheck\u003c/span\u003e;","displayNoNewLineWarning":false,"position":19,"left":2345,"right":2349},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2350,"text":" \t\t\t\t\t\t}","html":" \t\t\t\t\t\t}","displayNoNewLineWarning":false,"position":20,"left":2346,"right":2350},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":2351,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":21,"left":2347,"right":2351}],"diffNumber":2,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":3514,"linesChanged":8,"newTreeEntry":{"lineCount":3514,"path":"src/backend/catalog/index.c","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"src/backend/catalog/index.c","mode":100644},"linesAdded":6,"linesDeleted":2,"path":"src/backend/catalog/index.c","pathDigest":"586c72d2cf381d9ba233e5324edeccfa0debb512306bd7dfcfafbd9f0d67ac08","status":"MODIFIED","truncatedReason":null,"oldOid":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","newOid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","copilotChatReference":null,"deletedSha":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":1981,"text":"@@ -1982,7 +1982,9 @@ EvalPlanQualFetch(EState *estate, Relation relation, int lockmode,","html":"@@ -1982,7 +1982,9 @@ EvalPlanQualFetch(EState *estate, Relation relation, int lockmode,","displayNoNewLineWarning":false,"position":0,"left":1981,"right":1981},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1982,"text":" \t\t\tif (TransactionIdIsValid(SnapshotDirty.xmax))","html":" \t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-en\u003eTransactionIdIsValid\u003c/span\u003e(\u003cspan class=pl-s1\u003eSnapshotDirty\u003c/span\u003e.\u003cspan class=pl-c1\u003exmax\u003c/span\u003e))","displayNoNewLineWarning":false,"position":1,"left":1982,"right":1982},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1983,"text":" \t\t\t{","html":" \t\t\t{","displayNoNewLineWarning":false,"position":2,"left":1983,"right":1983},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1984,"text":" \t\t\t\tReleaseBuffer(buffer);","html":" \t\t\t\t\u003cspan class=pl-en\u003eReleaseBuffer\u003c/span\u003e(\u003cspan class=pl-s1\u003ebuffer\u003c/span\u003e);","displayNoNewLineWarning":false,"position":3,"left":1984,"right":1984},{"stylingDirective":null,"type":"DELETION","blobLineNumber":1985,"text":"-\t\t\t\tXactLockTableWait(SnapshotDirty.xmax);","html":"-\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003eSnapshotDirty\u003c/span\u003e.\u003cspan class=pl-c1\u003exmax\u003c/span\u003e);","displayNoNewLineWarning":false,"position":4,"left":1985,"right":1984},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1985,"text":"+\t\t\t\tXactLockTableWait(SnapshotDirty.xmax,","html":"+\t\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003eSnapshotDirty\u003c/span\u003e.\u003cspan class=pl-c1\u003exmax\u003c/span\u003e,","displayNoNewLineWarning":false,"position":5,"left":1985,"right":1985},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1986,"text":"+\t\t\t\t\t\t\t\t relation, \u0026tuple.t_data-\u003et_ctid,","html":"+\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003erelation\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003etuple\u003c/span\u003e.\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":6,"left":1985,"right":1986},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1987,"text":"+\t\t\t\t\t\t\t\t XLTW_FetchUpdated);","html":"+\t\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_FetchUpdated\u003c/span\u003e);","displayNoNewLineWarning":false,"position":7,"left":1985,"right":1987},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1988,"text":" \t\t\t\tcontinue;\t\t/* loop back to repeat heap_fetch */","html":" \t\t\t\t\u003cspan class=pl-k\u003econtinue\u003c/span\u003e;\t\t\u003cspan class=pl-c\u003e/* loop back to repeat heap_fetch */\u003c/span\u003e","displayNoNewLineWarning":false,"position":8,"left":1986,"right":1988},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1989,"text":" \t\t\t}","html":" \t\t\t}","displayNoNewLineWarning":false,"position":9,"left":1987,"right":1989},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1990,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":10,"left":1988,"right":1990}],"diffNumber":3,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":2534,"linesChanged":4,"newTreeEntry":{"lineCount":2534,"path":"src/backend/executor/execMain.c","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"src/backend/executor/execMain.c","mode":100644},"linesAdded":3,"linesDeleted":1,"path":"src/backend/executor/execMain.c","pathDigest":"ed8e9724b668cf25323e7d12c3354102d66936be19eae302d7ca599988e5bfc8","status":"MODIFIED","truncatedReason":null,"oldOid":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","newOid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","copilotChatReference":null,"deletedSha":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":1306,"text":"@@ -1307,7 +1307,8 @@ check_exclusion_constraint(Relation heap, Relation index, IndexInfo *indexInfo,","html":"@@ -1307,7 +1307,8 @@ check_exclusion_constraint(Relation heap, Relation index, IndexInfo *indexInfo,","displayNoNewLineWarning":false,"position":0,"left":1306,"right":1306},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1307,"text":" \t\tif (TransactionIdIsValid(xwait))","html":" \t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-en\u003eTransactionIdIsValid\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e))","displayNoNewLineWarning":false,"position":1,"left":1307,"right":1307},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1308,"text":" \t\t{","html":" \t\t{","displayNoNewLineWarning":false,"position":2,"left":1308,"right":1308},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1309,"text":" \t\t\tindex_endscan(index_scan);","html":" \t\t\t\u003cspan class=pl-en\u003eindex_endscan\u003c/span\u003e(\u003cspan class=pl-s1\u003eindex_scan\u003c/span\u003e);","displayNoNewLineWarning":false,"position":3,"left":1309,"right":1309},{"stylingDirective":null,"type":"DELETION","blobLineNumber":1310,"text":"-\t\t\tXactLockTableWait(xwait);","html":"-\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e);","displayNoNewLineWarning":false,"position":4,"left":1310,"right":1309},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1310,"text":"+\t\t\tXactLockTableWait(xwait, heap, \u0026tup-\u003et_data-\u003et_ctid,","html":"+\t\t\t\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-s1\u003exwait\u003c/span\u003e, \u003cspan class=pl-s1\u003eheap\u003c/span\u003e, \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003etup\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_data\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003et_ctid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":5,"left":1310,"right":1310},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1311,"text":"+\t\t\t\t\t\t\t XLTW_RecheckExclusionConstr);","html":"+\t\t\t\t\t\t\t \u003cspan class=pl-s1\u003eXLTW_RecheckExclusionConstr\u003c/span\u003e);","displayNoNewLineWarning":false,"position":6,"left":1310,"right":1311},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1312,"text":" \t\t\tgoto retry;","html":" \t\t\tgoto \u003cspan class=pl-ent\u003eretry\u003c/span\u003e;","displayNoNewLineWarning":false,"position":7,"left":1311,"right":1312},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1313,"text":" \t\t}","html":" \t\t}","displayNoNewLineWarning":false,"position":8,"left":1312,"right":1313},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1314,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":9,"left":1313,"right":1314}],"diffNumber":4,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":1506,"linesChanged":3,"newTreeEntry":{"lineCount":1506,"path":"src/backend/executor/execUtils.c","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"src/backend/executor/execUtils.c","mode":100644},"linesAdded":2,"linesDeleted":1,"path":"src/backend/executor/execUtils.c","pathDigest":"b48b322902e8cb8cf66825110ae659fcb3f7a15ad84cef5d4b3c3349d4618eb4","status":"MODIFIED","truncatedReason":null,"oldOid":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","newOid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","copilotChatReference":null,"deletedSha":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":1342,"text":"@@ -1343,7 +1343,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn","html":"@@ -1343,7 +1343,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn","displayNoNewLineWarning":false,"position":0,"left":1342,"right":1342},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1343,"text":" \t\t\tif (TransactionIdIsCurrentTransactionId(xid))","html":" \t\t\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-en\u003eTransactionIdIsCurrentTransactionId\u003c/span\u003e(\u003cspan class=pl-s1\u003exid\u003c/span\u003e))","displayNoNewLineWarning":false,"position":1,"left":1343,"right":1343},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1344,"text":" \t\t\t\telog(ERROR, \"waiting for ourselves\");","html":" \t\t\t\t\u003cspan class=pl-en\u003eelog\u003c/span\u003e(\u003cspan class=pl-c1\u003eERROR\u003c/span\u003e, \u003cspan class=pl-s\u003e\u0026quot;waiting for ourselves\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":2,"left":1344,"right":1344},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1345,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":3,"left":1345,"right":1345},{"stylingDirective":null,"type":"DELETION","blobLineNumber":1346,"text":"-\t\t\tXactLockTableWait(xid);","html":"-\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exid\u003c/span\u003e);","displayNoNewLineWarning":false,"position":4,"left":1346,"right":1345},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1346,"text":"+\t\t\tXactLockTableWait(xid, NULL, NULL, XLTW_None);","html":"+\t\t\t\u003cspan class=\"pl-en\"\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exid\u003c/span\u003e\u003cspan class=\"x x-first\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003eNULL\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-c1 x\"\u003eNULL\u003c/span\u003e\u003cspan class=\"x\"\u003e, \u003c/span\u003e\u003cspan class=\"pl-s1 x x-last\"\u003eXLTW_None\u003c/span\u003e);","displayNoNewLineWarning":false,"position":5,"left":1346,"right":1346},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1347,"text":" \t\t}","html":" \t\t}","displayNoNewLineWarning":false,"position":6,"left":1347,"right":1347},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1348,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":7,"left":1348,"right":1348},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1349,"text":" \t\t/* nothing could have built up so far, so don't perform cleanup */","html":" \t\t\u003cspan class=pl-c\u003e/* nothing could have built up so far, so don\u0026#39;t perform cleanup */\u003c/span\u003e","displayNoNewLineWarning":false,"position":8,"left":1349,"right":1349}],"diffNumber":5,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":1885,"linesChanged":2,"newTreeEntry":{"lineCount":1885,"path":"src/backend/replication/logical/snapbuild.c","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"src/backend/replication/logical/snapbuild.c","mode":100644},"linesAdded":1,"linesDeleted":1,"path":"src/backend/replication/logical/snapbuild.c","pathDigest":"899567635df89834ba82abe690a825c17385ab7cbcaac2e7a42ee30c4b6d9e90","status":"MODIFIED","truncatedReason":null,"oldOid":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","newOid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","copilotChatReference":null,"deletedSha":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":24,"text":"@@ -25,6 +25,21 @@","html":"@@ -25,6 +25,21 @@","displayNoNewLineWarning":false,"position":0,"left":24,"right":24},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":25,"text":" #include \"utils/inval.h\"","html":" \u003cspan class=pl-k\u003e#include\u003c/span\u003e \u003cspan class=pl-s\u003e\u0026quot;utils/inval.h\u0026quot;\u003c/span\u003e","displayNoNewLineWarning":false,"position":1,"left":25,"right":25},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":26,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":2,"left":26,"right":26},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":27,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":3,"left":27,"right":27},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":28,"text":"+/*","html":"+\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":4,"left":27,"right":28},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":29,"text":"+ * Struct to hold context info for transaction lock waits.","html":"+\u003cspan class=pl-c\u003e * Struct to hold context info for transaction lock waits.\u003c/span\u003e","displayNoNewLineWarning":false,"position":5,"left":27,"right":29},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":30,"text":"+ *","html":"+\u003cspan class=pl-c\u003e *\u003c/span\u003e","displayNoNewLineWarning":false,"position":6,"left":27,"right":30},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":31,"text":"+ * 'oper' is the operation that needs to wait for the other transaction; 'rel'","html":"+\u003cspan class=pl-c\u003e * \u0026#39;oper\u0026#39; is the operation that needs to wait for the other transaction; \u0026#39;rel\u0026#39;\u003c/span\u003e","displayNoNewLineWarning":false,"position":7,"left":27,"right":31},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":32,"text":"+ * and 'ctid' specify the address of the tuple being waited for.","html":"+\u003cspan class=pl-c\u003e * and \u0026#39;ctid\u0026#39; specify the address of the tuple being waited for.\u003c/span\u003e","displayNoNewLineWarning":false,"position":8,"left":27,"right":32},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":33,"text":"+ */","html":"+\u003cspan class=pl-c\u003e */\u003c/span\u003e","displayNoNewLineWarning":false,"position":9,"left":27,"right":33},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":34,"text":"+typedef struct XactLockTableWaitInfo","html":"+\u003cspan class=pl-k\u003etypedef\u003c/span\u003e \u003cspan class=pl-k\u003estruct\u003c/span\u003e \u003cspan class=pl-smi\u003eXactLockTableWaitInfo\u003c 8000 /span\u003e","displayNoNewLineWarning":false,"position":10,"left":27,"right":34},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":35,"text":"+{","html":"+{","displayNoNewLineWarning":false,"position":11,"left":27,"right":35},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":36,"text":"+\tXLTW_Oper\toper;","html":"+\t\u003cspan class=pl-smi\u003eXLTW_Oper\u003c/span\u003e\t\u003cspan class=pl-c1\u003eoper\u003c/span\u003e;","displayNoNewLineWarning":false,"position":12,"left":27,"right":36},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":37,"text":"+\tRelation\trel;","html":"+\t\u003cspan class=pl-smi\u003eRelation\u003c/span\u003e\t\u003cspan class=pl-c1\u003erel\u003c/span\u003e;","displayNoNewLineWarning":false,"position":13,"left":27,"right":37},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":38,"text":"+\tItemPointer\tctid;","html":"+\t\u003cspan class=pl-smi\u003eItemPointer\u003c/span\u003e\t\u003cspan class=pl-c1\u003ectid\u003c/span\u003e;","displayNoNewLineWarning":false,"position":14,"left":27,"right":38},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":39,"text":"+} XactLockTableWaitInfo;","html":"+} \u003cspan class=pl-smi\u003eXactLockTableWaitInfo\u003c/span\u003e;","displayNoNewLineWarning":false,"position":15,"left":27,"right":39},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":40,"text":"+","html":"+","displayNoNewLineWarning":false,"position":16,"left":27,"right":40},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":41,"text":"+static void XactLockTableWaitErrorCb(void *arg);","html":"+\u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003evoid\u003c/span\u003e \u003cspan class=pl-en\u003eXactLockTableWaitErrorCb\u003c/span\u003e(\u003cspan class=pl-smi\u003evoid\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003earg\u003c/span\u003e);","displayNoNewLineWarning":false,"position":17,"left":27,"right":41},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":42,"text":"+","html":"+","displayNoNewLineWarning":false,"position":18,"left":27,"right":42},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":43,"text":" /*","html":" \u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":19,"left":28,"right":43},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":44,"text":" * RelationInitLockInfo","html":" \u003cspan class=pl-c\u003e * RelationInitLockInfo\u003c/span\u003e","displayNoNewLineWarning":false,"position":20,"left":29,"right":44},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":45,"text":" *\t\tInitializes the lock information in a relation descriptor.","html":" \u003cspan class=pl-c\u003e *\t\tInitializes the lock information in a relation descriptor.\u003c/span\u003e","displayNoNewLineWarning":false,"position":21,"left":30,"right":45},{"stylingDirective":null,"type":"HUNK","blobLineNumber":485,"text":"@@ -471,7 +486,9 @@ XactLockTableDelete(TransactionId xid)","html":"@@ -471,7 +486,9 @@ XactLockTableDelete(TransactionId xid)","displayNoNewLineWarning":false,"position":22,"left":470,"right":485},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":486,"text":" /*","html":" \u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":23,"left":471,"right":486},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":487,"text":" *\t\tXactLockTableWait","html":" \u003cspan class=pl-c\u003e *\t\tXactLockTableWait\u003c/span\u003e","displayNoNewLineWarning":false,"position":24,"left":472,"right":487},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":488,"text":" *","html":" \u003cspan class=pl-c\u003e *\u003c/span\u003e","displayNoNewLineWarning":false,"position":25,"left":473,"right":488},{"stylingDirective":null,"type":"DELETION","blobLineNumber":474,"text":"- * Wait for the specified transaction to commit or abort.","html":"-\u003cspan class=pl-c\u003e * Wait for the specified transaction to commit or abort.\u003c/span\u003e","displayNoNewLineWarning":false,"position":26,"left":474,"right":488},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":489,"text":"+ * Wait for the specified transaction to commit or abort. If an operation","html":"+\u003cspan class=pl-c\u003e * Wait for the specified transaction to commit or abort. If an operation\u003c/span\u003e","displayNoNewLineWarning":false,"position":27,"left":474,"right":489},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":490,"text":"+ * is specified, an error context callback is set up. If 'oper' is passed as","html":"+\u003cspan class=pl-c\u003e * is specified, an error context callback is set up. If \u0026#39;oper\u0026#39; is passed as\u003c/span\u003e","displayNoNewLineWarning":false,"position":28,"left":474,"right":490},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":491,"text":"+ * None, no error context callback is set up.","html":"+\u003cspan class=pl-c\u003e * None, no error context callback is set up.\u003c/span\u003e","displayNoNewLineWarning":false,"position":29,"left":474,"right":491},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":492,"text":" *","html":" \u003cspan class=pl-c\u003e *\u003c/span\u003e","displayNoNewLineWarning":false,"position":30,"left":475,"right":492},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":493,"text":" * Note that this does the right thing for subtransactions: if we wait on a","html":" \u003cspan class=pl-c\u003e * Note that this does the right thing for subtransactions: if we wait on a\u003c/span\u003e","displayNoNewLineWarning":false,"position":31,"left":476,"right":493},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":494,"text":" * subtransaction, we will exit as soon as it aborts or its top parent commits.","html":" \u003cspan class=pl-c\u003e * subtransaction, we will exit as soon as it aborts or its top parent commits.\u003c/span\u003e","displayNoNewLineWarning":false,"position":32,"left":477,"right":494},{"stylingDirective":null,"type":"HUNK","blobLineNumber":497,"text":"@@ -481,9 +498,31 @@ XactLockTableDelete(TransactionId xid)","html":"@@ -481,9 +498,31 @@ XactLockTableDelete(TransactionId xid)","displayNoNewLineWarning":false,"position":33,"left":480,"right":497},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":498,"text":" * and if so wait for its parent.","html":" \u003cspan class=pl-c\u003e * and if so wait for its parent.\u003c/span\u003e","displayNoNewLineWarning":false,"position":34,"left":481,"right":498},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":499,"text":" */","html":" \u003cspan class=pl-c\u003e */\u003c/span\u003e","displayNoNewLineWarning":false,"position":35,"left":482,"right":499},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":500,"text":" void","html":" \u003cspan class=pl-smi\u003evoid\u003c/span\u003e","displayNoNewLineWarning":false,"position":36,"left":483,"right":500},{"stylingDirective":null,"type":"DELETION","blobLineNumber":484,"text":"-XactLockTableWait(TransactionId xid)","html":"-\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eTransactionId\u003c/span\u003e \u003cspan class=pl-s1\u003exid\u003c/span\u003e)","displayNoNewLineWarning":false,"position":37,"left":484,"right":500},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":501,"text":"+XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid,","html":"+\u003cspan class=pl-en\u003eXactLockTableWait\u003c/span\u003e(\u003cspan class=pl-smi\u003eTransactionId\u003c/span\u003e \u003cspan class=pl-s1\u003exid\u003c/span\u003e, \u003cspan class=pl-smi\u003eRelation\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e, \u003cspan class=pl-smi\u003eItemPointer\u003c/span\u003e \u003cspan class=pl-s1\u003ectid\u003c/span\u003e,","displayNoNewLineWarning":false,"position":38,"left":484,"right":501},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":502,"text":"+\t\t\t\t XLTW_Oper oper)","html":"+\t\t\t\t \u003cspan class=pl-smi\u003eXLTW_Oper\u003c/span\u003e \u003cspan class=pl-s1\u003eoper\u003c/span\u003e)","displayNoNewLineWarning":false,"position":39,"left":484,"right":502},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":503,"text":" {","html":" {","displayNoNewLineWarning":false,"position":40,"left":485,"right":503},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":504,"text":" \tLOCKTAG\t\ttag;","html":" \t\u003cspan class=pl-smi\u003eLOCKTAG\u003c/span\u003e\t\t\u003cspan class=pl-s1\u003etag\u003c/span\u003e;","displayNoNewLineWarning":false,"position":41,"left":486,"right":504},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":505,"text":"+\tXactLockTableWaitInfo info;","html":"+\t\u003cspan class=pl-smi\u003eXactLockTableWaitInfo\u003c/span\u003e \u003cspan class=pl-s1\u003einfo\u003c/span\u003e;","displayNoNewLineWarning":false,"position":42,"left":486,"right":505},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":506,"text":"+\tErrorContextCallback callback;","html":"+\t\u003cspan class=pl-smi\u003eErrorContextCallback\u003c/span\u003e \u003cspan class=pl-s1\u003ecallback\u003c/span\u003e;","displayNoNewLineWarning":false,"position":43,"left":486,"right":506},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":507,"text":"+","html":"+","displayNoNewLineWarning":false,"position":44,"left":486,"right":507},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":508,"text":"+\t/*","html":"+\t\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":45,"left":486,"right":508},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":509,"text":"+\t * If an operation is specified, set up our verbose error context","html":"+\u003cspan class=pl-c\u003e\t * If an operation is specified, set up our verbose error context\u003c/span\u003e","displayNoNewLineWarning":false,"position":46,"left":486,"right":509},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":510,"text":"+\t * callback.","html":"+\u003cspan class=pl-c\u003e\t * callback.\u003c/span\u003e","displayNoNewLineWarning":false,"position":47,"left":486,"right":510},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":511,"text":"+\t */","html":"+\u003cspan class=pl-c\u003e\t */\u003c/span\u003e","displayNoNewLineWarning":false,"position":48,"left":486,"right":511},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":512,"text":"+\tif (oper != XLTW_None)","html":"+\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003eoper\u003c/span\u003e \u003cspan class=pl-c1\u003e!=\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_None\u003c/span\u003e)","displayNoNewLineWarning":false,"position":49,"left":486,"right":512},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":513,"text":"+\t{","html":"+\t{","displayNoNewLineWarning":false,"position":50,"left":486,"right":513},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":514,"text":"+\t\tAssert(RelationIsValid(rel));","html":"+\t\t\u003cspan class=pl-en\u003eAssert\u003c/span\u003e(\u003cspan class=pl-en\u003eRelationIsValid\u003c/span\u003e(\u003cspan class=pl-s1\u003erel\u003c/span\u003e));","displayNoNewLineWarning":false,"position":51,"left":486,"right":514},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":515,"text":"+\t\tAssert(ItemPointerIsValid(ctid));","html":"+\t\t\u003cspan class=pl-en\u003eAssert\u003c/span\u003e(\u003cspan class=pl-en\u003eItemPointerIsValid\u003c/span\u003e(\u003cspan class=pl-s1\u003ectid\u003c/span\u003e));","displayNoNewLineWarning":false,"position":52,"left":486,"right":515},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":516,"text":"+","html":"+","displayNoNewLineWarning":false,"position":53,"left":486,"right":516},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":517,"text":"+\t\tinfo.rel = rel;","html":"+\t\t\u003cspan class=pl-s1\u003einfo\u003c/span\u003e.\u003cspan class=pl-c1\u003erel\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003erel\u003c/span\u003e;","displayNoNewLineWarning":false,"position":54,"left":486,"right":517},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":518,"text":"+\t\tinfo.ctid = ctid;","html":"+\t\t\u003cspan class=pl-s1\u003einfo\u003c/span\u003e.\u003cspan class=pl-c1\u003ectid\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003ectid\u003c/span\u003e;","displayNoNewLineWarning":false,"position":55,"left":486,"right":518},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":519,"text":"+\t\tinfo.oper = oper;","html":"+\t\t\u003cspan class=pl-s1\u003einfo\u003c/span\u003e.\u003cspan class=pl-c1\u003eoper\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eoper\u003c/span\u003e;","displayNoNewLineWarning":false,"position":56,"left":486,"right":519},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":520,"text":"+","html":"+","displayNoNewLineWarning":false,"position":57,"left":486,"right":520},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":521,"text":"+\t\tcallback.callback = XactLockTableWaitErrorCb;","html":"+\t\t\u003cspan class=pl-s1\u003ecallback\u003c/span\u003e.\u003cspan class=pl-c1\u003ecallback\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eXactLockTableWaitErrorCb\u003c/span\u003e;","displayNoNewLineWarning":false,"position":58,"left":486,"right":521},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":522,"text":"+\t\tcallback.arg = \u0026info;","html":"+\t\t\u003cspan class=pl-s1\u003ecallback\u003c/span\u003e.\u003cspan class=pl-c1\u003earg\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003einfo\u003c/span\u003e;","displayNoNewLineWarning":false,"position":59,"left":486,"right":522},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":523,"text":"+\t\tcallback.previous = error_context_stack;","html":"+\t\t\u003cspan class=pl-s1\u003ecallback\u003c/span\u003e.\u003cspan class=pl-c1\u003eprevious\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003eerror_context_stack\u003c/span\u003e;","displayNoNewLineWarning":false,"position":60,"left":486,"right":523},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":524,"text":"+\t\terror_context_stack = \u0026callback;","html":"+\t\t\u003cspan class=pl-s1\u003eerror_context_stack\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-c1\u003e\u0026amp;\u003c/span\u003e\u003cspan class=pl-s1\u003ecallback\u003c/span\u003e;","displayNoNewLineWarning":false,"position":61,"left":486,"right":524},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":525,"text":"+\t}","html":"+\t}","displayNoNewLineWarning":false,"position":62,"left":486,"right":525},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":526,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":63,"left":487,"right":526},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":527,"text":" \tfor (;;)","html":" \t\u003cspan class=pl-k\u003efor\u003c/span\u003e (;;)","displayNoNewLineWarning":false,"position":64,"left":488,"right":527},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":528,"text":" \t{","html":" \t{","displayNoNewLineWarning":false,"position":65,"left":489,"right":528},{"stylingDirective":null,"type":"HUNK","blobLineNumber":538,"text":"@@ -500,6 +539,9 @@ XactLockTableWait(TransactionId xid)","html":"@@ -500,6 +539,9 @@ XactLockTableWait(TransactionId xid)","displayNoNewLineWarning":false,"position":66,"left":499,"right":538},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":539,"text":" \t\t\tbreak;","html":" \t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":67,"left":500,"right":539},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":540,"text":" \t\txid = SubTransGetParent(xid);","html":" \t\t\u003cspan class=pl-s1\u003exid\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003eSubTransGetParent\u003c/span\u003e(\u003cspan class=pl-s1\u003exid\u003c/span\u003e);","displayNoNewLineWarning":false,"position":68,"left":501,"right":540},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":541,"text":" \t}","html":" \t}","displayNoNewLineWarning":false,"position":69,"left":502,"right":541},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":542,"text":"+","html":"+","displayNoNewLineWarning":false,"position":70,"left":502,"right":542},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":543,"text":"+\tif (oper != XLTW_None)","html":"+\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003eoper\u003c/span\u003e \u003cspan class=pl-c1\u003e!=\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_None\u003c/span\u003e)","displayNoNewLineWarning":false,"position":71,"left":502,"right":543},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":544,"text":"+\t\terror_context_stack = callback.previous;","html":"+\t\t\u003cspan class=pl-s1\u003eerror_context_stack\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-s1\u003ecallback\u003c/span\u003e.\u003cspan class=pl-c1\u003eprevious\u003c/span\u003e;","displayNoNewLineWarning":false,"position":72,"left":502,"right":544},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":545,"text":" }","html":" }","displayNoNewLineWarning":false,"position":73,"left":503,"right":545},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":546,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":74,"left":504,"right":546},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":547,"text":" /*","html":" \u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":75,"left":505,"right":547},{"stylingDirective":null,"type":"HUNK","blobLineNumber":574,"text":"@@ -533,6 +575,62 @@ ConditionalXactLockTableWait(TransactionId xid)","html":"@@ -533,6 +575,62 @@ ConditionalXactLockTableWait(TransactionId xid)","displayNoNewLineWarning":false,"position":76,"left":532,"right":574},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":575,"text":" \treturn true;","html":" \t\u003cspan class=pl-k\u003ereturn\u003c/span\u003e true;","displayNoNewLineWarning":false,"position":77,"left":533,"right":575},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":576,"text":" }","html":" }","displayNoNewLineWarning":false,"position":78,"left":534,"right":576},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":577,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":79,"left":535,"right":577},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":578,"text":"+/*","html":"+\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":80,"left":535,"right":578},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":579,"text":"+ * XactLockTableWaitErrorContextCb","html":"+\u003cspan class=pl-c\u003e * XactLockTableWaitErrorContextCb\u003c/span\u003e","displayNoNewLineWarning":false,"position":81,"left":535,"right":579},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":580,"text":"+ *\t\tError context callback for transaction lock waits.","html":"+\u003cspan class=pl-c\u003e *\t\tError context callback for transaction lock waits.\u003c/span\u003e","displayNoNewLineWarning":false,"position":82,"left":535,"right":580},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":581,"text":"+ */","html":"+\u003cspan class=pl-c\u003e */\u003c/span\u003e","displayNoNewLineWarning":false,"position":83,"left":535,"right":581},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":582,"text":"+static void","html":"+\u003cspan class=pl-k\u003estatic\u003c/span\u003e \u003cspan class=pl-smi\u003evoid\u003c/span\u003e","displayNoNewLineWarning":false,"position":84,"left":535,"right":582},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":583,"text":"+XactLockTableWaitErrorCb(void *arg)","html":"+\u003cspan class=pl-en\u003eXactLockTableWaitErrorCb\u003c/span\u003e(\u003cspan class=pl-smi\u003evoid\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003earg\u003c/span\u003e)","displayNoNewLineWarning":false,"position":85,"left":535,"right":583},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":584,"text":"+{","html":"+{","displayNoNewLineWarning":false,"position":86,"left":535,"right":584},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":585,"text":"+\tXactLockTableWaitInfo *info = (XactLockTableWaitInfo *) arg;","html":"+\t\u003cspan class=pl-smi\u003eXactLockTableWaitInfo\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003einfo\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e (\u003cspan class=pl-smi\u003eXactLockTableWaitInfo\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e) \u003cspan class=pl-s1\u003earg\u003c/span\u003e;","displayNoNewLineWarning":false,"position":87,"left":535,"right":585},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":586,"text":"+","html":"+","displayNoNewLineWarning":false,"position":88,"left":535,"right":586},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":587,"text":"+\t/*","html":"+\t\u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":89,"left":535,"right":587},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":588,"text":"+\t * We would like to print schema name too, but that would require a","html":"+\u003cspan class=pl-c\u003e\t * We would like to print schema name too, but that would require a\u003c/span\u003e","displayNoNewLineWarning":false,"position":90,"left":535,"right":588},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":589,"text":"+\t * syscache lookup.","html":"+\u003cspan class=pl-c\u003e\t * syscache lookup.\u003c/span\u003e","displayNoNewLineWarning":false,"position":91,"left":535,"right":589},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":590,"text":"+\t */","html":"+\u003cspan class=pl-c\u003e\t */\u003c/span\u003e","displayNoNewLineWarning":false,"position":92,"left":535,"right":590},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":591,"text":"+\tif (info-\u003eoper != XLTW_None \u0026\u0026","html":"+\t\u003cspan class=pl-k\u003eif\u003c/span\u003e (\u003cspan class=pl-s1\u003einfo\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003eoper\u003c/span\u003e \u003cspan class=pl-c1\u003e!=\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_None\u003c/span\u003e \u003cspan class=pl-c1\u003e\u0026amp;\u0026amp;\u003c/span\u003e","displayNoNewLineWarning":false,"position":93,"left":535,"right":591},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":592,"text":"+\t\tItemPointerIsValid(info-\u003ectid) \u0026\u0026 RelationIsValid(info-\u003erel))","html":"+\t\t\u003cspan class=pl-en\u003eItemPointerIsValid\u003c/span\u003e(\u003cspan class=pl-s1\u003einfo\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003ectid\u003c/span\u003e) \u003cspan class=pl-c1\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=pl-en\u003eRelationIsValid\u003c/span\u003e(\u003cspan class=pl-s1\u003einfo\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003erel\u003c/span\u003e))","displayNoNewLineWarning":false,"position":94,"left":535,"right":592},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":593,"text":"+\t{","html":"+\t{","displayNoNewLineWarning":false,"position":95,"left":535,"right":593},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":594,"text":"+\t\tconst char *cxt;","html":"+\t\t\u003cspan class=pl-k\u003econst\u003c/span\u003e \u003cspan class=pl-smi\u003echar\u003c/span\u003e \u003cspan class=pl-c1\u003e*\u003c/span\u003e\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e;","displayNoNewLineWarning":false,"position":96,"left":535,"right":594},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":595,"text":"+","html":"+","displayNoNewLineWarning":false,"position":97,"left":535,"right":595},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":596,"text":"+\t\tswitch (info-\u003eoper)","html":"+\t\t\u003cspan class=pl-k\u003eswitch\u003c/span\u003e (\u003cspan class=pl-s1\u003einfo\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003eoper\u003c/span\u003e)","displayNoNewLineWarning":false,"position":98,"left":535,"right":596},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":597,"text":"+\t\t{","html":"+\t\t{","displayNoNewLineWarning":false,"position":99,"left":535,"right":597},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":598,"text":"+\t\t\tcase XLTW_Update:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_Update\u003c/span\u003e:","displayNoNewLineWarning":false,"position":100,"left":535,"right":598},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":599,"text":"+\t\t\t\tcxt = gettext_noop(\"while updating tuple (%u,%u) in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while updating tuple (%u,%u) in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":101,"left":535,"right":599},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":600,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":102,"left":535,"right":600},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":601,"text":"+\t\t\tcase XLTW_Delete:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_Delete\u003c/span\u003e:","displayNoNewLineWarning":false,"position":103,"left":535,"right":601},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":602,"text":"+\t\t\t\tcxt = gettext_noop(\"while deleting tuple (%u,%u) in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while deleting tuple (%u,%u) in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":104,"left":535,"right":602},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":603,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":105,"left":535,"right":603},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":604,"text":"+\t\t\tcase XLTW_Lock:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_Lock\u003c/span\u003e:","displayNoNewLineWarning":false,"position":106,"left":535,"right":604},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":605,"text":"+\t\t\t\tcxt = gettext_noop(\"while locking tuple (%u,%u) in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while locking tuple (%u,%u) in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":107,"left":535,"right":605},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":606,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":108,"left":535,"right":606},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":607,"text":"+\t\t\tcase XLTW_LockUpdated:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_LockUpdated\u003c/span\u003e:","displayNoNewLineWarning":false,"position":109,"left":535,"right":607},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":608,"text":"+\t\t\t\tcxt = gettext_noop(\"while locking updated version (%u,%u) of tuple in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while locking updated version (%u,%u) of tuple in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":110,"left":535,"right":608},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":609,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":111,"left":535,"right":609},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":610,"text":"+\t\t\tcase XLTW_InsertIndex:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_InsertIndex\u003c/span\u003e:","displayNoNewLineWarning":false,"position":112,"left":535,"right":610},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":611,"text":"+\t\t\t\tcxt = gettext_noop(\"while inserting index tuple (%u,%u) in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while inserting index tuple (%u,%u) in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":113,"left":535,"right":611},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":612,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":114,"left":535,"right":612},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":613,"text":"+\t\t\tcase XLTW_InsertIndexUnique:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_InsertIndexUnique\u003c/span\u003e:","displayNoNewLineWarning":false,"position":115,"left":535,"right":613},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":614,"text":"+\t\t\t\tcxt = gettext_noop(\"while checking uniqueness of tuple (%u,%u) in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while checking uniqueness of tuple (%u,%u) in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":116,"left":535,"right":614},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":615,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":117,"left":535,"right":615},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":616,"text":"+\t\t\tcase XLTW_FetchUpdated:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_FetchUpdated\u003c/span\u003e:","displayNoNewLineWarning":false,"position":118,"left":535,"right":616},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":617,"text":"+\t\t\t\tcxt = gettext_noop(\"while rechecking updated tuple (%u,%u) in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while rechecking updated tuple (%u,%u) in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":119,"left":535,"right":617},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":618,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":120,"left":535,"right":618},{"stylingDirective":null,"type":"ADDITION","blobLineNum 8000 ber":619,"text":"+\t\t\tcase XLTW_RecheckExclusionConstr:","html":"+\t\t\t\u003cspan class=pl-k\u003ecase\u003c/span\u003e \u003cspan class=pl-s1\u003eXLTW_RecheckExclusionConstr\u003c/span\u003e:","displayNoNewLineWarning":false,"position":121,"left":535,"right":619},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":620,"text":"+\t\t\t\tcxt = gettext_noop(\"while checking exclusion constraint on tuple (%u,%u) in relation \\\"%s\\\"\");","html":"+\t\t\t\t\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e \u003cspan class=pl-c1\u003e=\u003c/span\u003e \u003cspan class=pl-en\u003egettext_noop\u003c/span\u003e(\u003cspan class=pl-s\u003e\u0026quot;while checking exclusion constraint on tuple (%u,%u) in relation \\\u0026quot;%s\\\u0026quot;\u0026quot;\u003c/span\u003e);","displayNoNewLineWarning":false,"position":122,"left":535,"right":620},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":621,"text":"+\t\t\t\tbreak;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ebreak\u003c/span\u003e;","displayNoNewLineWarning":false,"position":123,"left":535,"right":621},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":622,"text":"+","html":"+","displayNoNewLineWarning":false,"position":124,"left":535,"right":622},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":623,"text":"+\t\t\tdefault:","html":"+\t\t\t\u003cspan class=pl-k\u003edefault\u003c/span\u003e:","displayNoNewLineWarning":false,"position":125,"left":535,"right":623},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":624,"text":"+\t\t\t\treturn;","html":"+\t\t\t\t\u003cspan class=pl-k\u003ereturn\u003c/span\u003e;","displayNoNewLineWarning":false,"position":126,"left":535,"right":624},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":625,"text":"+\t\t}","html":"+\t\t}","displayNoNewLineWarning":false,"position":127,"left":535,"right":625},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":626,"text":"+","html":"+","displayNoNewLineWarning":false,"position":128,"left":535,"right":626},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":627,"text":"+\t\terrcontext(cxt,","html":"+\t\t\u003cspan class=pl-en\u003eerrcontext\u003c/span\u003e(\u003cspan class=pl-s1\u003ecxt\u003c/span\u003e,","displayNoNewLineWarning":false,"position":129,"left":535,"right":627},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":628,"text":"+\t\t\t\t ItemPointerGetBlockNumber(info-\u003ectid),","html":"+\t\t\t\t \u003cspan class=pl-en\u003eItemPointerGetBlockNumber\u003c/span\u003e(\u003cspan class=pl-s1\u003einfo\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003ectid\u003c/span\u003e),","displayNoNewLineWarning":false,"position":130,"left":535,"right":628},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":629,"text":"+\t\t\t\t ItemPointerGetOffsetNumber(info-\u003ectid),","html":"+\t\t\t\t \u003cspan class=pl-en\u003eItemPointerGetOffsetNumber\u003c/span\u003e(\u003cspan class=pl-s1\u003einfo\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003ectid\u003c/span\u003e),","displayNoNewLineWarning":false,"position":131,"left":535,"right":629},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":630,"text":"+\t\t\t\t RelationGetRelationName(info-\u003erel));","html":"+\t\t\t\t \u003cspan class=pl-en\u003eRelationGetRelationName\u003c/span\u003e(\u003cspan class=pl-s1\u003einfo\u003c/span\u003e\u003cspan class=pl-c1\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=pl-c1\u003erel\u003c/span\u003e));","displayNoNewLineWarning":false,"position":132,"left":535,"right":630},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":631,"text":"+\t}","html":"+\t}","displayNoNewLineWarning":false,"position":133,"left":535,"right":631},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":632,"text":"+}","html":"+}","displayNoNewLineWarning":false,"position":134,"left":535,"right":632},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":633,"text":"+","html":"+","displayNoNewLineWarning":false,"position":135,"left":535,"right":633},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":634,"text":" /*","html":" \u003cspan class=pl-c\u003e/*\u003c/span\u003e","displayNoNewLineWarning":false,"position":136,"left":536,"right":634},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":635,"text":" * WaitForLockersMultiple","html":" \u003cspan class=pl-c\u003e * WaitForLockersMultiple\u003c/span\u003e","displayNoNewLineWarning":false,"position":137,"left":537,"right":635},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":636,"text":" *\t\tWait until no transaction holds locks that conflict with the given","html":" \u003cspan class=pl-c\u003e *\t\tWait until no transaction holds locks that conflict with the given\u003c/span\u003e","displayNoNewLineWarning":false,"position":138,"left":538,"right":636}],"diffNumber":6,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":905,"linesChanged":102,"newTreeEntry":{"lineCount":905,"path":"src/backend/storage/lmgr/lmgr.c","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"src/backend/storage/lmgr/lmgr.c","mode":100644},"linesAdded":100,"linesDeleted":2,"path":"src/backend/storage/lmgr/lmgr.c","pathDigest":"aa799667c2d7b5588f1e36277918052565472e01091e6b1820145945bffcfb8d","status":"MODIFIED","truncatedReason":null,"oldOid":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","newOid":"f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","copilotChatReference":null,"deletedSha":"ea8c7e9054abf23fa3de2f8e4414f60ac8a8b620","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"path":"src/include/storage/lmgr.h","pathDigest":"5a4b5dde4abfc865a832b1439fc025d95e4e3b223378a021c20cebe508af4a92","status":"MODIFIED"},{"path":"src/nls-global.mk","pathDigest":"e993b244bcfb32db04a86e178aa0402bce182a4d3cc0a7f1e9b44fedbd2d696d","status":"MODIFIED"}],"splitViewPreference":"unified","ignoreWhitespace":false,"repoOwnerGlobalRelayId":"MDEyOk9yZ2FuaXphdGlvbjE3NzU0Mw==","commentsPreference":"visible","diffLineSpacingPreference":"relaxed","useMonospaceFont":false,"pasteUrlLinkAsPlainText":false,"userNotices":[],"path":"/postgres/postgres/commit/f88d4cfc9d417dac2ee41a8f5e593898e56fd2bd","fileTreeExpanded":true,"headerInfo":{"additions":189,"deletions":34,"filesChanged":9,"filesChangedString":"9"},"moreDiffsToLoad":true,"asyncDiffLoadInfo":{"startIndex":7,"truncated":false,"byteCount":13681,"lineShownCount":395},"commentInfo":{"canComment":false,"locked":false,"canLock":false,"repoArchived":false},"csrf_tokens":{"/users/diffview?diff=split":{"post":"FCZch3dqs2KOLFWRj3VEy-KOkR-8KjxbwuZEXE4xFH0LzBKSEipIxGQzvcSQcaul7tBgo-e7U2y7t3kE9XB2RA"},"/users/diffview?diff=unified":{"post":"VdziL3j0ZZmMUbdhbVkoZzkNFvsEzTKIefupuvZVt31KNqw6HbSeP2ZOXzRyXccJNVPnR19cXb8AqpTiTRTVRA"},"/notifications/thread":{"post":"T4MqLYOwGx3SDp07cFNcEmhRKP6wpBGA_Ado8O3ZWXfcJZYte9PJ7owAjY2OszvAtIJm6Bb764q-9DGGX7-7pw"}}},"title":"Setup error context callback for transaction lock waits · postgres/postgres@f88d4cf","appPayload":{"helpUrl":"https://docs.github.com","findInDiffWorkerPath":"/assets-cdn/worker/find-in-diff-worker-2bfe39677d14.js","enabled_features":{"diff_ux_refresh_beta":false,"diff_inline_comments":true,"diff_ux_refresh_ssr_five":false,"diff_ux_refresh_ssr_ten":false,"react_diff_line_type_character_correction":true}}}

Commit f88d4cf

Browse files
committed
Setup error context callback for transaction lock waits
With this in place, a session blocking behind another one because of tuple locks will get a context line mentioning the relation name, tuple TID, and operation being done on tuple. For example: LOG: process 11367 still waiting for ShareLock on transaction 717 after 1000.108 ms DETAIL: Process holding the lock: 11366. Wait queue: 11367. CONTEXT: while updating tuple (0,2) in relation "foo" STATEMENT: UPDATE foo SET value = 3; Most usefully, the new line is displayed by log entries due to log_lock_waits, although of course it will be printed by any other log message as well. Author: Christian Kruse, some tweaks by Álvaro Herrera Reviewed-by: Amit Kapila, Andres Freund, Tom Lane, Robert Haas
1 parent ea8c7e9 commit f88d4cf

File tree

9 files changed

+189
-34
lines changed

9 files changed

+189
-34
lines changed

src/backend/access/heap/heapam.c

Lines changed: 56 additions & 24 deletions
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,12 @@ static void GetMultiXactIdHintBits(MultiXactId multi, uint16 *new_infomask,
105105
uint16 *new_infomask2);
106106
static TransactionId MultiXactIdGetUpdateXid(TransactionId xmax,
107107
uint16 t_infomask);
108-
static void MultiXactIdWait(MultiXactId multi, MultiXactStatus status,
109-
int *remaining, uint16 infomask);
110-
static bool ConditionalMultiXactIdWait(MultiXactId multi,
111-
MultiXactStatus status, int *remaining,
112-
uint16 infomask);
108+
static void MultiXactIdWait(MultiXactId multi, MultiXactStatus status, uint16 infomask,
109+
Relation rel, ItemPointer ctid, XLTW_Oper oper,
110+
int *remaining);
111+
static bool ConditionalMultiXactIdWait(MultiXactId multi, MultiXactStatus status,
112+
uint16 infomask, Relation rel, ItemPointer ctid,
113+
XLTW_Oper oper, int *remaining);
113114
static XLogRecPtr log_heap_new_cid(Relation relation, HeapTuple tup);
114115
static HeapTuple ExtractReplicaIdentity(Relation rel, HeapTuple tup, bool key_modified,
115116
bool *copy);
@@ -2714,8 +2715,9 @@ heap_delete(Relation relation, ItemPointer tid,
27142715
if (infomask & HEAP_XMAX_IS_MULTI)
27152716
{
27162717
/* wait for multixact */
2717-
MultiXactIdWait((MultiXactId) xwait, MultiXactStatusUpdate,
2718-
NULL, infomask);
2718+
MultiXactIdWait((MultiXactId) xwait, MultiXactStatusUpdate, infomask,
2719+
relation, &tp.t_data->t_ctid, XLTW_Delete,
2720+
NULL);
27192721
27202722

27212723
/*
@@ -2741,7 +2743,7 @@ heap_delete(Relation relation, ItemPointer tid,
27412743
else
27422744
{
27432745
/* wait for regular transaction to end */
2744-
XactLockTableWait(xwait);
2746+
XactLockTableWait(xwait, relation, &tp.t_data->t_ctid, XLTW_Delete);
27452747
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
27462748

27472749
/*
@@ -3266,8 +3268,9 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
32663268
int remain;
32673269

32683270
/* wait for multixact */
3269-
MultiXactIdWait((MultiXactId) xwait, mxact_status, &remain,
3270-
infomask);
3271+
MultiXactIdWait((MultiXactId) xwait, mxact_status, infomask,
3272+
relation, &oldtup.t_data->t_ctid, XLTW_Update,
3273+
&remain);
32713274
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
32723275

32733276
/*
@@ -3341,7 +3344,8 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
33413344
else
33423345
{
33433346
/* wait for regular transaction to end */
3344-
XactLockTableWait(xwait);
3347+
XactLockTableWait(xwait, relation, &oldtup.t_data->t_ctid,
3348+
XLTW_Update);
33453349
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
33463350

33473351
/*
@@ -4402,14 +4406,18 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,
44024406
if (nowait)
44034407
{
44044408
if (!ConditionalMultiXactIdWait((MultiXactId) xwait,
4405-
status, NULL, infomask))
4409+
status, infomask, relation,
4410+
&tuple->t_data->t_ctid,
4411+
XLTW_Lock, NULL))
44064412
ereport(ERROR,
44074413
(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
44084414
errmsg("could not obtain lock on row in relation \"%s\"",
44094415
RelationGetRelationName(relation))));
44104416
}
44114417
else
4412-
MultiXactIdWait((MultiXactId) xwait, status, NULL, infomask);
4418+
MultiXactIdWait((MultiXactId) xwait, status, infomask,
4419+
relation, &tuple->t_data->t_ctid,
4420+
XLTW_Lock, NULL);
44134421

44144422
/* if there are updates, follow the update chain */
44154423
if (follow_updates &&
@@ -4464,7 +4472,8 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,
44644472
RelationGetRelationName(relation))));
44654473
}
44664474
else
4467-
XactLockTableWait(xwait);
4475+
XactLockTableWait(xwait, relation, &tuple->t_data->t_ctid,
4476+
XLTW_Lock);
44684477

44694478
/* if there are updates, follow the update chain */
44704479
if (follow_updates &&
@@ -5151,7 +5160,9 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid,
51515160
if (needwait)
51525161
{
51535162
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
5154-
XactLockTableWait(members[i].xid);
5163+
XactLockTableWait(members[i].xid, rel,
5164+
&mytup.t_data->t_ctid,
5165+
XLTW_LockUpdated);
51555166
pfree(members);
51565167
goto l4;
51575168
}
@@ -5211,7 +5222,8 @@ heap_lock_updated_tuple_rec(Relation rel, ItemPointer tid, TransactionId xid,
52115222
if (needwait)
52125223
{
52135224
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
5214-
XactLockTableWait(rawxmax);
5225+
XactLockTableWait(rawxmax, rel, &mytup.t_data->t_ctid,
5226+
XLTW_LockUpdated);
52155227
goto l4;
52165228
}
52175229
if (res != HeapTupleMayBeUpdated)
@@ -6076,6 +6088,15 @@ HeapTupleGetUpdateXid(HeapTupleHeader tuple)
60766088
* Do_MultiXactIdWait
60776089
* Actual implementation for the two functions below.
60786090
*
6091+
* 'multi', 'status' and 'infomask' indicate what to sleep on (the status is
6092+
* needed to ensure we only sleep on conflicting members, and the infomask is
6093+
* used to optimize multixact access in case it's a lock-only multi); 'nowait'
6094+
* indicates whether to use conditional lock acquisition, to allow callers to
6095+
* fail if lock is unavailable. 'rel', 'ctid' and 'oper' are used to set up
6096+
* context information for error messages. 'remaining', if not NULL, receives
6097+
* the number of members that are still running, including any (non-aborted)
6098+
* subtransactions of our own transaction.
6099+
*
60796100
* We do this by sleeping on each member using XactLockTableWait. Any
60806101
* members that belong to the current backend are *not* waited for, however;
60816102
* this would not merely be useless but would lead to Assert failure inside
@@ -6093,7 +6114,9 @@ HeapTupleGetUpdateXid(HeapTupleHeader tuple)
60936114
*/
60946115
static bool
60956116
Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,
6096-
int *remaining, uint16 infomask, bool nowait)
6117+
uint16 infomask, bool nowait,
6118+
Relation rel, ItemPointer ctid, XLTW_Oper oper,
6119+
int *remaining)
60976120
{
60986121
bool allow_old;
60996122
bool result = true;
@@ -6130,6 +6153,12 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,
61306153
/*
61316154
* This member conflicts with our multi, so we have to sleep (or
61326155
* return failure, if asked to avoid waiting.)
6156+
*
6157+
* Note that we don't set up an error context callback ourselves,
6158+
* but instead we pass the info down to XactLockTableWait. This
6159+
* might seem a bit wasteful because the context is set up and
6160+
* tore down for each member of the multixact, but in reality it
6161+
* should be barely noticeable, and it avoids duplicate code.
61336162
*/
61346163
if (nowait)
61356164
{
@@ -6138,7 +6167,7 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,
61386167
break;
61396168
}
61406169
else
6141-
XactLockTableWait(memxid);
6170+
XactLockTableWait(memxid, rel, ctid, oper);
61426171
}
61436172

61446173
pfree(members);
@@ -6159,13 +6188,14 @@ Do_MultiXactIdWait(MultiXactId multi, MultiXactStatus status,
61596188
*
61606189
* We return (in *remaining, if not NULL) the number of members that are still
61616190
* running, including any (non-aborted) subtransactions of our own transaction.
6162-
*
61636191
*/
61646192
static void
6165-
MultiXactIdWait(MultiXactId multi, MultiXactStatus status,
6166-
int *remaining, uint16 infomask)
6193+
MultiXactIdWait(MultiXactId multi, MultiXactStatus status, uint16 infomask,
6194+
Relation rel, ItemPointer ctid, XLTW_Oper oper,
6195+
int *remaining)
61676196
{
6168-
Do_MultiXactIdWait(multi, status, remaining, infomask, false);
6197+
(void) Do_MultiXactIdWait(multi, status, infomask, false,
6198+
rel, ctid, oper, remaining);
61696199
}
61706200

61716201
/*
@@ -6183,9 +6213,11 @@ MultiXactIdWait(MultiXactId multi, MultiXactStatus status,
61836213
*/
61846214
static bool
61856215
ConditionalMultiXactIdWait(MultiXactId multi, MultiXactStatus status,
6186-
int *remaining, uint16 infomask)
6216+
uint16 infomask, Relation rel, ItemPointer ctid,
6217+
XLTW_Oper oper, int *remaining)
61876218
{
6188-
return Do_MultiXactIdWait(multi, status, remaining, infomask, true);
6219+
return Do_MultiXactIdWait(multi, status, infomask, true,
6220+
rel, ctid, oper, remaining);
61896221
}
61906222

61916223
/*

src/backend/access/nbtree/nbtinsert.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ _bt_doinsert(Relation rel, IndexTuple itup,
168168
{
169169
/* Have to wait for the other guy ... */
170170
_bt_relbuf(rel, buf);
171-
XactLockTableWait(xwait);
171+
XactLockTableWait(xwait, rel, &itup->t_tid, XLTW_InsertIndex);
172172
/* start over... */
173173
_bt_freestack(stack);
174174
goto top;

src/backend/catalog/index.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2295,7 +2295,9 @@ IndexBuildHeapScan(Relation heapRelation,
22952295
* Must drop the lock on the buffer before we wait
22962296
*/
22972297
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_UNLOCK);
2298-
XactLockTableWait(xwait);
2298+
XactLockTableWait(xwait, heapRelation,
2299+
&heapTuple->t_data->t_ctid,
2300+
XLTW_InsertIndexUnique);
22992301
goto recheck;
23002302
}
23012303
}
@@ -2341,7 +2343,9 @@ IndexBuildHeapScan(Relation heapRelation,
23412343
* Must drop the lock on the buffer before we wait
23422344
*/
23432345
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_UNLOCK);
2344-
XactLockTableWait(xwait);
2346+
XactLockTableWait(xwait, heapRelation,
2347+
&heapTuple->t_data->t_ctid,
2348+
XLTW_InsertIndexUnique);
23452349
goto recheck;
23462350
}
23472351

src/backend/executor/execMain.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1982,7 +1982,9 @@ EvalPlanQualFetch(EState *estate, Relation relation, int lockmode,
19821982
if (TransactionIdIsValid(SnapshotDirty.xmax))
19831983
{
19841984
ReleaseBuffer(buffer);
1985-
XactLockTableWait(SnapshotDirty.xmax);
1985+
XactLockTableWait(SnapshotDirty.xmax,
1986+
relation, &tuple.t_data->t_ctid,
1987+
XLTW_FetchUpdated);
19861988
continue; /* loop back to repeat heap_fetch */
19871989
}
19881990

src/backend/executor/execUtils.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1307,7 +1307,8 @@ check_exclusion_constraint(Relation heap, Relation index, IndexInfo *indexInfo,
13071307
if (TransactionIdIsValid(xwait))
13081308
{
13091309
index_endscan(index_scan);
1310-
XactLockTableWait(xwait);
1310+
XactLockTableWait(xwait, heap, &tup->t_data->t_ctid,
1311+
XLTW_RecheckExclusionConstr);
13111312
goto retry;
13121313
}
13131314

src/backend/replication/logical/snapbuild.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1343,7 +1343,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
13431343
if (TransactionIdIsCurrentTransactionId(xid))
13441344
elog(ERROR, "waiting for ourselves");
13451345

1346-
XactLockTableWait(xid);
1346+
XactLockTableWait(xid, NULL, NULL, XLTW_None);
13471347
}
13481348

13491349
/* nothing could have built up so far, so don't perform cleanup */

src/backend/storage/lmgr/lmgr.c

Lines changed: 100 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,21 @@
2525
#include "utils/inval.h"
2626

2727

28+
/*
29+
* Struct to hold context info for transaction lock waits.
30+
*
31+
* 'oper' is the operation that needs to wait for the other transaction; 'rel'
32+
* and 'ctid' specify the address of the tuple being waited for.
33+
*/
34+
typedef struct XactLockTableWaitInfo
35+
{
36+
XLTW_Oper oper;
37+
Relation rel;
38+
ItemPointer ctid;
39+
} XactLockTableWaitInfo;
40+
41+
static void XactLockTableWaitErrorCb(void *arg);
42+
2843
/*
2944
* RelationInitLockInfo
3045
* Initializes the lock information in a relation descriptor.
@@ -471,7 +486,9 @@ XactLockTableDelete(TransactionId xid)
471486
/*
472487
* XactLockTableWait
473488
*
474-
* Wait for the specified transaction to commit or abort.
489+
* Wait for the specified transaction to commit or abort. If an operation
490+
* is specified, an error context callback is set up. If 'oper' is passed as
491+
* None, no error context callback is set up.
475492
*
476493
* Note that this does the right thing for subtransactions: if we wait on a
477494
* subtransaction, we will exit as soon as it aborts or its top parent commits.
@@ -481,9 +498,31 @@ XactLockTableDelete(TransactionId xid)
481498
* and if so wait for its parent.
482499
*/
483500
void
484-
XactLockTableWait(TransactionId xid)
501+
XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid,
502+
XLTW_Oper oper)
485503
{
486504
LOCKTAG tag;
505+
XactLockTableWaitInfo info;
506+
ErrorContextCallback callback;
507+
508+
/*
509+
* If an operation is specified, set up our verbose error context
510+
* callback.
511+
*/
512+
if (oper != XLTW_None)
513+
{
514+
Assert(RelationIsValid(rel));
515+
Assert(ItemPointerIsValid(ctid));
516+
517+
info.rel = rel;
518+
info.ctid = ctid;
519+
info.oper = oper;
520+
521+
callback.callback = XactLockTableWaitErrorCb;
522+
callback.arg = &info;
523+
callback.previous = error_context_stack;
524+
error_context_stack = &callback;
525+
}
487526

488527
for (;;)
489528
{
@@ -500,6 +539,9 @@ XactLockTableWait(TransactionId xid)
500539
break;
501540
xid = SubTransGetParent(xid);
502541
}
542+
543+
if (oper != XLTW_None)
544+
error_context_stack = callback.previous;
503545
}
504546

505547
/*
@@ -533,6 +575,62 @@ ConditionalXactLockTableWait(TransactionId xid)
533575
return true;
534576
}
535577

578+
/*
579+
* XactLockTableWaitErrorContextCb
580+
* Error context callback for transaction lock waits.
581+
*/
582+
static void
583+
XactLockTableWaitErrorCb(void *arg)
584+
{
585+
XactLockTableWaitInfo *info = (XactLockTableWaitInfo *) arg;
586+
587+
/*
588+
* We would like to print schema name too, but that would require a
589+
* syscache lookup.
590+
*/
591+
if (info->oper != XLTW_None &&
592+
ItemPointerIsValid(info->ctid) && RelationIsValid(info->rel))
593+
{
594+
const char *cxt;
595+
596+
switch (info->oper)
597+
{
598+
case XLTW_Update:
599+
cxt = gettext_noop("while updating tuple (%u,%u) in relation \"%s\"");
600+
break;
601+
case XLTW_Delete:
602+
cxt = gettext_noop("while deleting tuple (%u,%u) in relation \"%s\"");
603+
break;
604+
case XLTW_Lock:
605+
cxt = gettext_noop("while locking tuple (%u,%u) in relation \"%s\"");
606+
break;
607+
case XLTW_LockUpdated:
608+
cxt = gettext_noop("while locking updated version (%u,%u) of tuple in relation \"%s\"");
609+
break;
610+
case XLTW_InsertIndex:
611+
cxt = gettext_noop("while inserting index tuple (%u,%u) in relation \"%s\"");
612+
break;
613+
case XLTW_InsertIndexUnique:
614+
cxt = gettext_noop("while checking uniqueness of tuple (%u,%u) in relation \"%s\"");
615+
break;
616+
case XLTW_FetchUpdated:
617+
cxt = gettext_noop("while rechecking updated tuple (%u,%u) in relation \"%s\"");
618+
break;
619+
case XLTW_RecheckExclusionConstr:
620+
cxt = gettext_noop("while checking exclusion constraint on tuple (%u,%u) in relation \"%s\"");
621+
break;
622+
623+
default:
624+
return;
625+
}
626+
627+
errcontext(cxt,
628+
ItemPointerGetBlockNumber(info->ctid),
629+
ItemPointerGetOffsetNumber(info->ctid),
630+
RelationGetRelationName(info->rel));
631+
}
632+
}
633+
536634
/*
537635
* WaitForLockersMultiple
538636
* Wait until no transaction holds locks that conflict with the given

0 commit comments

Comments
 (0)
0