> it doesn't even solve the core problem as you'd have to deploy new versions of all binaries precisely in sync to avoid data incorrect because some clients know about the v2 table and others don't
its painful but this approach does work as long as every client is migrated between each step.
after 1: v1 is valid, reading v1, writing v1
after 2: v1 is valid, reading v1, writing v1 and v2
after 3: v1 and v2 are valid, reading v1, writing v1 and v2
after 4: v1 and v2 are valid, reading v2, writing v1 and v2
after 5: v2 is valid, reading v2, writing v2
after 6: v2 is valid, reading v2, writing v2
at each point, both the current and the previous version are reading a valid table and writing to a table whose values will make it into v2.
its painful but this approach does work as long as every client is migrated between each step.
after 1: v1 is valid, reading v1, writing v1
after 2: v1 is valid, reading v1, writing v1 and v2
after 3: v1 and v2 are valid, reading v1, writing v1 and v2
after 4: v1 and v2 are valid, reading v2, writing v1 and v2
after 5: v2 is valid, reading v2, writing v2
after 6: v2 is valid, reading v2, writing v2
at each point, both the current and the previous version are reading a valid table and writing to a table whose values will make it into v2.