Rome university - Mailing list pgsql-hackers
From | letizia leo |
---|---|
Subject | Rome university |
Date | |
Msg-id | 20060502143114.4691.qmail@web86903.mail.ukl.yahoo.com Whole thread Raw |
Responses |
Re: Rome university
Re: Rome university |
List | pgsql-hackers |
<table border="0" cellpadding="0" cellspacing="0" style="MARGIN-LEFT: -5.25pt; WIDTH: 101.16%; mso-cellspacing: 0cm; mso-padding-alt:0cm 0cm 0cm 0cm" width="101%"><tbody><tr><td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0cm; BORDER-TOP:#ece9d8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 100%; PADDING-TOP: 0cm; BORDER-BOTTOM:#ece9d8; BACKGROUND-COLOR: transparent" valign="top" width="100%"><pre><tt><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">Hi,</span></tt></pre><pre><tt><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"> </span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">We're a team from Rome University (Italy) and we are working on an</span></tt><tt><span lang="EN-GB"style="mso-ansi-language: EN-GB"><font size="2"> </font></span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">hacking of PostgreSQL MVCC. The basic idea isto have multiple </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">instances </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">of a same user transaction concurrently executing against the DB in</span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">orderto achieve fault tolerance. We do not want to bother you with the </span></tt></pre><pre><tt><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">details of our idea, but of coursewe'd be delighted toprovide you </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">additional information wheter you were interested or even just curious!</span></tt></pre><pre><tt><spanlang="EN-GB" style="mso-ansi-language: EN-GB"><font size="2"> </font></span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">We're writing to you since we're studying the current MVCC </span></tt></pre><pre><tt><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">implementation and we're stuckwith a doubt that's driving us crazy </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">since a couple of weeks so we'd be extremely grateful to anybody who</span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">couldenlighten us.</span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt;mso-ansi-language: EN-GB"> </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">Our amlethic question is:</span></tt></pre><pre><tt><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"> </span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">tqual.c, HeapTupleSatisfies* (Self,Now etc). Let's focus on </span></tt></pre><pre><tt><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">HeapTupleSatisfiesItself for simplicity.The piece of code that's </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">unclear is the following:</span></tt></pre><pre><tt><span lang="EN-GB"style="mso-ansi-language: EN-GB"><font size="2"> </font></span></tt></pre><pre><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">144: elseif (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmin(tuple)))</font></span></pre><pre><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">145: {</font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><fontface="Arial Unicode MS">146: if (tuple->t_infomask & HEAP_XMAX_INVALID) /* xid invalid*/</font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB"><font face="Arial Unicode MS">147: return true;</font></span></pre><pre><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">148: </font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB"><font face="Arial Unicode MS">149: if (tuple->t_infomask & HEAP_IS_LOCKED) /* not deleter */</font></span></pre><pre><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB"><font face="Arial Unicode MS">150: return true;</font></span></pre><pre><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">151: </font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB"><font face="Arial Unicode MS">152: Assert(!(tuple->t_infomask & HEAP_XMAX_IS_MULTI));</font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB"><font face="Arial Unicode MS">153: </font></span></pre><pre><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">154: /* deleting subtransaction aborted? */</font></span></pre><pre><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">155: if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))</font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt;mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">156: {</font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><fontface="Arial Unicode MS">157: tuple->t_infomask |= HEAP_XMAX_INVALID;</font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB"><font face="Arial Unicode MS">158: SetBufferCommitInfoNeedsSave(buffer);</font></span></pre><pre><fontface="Arial Unicode MS"><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">159: return true;</span><spanlang="EN-GB" style="mso-ansi-language: EN-GB"></span></font></pre><pre><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">160: }</font></span></pre><pre><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><fontface="Arial Unicode MS">161: </font></span></pre><pre><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">162: Assert(TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXmax(tuple)));</font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB"><font face="Arial Unicode MS">163: </font></span></pre><pre><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB"><font face="Arial Unicode MS">164: return false;</font></span></pre><pre><font face="ArialUnicode MS"><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">165: }</span><span lang="EN-GB" style="mso-ansi-language: EN-GB"></span></font></pre><pre><span lang="EN-GB"style="mso-ansi-language: EN-GB"><font face="Arial Unicode MS"><font size="2"> </font></font></span></pre><pre><tt><spanlang="EN-GB" style="mso-ansi-language: EN-GB"><font size="2"> </font></span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">and the doubt is the following: how is it possible that -line 144- Xmin </span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt;mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">isthe current transaction ( i.e. it has created this tuple, it is </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE:12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">holding an exclusive lock on it since it hasnot committed yet) and </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt;mso-ansi-language: EN-GB">that </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">-line 149- there is a different (?) transaction that is also locking</span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">the </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt;mso-ansi-language: EN-GB">tuple(HEAP_IS_LOCKED=(HEAP_XMAX_EXCL_LOCK||HEAP_XMAX_SHARED_LOCK) )? </span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">Unlesswe are missing something, this situation is possible exclusively </span></tt></pre><pre><tt><span lang="EN-GB"style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language: EN-GB">in case the XMAX transaction isa subtransaction of XMIN, which can </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">access the tuple despite the exclusive lock held by XMIN. This seems</span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">correct according to the comment in line 154, which refers to a </span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt;mso-ansi-language: EN-GB">"subtransaction".</span></tt></pre><pre><tt><spanlang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt;mso-ansi-language: EN-GB"> </span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size:10.0pt; mso-ansi-language: EN-GB">Are we understanding correctly what this code is doing and the related</span></tt></pre><pre><tt><span lang="EN-GB" style="FONT-SIZE: 12pt; mso-bidi-font-size: 10.0pt; mso-ansi-language:EN-GB">underlying MVCC mechanisms?</span></tt><tt><span lang="EN-GB" style="mso-ansi-language: EN-GB"></span></tt></pre><pre><tt><spanlang="EN-GB" style="mso-ansi-language: EN-GB"> </span></tt></pre><pre><tt><span lang="EN-GB"style="mso-ansi-language: EN-GB"> </span></tt></pre><pre><tt><span lang="EN-GB" style="mso-ansi-language: EN-GB"> </span></tt></pre><pre><tt><spanlang="EN-GB" style="mso-ansi-language:EN-GB"> </span></tt></pre><pre><tt><span lang="EN-GB"style="mso-ansi-language: EN-GB"> </span></tt></pre><div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><fontsize="5"><font face="Times New Roman"> <span style="FONT-SIZE: 12pt; FONT-FAMILY:'Arial Unicode MS'"></span></font></font></div></td></tr></tbody></table><p>Chiacchieracon i tuoi amici in tempo reale! <br /> http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com
pgsql-hackers by date: