Fix null argument handling in background migration Rake task
!80375 (merged) added an
additional Gitlab::Json.parse
call to the
gitlab:background_migrations:finalize
Rake task. This worked fine
when the string just had strings or numbers:
parsed = Gitlab::Json.parse('[["id1", "id2"]]')
=> [["id1", "id2"]]
Gitlab::Json.parse(parsed)
=> [["id1", "id2"]]
However, notice what happens if you substitute a null
value:
parsed = Gitlab::Json.parse('[["id1", null]]')
=> [["id1", nil]]
Gitlab::Json.parse(parsed)
JSON::ParserError: not a number or other value ([0][1]) at line 1, column 9 [parse.c:418]
Gitlab::Json.parse
calls to_s
on the input. In the first case,
calling to_s
again on the parsed array is fine since the strings can
be parsed again. However, nil
can't be parsed because JSON expects
null
instead.
In addition, the migration helpers generated incorrect instructions
for nil
arguments. We now use to_json
to show null
instead of
nil
.
Edited by Stan Hu