where the numbers are page numbers *at that level*, starting from 0.
To find the physical block # corresponding to leaf page n, we need to
-count the number number of leaf and upper-level pages preceding page n.
+count the number of leaf and upper-level pages preceding page n.
This turns out to be
y = n + (n / F + 1) + (n / F^2 + 1) + ... + 1
* RecordTransactionAbort() do not optimise away the transaction
* completion record which recovery relies upon to release locks. It's a
* hack, but for a corner case not worth adding code for into the main
- * commit path. Second, must must assign an xid before the lock is
+ * commit path. Second, we must assign an xid before the lock is
* recorded in shared memory, otherwise a concurrently executing
* GetRunningTransactionLocks() might see a lock associated with an
* InvalidTransactionId which we later assert cannot happen.
On machines with strong memory ordering, these weaker barriers will simply
prevent compiler rearrangement, without emitting any actual machine code.
-On machines with weak memory ordering, they will will prevent compiler
+On machines with weak memory ordering, they will prevent compiler
reordering and also emit whatever hardware barrier may be required. Even
on machines with weak memory ordering, a read or write barrier may be able
to use a less expensive instruction than a full barrier.