mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
bridge: Don't pay attention to columns that vswitchd doesn't need.
Not replicating unneeded columns has some value in avoiding CPU time and bandwidth to the database. In ovs-vswitchd, setting cur_cfg as write-only also have great value in avoiding extra reconfiguration steps. When ovs-vsctl is used in its default mode this essentially avoids half of the reconfigurations that ovs-vswitchd currently does. What happens now is: 1. ovs-vsctl updates the database and increments next_cfg. 2. ovs-vswitchd notices the change to the database, reconfigures itself, then increments cur_cfg to match next_cfg. 3. The database sends the change to cur_cfg back to ovs-vswitchd. 4. ovs-vswitchd reconfigures itself a second time. By not replicating cur_cfg we avoid step 3 and save a whole reconfiguration step. Also, now that the database contains interface statistics, this avoids reconfiguring every time that statistics are updated.
This commit is contained in:
@@ -641,11 +641,19 @@ ovsdb_idl_row_update(struct ovsdb_idl_row *row, const struct json *row_json)
|
||||
error = ovsdb_datum_from_json(&datum, &column->type, node->data, NULL);
|
||||
if (!error) {
|
||||
unsigned int column_idx = column - table->class->columns;
|
||||
ovsdb_datum_swap(&row->old[column_idx], &datum);
|
||||
ovsdb_datum_destroy(&datum, &column->type);
|
||||
if (table->modes[column_idx] == OVSDB_IDL_MODE_RW) {
|
||||
changed = true;
|
||||
struct ovsdb_datum *old = &row->old[column_idx];
|
||||
|
||||
if (!ovsdb_datum_equals(old, &datum, &column->type)) {
|
||||
ovsdb_datum_swap(old, &datum);
|
||||
if (table->modes[column_idx] == OVSDB_IDL_MODE_RW) {
|
||||
changed = true;
|
||||
}
|
||||
} else {
|
||||
/* Didn't really change but the OVSDB monitor protocol always
|
||||
* includes every value in a row. */
|
||||
}
|
||||
|
||||
ovsdb_datum_destroy(&datum, &column->type);
|
||||
} else {
|
||||
char *s = ovsdb_error_to_string(error);
|
||||
VLOG_WARN_RL(&syntax_rl, "error parsing column %s in row "UUID_FMT
|
||||
|
Reference in New Issue
Block a user