Личный кабинет
Укажите e-mail, на который будет выслан код восстановления пароля.
На указанный вами адрес e-mail был выслан код подтверждения аккаунта. Введите полученный код для продолжения:
Введите новый пароль два раза:
>+ /* Check if the scan for current scan keys is finished */>+ if (so->arrayKeyCount < btscan->btps_arrayKeyCount)>+ *status = false;>I didn't clearly understand, in which scenario the arrayKeyCount is less>than btps_arrayKeyCount?Consider following array scan keysselect * from test2 where j=ANY(ARRAY[1000,2000,3000]);By the time the current worker has finished reading heap tuples corresponding to array key 1000(arrayKeyCount = 0), some other worker might have advanced the scan to the array key 2000(btps_arrayKeyCount =1). In this case when the current worker fetches next page to scan,it must advance its scan keys before scanning the next page of parallel scan. I hope this helps.
>+BlockNumber>+_bt_parallel_seize(IndexScanDesc scan, bool *status)>The return value of the above function is validated only in _bt_first>function, but in other cases it is not. In other cases it is validated in _bt_readnextpage() which is called after _bt_parallel_seize().>From the function description,>it is possible to return P_NONE for the workers also with status as>true. I feel it is better to handle the P_NONE case internally only>so that callers just check for the status. Am i missing anything?In case of the next block being P_NONE and status true, the codecalls _bt_parallel_done() to notify other workers followed byBTScanPosInvalidate(). Similar check for block = P_NONE alsohappens in existing code. See following in _bt_readnextpage(), if (blkno == P_NONE || !so->currPos.moreRight) { _bt_parallel_done(scan); BTScanPosInvalidate(so->currPos); return false; }So to keep it consistent with the existing code, the check is kept outside _bt_parallel_seize().
В списке pgsql-hackers по дате отправления: