)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"25a4dcbda35c8a7cda8ea5edd85ecc2457929b24","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make BFD upserts preserve omitted timer columns"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"BFDAddCommand could not distinguish an omitted timer argument from an explicit None. Its existing-row path also assigned columns to a RowView wrapper, which made the returned object appear updated without changing OVSDB."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Introduce an internal unset sentinel and give optional timer columns explicit three-state semantics: omission preserves a stored value, an integer sets it, and None clears it. Resolve the actual IDL row before updating, accept min_rx zero as allowed by the OVN schema, and make functional tests re-read the committed row independently."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"86d512bb_569276bc","line":9,"updated":"2026-09-02 08:21:14.000000000","message":"Please limit the lines to 72 chars: https://docs.openstack.org/contributors/common/git.html#body","commit_id":"77d4fe5e760330bfeb263204bbd19fad3bbcd8e6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"25a4dcbda35c8a7cda8ea5edd85ecc2457929b24","unresolved":true,"context_lines":[{"line_number":9,"context_line":"BFDAddCommand could not distinguish an omitted timer argument from an explicit None. Its existing-row path also assigned columns to a RowView wrapper, which made the returned object appear updated without changing OVSDB."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Introduce an internal unset sentinel and give optional timer columns explicit three-state semantics: omission preserves a stored value, an integer sets it, and None clears it. Resolve the actual IDL row before updating, accept min_rx zero as allowed by the OVN schema, and make functional tests re-read the committed row independently."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-Authored-By: Claude Fable 5 \u003cnoreply@anthropic.com\u003e"},{"line_number":14,"context_line":"Change-Id: I8c0c68eea6b8bd35eec78d09635a0af40f3bfe21"},{"line_number":15,"context_line":"Signed-off-by: Premysl Kouril \u003cpremysl.kouril@ultimum.io\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"457caf3a_918761d9","line":12,"updated":"2026-09-02 08:21:14.000000000","message":"Missing `Related-Bug: #2165121`\n\nIt is also nice to push the patches with the related topic:\n`git review -t bug/2165121`. That allows faster searches in gerrit","commit_id":"77d4fe5e760330bfeb263204bbd19fad3bbcd8e6"}],"ovsdbapp/constants.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"25a4dcbda35c8a7cda8ea5edd85ecc2457929b24","unresolved":true,"context_lines":[{"line_number":49,"context_line":"# Used by APIs that need to distinguish an omitted optional argument from an"},{"line_number":50,"context_line":"# explicit ``None``.  In particular, BFD timer columns are optional scalar"},{"line_number":51,"context_line":"# columns: omission preserves an existing value while ``None`` clears it."},{"line_number":52,"context_line":"BFD_COLUMN_UNSET \u003d object()"},{"line_number":53,"context_line":"DEFAULT_CHAIN \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"f5fdcd83_8be14883","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":2},"updated":"2026-09-02 08:21:14.000000000","message":"There is no need to define a constant here. There are other examples in the code using `_NO_DEFAULT \u003d object()` in the same file.","commit_id":"77d4fe5e760330bfeb263204bbd19fad3bbcd8e6"}],"ovsdbapp/schema/ovn_northbound/commands.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"25a4dcbda35c8a7cda8ea5edd85ecc2457929b24","unresolved":true,"context_lines":[{"line_number":1134,"context_line":"    table_name \u003d \u0027BFD\u0027"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"    def __init__(self, api, logical_port, dst_ip,"},{"line_number":1137,"context_line":"                 min_tx\u003dconst.BFD_COLUMN_UNSET,"},{"line_number":1138,"context_line":"                 min_rx\u003dconst.BFD_COLUMN_UNSET,"},{"line_number":1139,"context_line":"                 detect_mult\u003dconst.BFD_COLUMN_UNSET, external_ids\u003dNone,"},{"line_number":1140,"context_line":"                 options\u003dNone, may_exist\u003dFalse):"},{"line_number":1141,"context_line":"        for attr in (\u0027logical_port\u0027, \u0027dst_ip\u0027):"},{"line_number":1142,"context_line":"            if not isinstance(locals().get(attr), str):"}],"source_content_type":"text/x-python","patch_set":2,"id":"0d7708f5_4f6d56fe","line":1139,"range":{"start_line":1137,"start_character":17,"end_line":1139,"end_character":52},"updated":"2026-09-02 08:21:14.000000000","message":"Do not change the order of existing kwargs. Add the new ones at the end, except for `may_exist\u003dFalse`, that is always at the end of the ovsdbapp methods.","commit_id":"77d4fe5e760330bfeb263204bbd19fad3bbcd8e6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"25a4dcbda35c8a7cda8ea5edd85ecc2457929b24","unresolved":true,"context_lines":[{"line_number":1150,"context_line":"            if value is const.BFD_COLUMN_UNSET or value is None:"},{"line_number":1151,"context_line":"                continue"},{"line_number":1152,"context_line":"            minimum \u003d 0 if attr \u003d\u003d \u0027min_rx\u0027 else 1"},{"line_number":1153,"context_line":"            if (not isinstance(value, int) or isinstance(value, bool) or"},{"line_number":1154,"context_line":"                    value \u003c minimum):"},{"line_number":1155,"context_line":"                raise ValueError("},{"line_number":1156,"context_line":"                    \"%s must be of type int and \u003e\u003d %d\" % (attr, minimum))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5e4b2cdd_62c697e8","line":1153,"range":{"start_line":1153,"start_character":46,"end_line":1153,"end_character":69},"updated":"2026-09-02 08:21:14.000000000","message":"Why this check?","commit_id":"77d4fe5e760330bfeb263204bbd19fad3bbcd8e6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"25a4dcbda35c8a7cda8ea5edd85ecc2457929b24","unresolved":true,"context_lines":[{"line_number":1187,"context_line":"                raise RuntimeError("},{"line_number":1188,"context_line":"                    \"Unexpected duplicates in database for port %s \""},{"line_number":1189,"context_line":"                    \"and dst_ip %s\" % (self.logical_port, self.dst_ip))"},{"line_number":1190,"context_line":"            # BFDFindCommand returns RowView objects.  Mutating a RowView"},{"line_number":1191,"context_line":"            # would only set attributes on the wrapper and would not update"},{"line_number":1192,"context_line":"            # OVSDB, so resolve the corresponding IDL row before setting any"},{"line_number":1193,"context_line":"            # columns."},{"line_number":1194,"context_line":"            bfd \u003d self.api.tables[self.table_name].rows[bfd_result[0].uuid]"},{"line_number":1195,"context_line":"            if self.may_exist:"},{"line_number":1196,"context_line":"                self.set_columns(bfd, **self.columns)"},{"line_number":1197,"context_line":"                # When no changes are made to a record, the parent"}],"source_content_type":"text/x-python","patch_set":2,"id":"ab090001_626fbc7d","line":1194,"range":{"start_line":1190,"start_character":12,"end_line":1194,"end_character":75},"updated":"2026-09-02 08:21:14.000000000","message":"That is an previous existing bug that should be handled in another patch, with the corresponding bug and tests.","commit_id":"77d4fe5e760330bfeb263204bbd19fad3bbcd8e6"}]}
