Don't go into an infinite loop if the batch contains only rows that are
skipped due to ipb_user === 0.
Change-Id: I2b8398bcc78267e80313ecc6e64033805d83fdef
When copying blocks from ipblocks to the new block table, skip rows for
which the relevant ID already exists in the block table. In write-both
mode, it is expected that some blocks will have already been copied.
This also allows the script to be run multiple times on a wiki, so that
it can be used to clean up the current situation in production.
Bug: T355034
Change-Id: I54e65adef685bfc7d4f63853cd50ca0f55e2ecdb
The old ipblocks table is left touched.
The data is normalized to match the new schema, including resolving
any data integrity issues with ipb_parent_block_id (T282890).
Data is not validated as it is copied. Existing logic could be used from
DatabaseBlockStore, but it performs other non-idempotent actions, and
would probably slow down the script.
The default batch size is 500 instead of the typical 1000 because two
INSERTs are performed for each ipblock.
Bug: T350361
Bug: T282890
Change-Id: I526bb9b8febc5c1cb6a56b9a1044dedcf99c2224