|Subject||Re: [Firebird-Architect] Bi-directional indexes|
> The backward reader keeps a read lock on page 125, then:What if we have more than one concurent backward readers ? Each of them
> 1) tries a no wait handoff to the left sibling page
> 2) if successful, we're done
> 3) otherwise, refetch the current page (125) for write
> 4) mark it with btr_dont_gc and release
> 5) fetch the left sibling page
> 6) handoff right sibling pointers until the remembered page (125) is found
> 7) fetch the remembered page (125) for write, clear btr_dont_gc and release
> Could this work? Yeah, it requires two page writes per every backward scan
> conflicting with a page modification, but perhaps it's acceptable?
can mark page with btr_dont_gc but who will clear this flag ?