]> git.proxmox.com Git - mirror_ovs.git/blob - ovsdb/ovsdb-server.1.in
ovn: fix ovn-northd leak in build_acls
[mirror_ovs.git] / ovsdb / ovsdb-server.1.in
1 .\" -*- nroff -*-
2 .de IQ
3 . br
4 . ns
5 . IP "\\$1"
6 ..
7 .TH ovsdb\-server 1 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
8 .\" This program's name:
9 .ds PN ovsdb\-server
10 .
11 .SH NAME
12 ovsdb\-server \- Open vSwitch database server
13 .
14 .SH SYNOPSIS
15 \fBovsdb\-server\fR
16 [\fIdatabase\fR]\&...
17 [\fB\-\-remote=\fIremote\fR]\&...
18 [\fB\-\-run=\fIcommand\fR]
19 .so lib/daemon-syn.man
20 .so lib/service-syn.man
21 .so lib/vlog-syn.man
22 .so ovsdb/replication-syn.man
23 .so lib/ssl-syn.man
24 .so lib/ssl-bootstrap-syn.man
25 .so lib/ssl-peer-ca-cert-syn.man
26 .so lib/unixctl-syn.man
27 .so lib/common-syn.man
28 .
29 .SH DESCRIPTION
30 The \fBovsdb\-server\fR program provides RPC interfaces to one or more
31 Open vSwitch databases (OVSDBs). It supports JSON-RPC client
32 connections over active or passive TCP/IP or Unix domain sockets.
33 .PP
34 Each OVSDB file may be specified on the command line as \fIdatabase\fR.
35 If none is specified, the default is \fB@DBDIR@/conf.db\fR. The database
36 files must already have been created and initialized using, for
37 example, \fBovsdb\-tool create\fR.
38 .
39 .SH "ACTIVE and BACKUP"
40 \fBovsdb\-server\fR runs either as a backup server, or as an active server.
41 When \fBovsdb\-server\fR is running as a backup server, all transactions that
42 can modify the database content, including the lock commands are rejected.
43 Active server, on the other hand, accepts all ovsdb server transactions.
44 When \fBovsdb\-server\fR role changes, all existing client connection are
45 reset, requiring clients to reconnect to the server.
46 .PP
47 By default, \fBovsdb\-server\fR runs as an active server, except when the
48 \fB\-\-sync\-from=\fIserver\fR command line option is specified and without
49 the \fB\-\-no\-sync option\fR. During runtime, \fBovsdb\-server\fR role can be switch by using appctl commands.
50 .PP
51 \fBovsdb-server/connect\-active\-ovsdb\-server\fR switches
52 \fBovsdb\-server\fR into a backup server, Conversely,
53 \fBovsdb-server/disconnect\-active\-ovsdb\-server\fR switches server into
54 an active one.
55 .
56 .SH OPTIONS
57 .
58 .IP "\fB\-\-remote=\fIremote\fR"
59 Adds \fIremote\fR as a connection method used by \fBovsdb\-server\fR.
60 \fIremote\fR must take one of the following forms:
61 .
62 .RS
63 .so ovsdb/remote-passive.man
64 .so ovsdb/remote-active.man
65 .
66 .IP "\fBdb:\fIdb\fB,\fItable\fB,\fIcolumn\fR"
67 Reads additional connection methods from \fIcolumn\fR in all of the
68 rows in \fItable\fR within \fIdb\fR. As the contents of \fIcolumn\fR changes,
69 \fBovsdb\-server\fR also adds and drops connection methods accordingly.
70 .IP
71 If \fIcolumn\fR's type is string or set of strings, then the
72 connection methods are taken directly from the column. The connection
73 methods in the column must have one of the forms described above.
74 .IP
75 If \fIcolumn\fR's type is UUID or set of UUIDs and references a table,
76 then each UUID is looked up in the referenced table to obtain a row.
77 The following columns in the row, if present and of the correct type,
78 configure a connection method. Any additional columns are ignored.
79 .RS
80 .IP "\fBtarget\fR (string)"
81 Connection method, in one of the forms described above. This column
82 is mandatory: if it is missing or empty then no connection method can
83 be configured.
84 .IP "\fBmax_backoff\fR (integer)"
85 Maximum number of milliseconds to wait between connection attempts.
86 .IP "\fBinactivity_probe\fR (integer)"
87 Maximum number of milliseconds of idle time on connection to
88 client before sending an inactivity probe message.
89 .IP "\fBread_only\fR (boolean)"
90 If true, only read-only transactions are allowed on this connection.
91 .RE
92 .IP
93 It is an error for \fIcolumn\fR to have another type.
94 .RE
95 .
96 .IP
97 To connect or listen on multiple connection methods, use multiple
98 \fB\-\-remote\fR options.
99 .
100 .IP "\fB\-\-run=\fIcommand\fR]"
101 Ordinarily \fBovsdb\-server\fR runs forever, or until it is told to
102 exit (see \fBRUNTIME MANAGEMENT COMMANDS\fR below). With this option,
103 \fBovsdb\-server\fR instead starts a shell subprocess running
104 \fIcommand\fR. When the subprocess terminates, \fBovsdb\-server\fR
105 also exits gracefully. If the subprocess exits normally with exit
106 code 0, then \fBovsdb\-server\fR exits with exit code 0 also;
107 otherwise, it exits with exit code 1.
108 .IP
109 This option can be useful where a database server is needed only to
110 run a single command, e.g.:
111 .B "ovsdb\-server \-\-remote=punix:socket \-\-run='ovsdb\-client dump unix:socket Open_vSwitch'"
112 .IP
113 This option is not supported on Windows platform.
114 .SS "Daemon Options"
115 .ds DD \
116 \fBovsdb\-server\fR detaches only after it starts listening on all \
117 configured remotes.
118 .so lib/daemon.man
119 .SS "Service Options"
120 .so lib/service.man
121 .SS "Logging Options"
122 .so lib/vlog.man
123 .SS "Syncing Options"
124 .so ovsdb/replication.man
125 .SS "Public Key Infrastructure Options"
126 The options described below for configuring the SSL public key
127 infrastructure accept a special syntax for obtaining their
128 configuration from the database. If any of these options is given
129 \fBdb:\fIdb\fB,\fItable\fB,\fIcolumn\fR as its argument, then the
130 actual file name is read from the specified \fIcolumn\fR in \fItable\fR
131 within the \fIdb\fR database. The \fIcolumn\fR must have type
132 string or set of strings. The first nonempty string in the table is taken
133 as the file name. (This means that ordinarily there should be at most
134 one row in \fItable\fR.)
135 .so lib/ssl.man
136 .so lib/ssl-bootstrap.man
137 .so lib/ssl-peer-ca-cert.man
138 .SS "Other Options"
139 .so lib/unixctl.man
140 .so lib/common.man
141 .SH "RUNTIME MANAGEMENT COMMANDS"
142 \fBovs\-appctl\fR(8) can send commands to a running
143 \fBovsdb\-server\fR process. The currently supported commands are
144 described below.
145 .SS "OVSDB\-SERVER COMMANDS"
146 These commands are specific to \fBovsdb\-server\fR.
147 .IP "\fBexit\fR"
148 Causes \fBovsdb\-server\fR to gracefully terminate.
149 .IP "\fBovsdb\-server/compact\fR [\fIdb\fR]\&..."
150 Compacts each database \fIdb\fR in-place. If no \fIdb\fR is
151 specified, compacts every database in-place. A database is also
152 compacted automatically when a transaction is logged if it is over 4
153 times as large as its previous compacted size (and at least 10 MB),
154 but not before 100 commits have been added or 10 minutes have elapsed
155 since the last compaction.
156 .
157 .IP "\fBovsdb\-server/reconnect\fR"
158 Makes \fBovsdb\-server\fR drop all of the JSON\-RPC
159 connections to database clients and reconnect.
160 .IP
161 This command might be useful for debugging issues with database
162 clients.
163 .
164 .IP "\fBovsdb\-server/add\-remote \fIremote\fR"
165 Adds a remote, as if \fB\-\-remote=\fIremote\fR had been specified on
166 the \fBovsdb\-server\fR command line. (If \fIremote\fR is already a
167 remote, this command succeeds without changing the configuration.)
168 .
169 .IP "\fBovsdb\-server/remove\-remote \fIremote\fR"
170 Removes the specified \fIremote\fR from the configuration, failing
171 with an error if \fIremote\fR is not configured as a remote. This
172 command only works with remotes that were named on \fB\-\-remote\fR or
173 \fBovsdb\-server/add\-remote\fR, that is, it will not remove remotes
174 added indirectly because they were read from the database by
175 configuring a \fBdb:\fIdb\fB,\fItable\fB,\fIcolumn\fR remote.
176 (You can remove a database source with \fBovsdb\-server/remove\-remote
177 \fBdb:\fIdb\fB,\fItable\fB,\fIcolumn\fR, but not individual
178 remotes found indirectly through the database.)
179 .
180 .IP "\fBovsdb\-server/list\-remotes"
181 Outputs a list of the currently configured remotes named on
182 \fB\-\-remote\fR or \fBovsdb\-server/add\-remote\fR, that is, it does
183 not list remotes added indirectly because they were read from the
184 database by configuring a
185 \fBdb:\fIdb\fB,\fItable\fB,\fIcolumn\fR remote.
186 .
187 .IP "\fBovsdb\-server/add\-db \fIdatabase\fR"
188 Adds the \fIdatabase\fR to the running \fBovsdb\-server\fR. The database
189 file must already have been created and initialized using, for example,
190 \fBovsdb\-tool create\fR.
191 .
192 .IP "\fBovsdb\-server/remove\-db \fIdatabase\fR"
193 Removes \fIdatabase\fR from the running \fBovsdb\-server\fR. \fIdatabase\fR
194 must be a database name as listed by \fBovsdb-server/list\-dbs\fR.
195 .IP
196 If a remote has been configured that points to the specified
197 \fIdatabase\fR (e.g. \fB\-\-remote=db:\fIdatabase\fB,\fR... on the
198 command line), then it will be disabled until another database with
199 the same name is added again (with \fBovsdb\-server/add\-db\fR).
200 .IP
201 Any public key infrastructure options specified through this database
202 (e.g. \fB\-\-private\-key=db:\fIdatabase,\fR... on the command line)
203 will be disabled until another database with the same name is added
204 again (with \fBovsdb\-server/add\-db\fR).
205 .
206 .IP "\fBovsdb\-server/list\-dbs"
207 Outputs a list of the currently configured databases added either through
208 the command line or through the \fBovsdb\-server/add\-db\fR command.
209 .
210 .IP "\fBovsdb\-server/set\-active\-ovsdb\-server \fIserver"
211 Sets the active \fIserver\fR from which \fBovsdb\-server\fR connects through
212 \fBovsdb\-server/connect\-active\-ovsdb\-server\fR.
213 .
214 .IP "\fBovsdb\-server/get\-active\-ovsdb\-server"
215 Gets the active server from which \fBovsdb\-server\fR is currently synchronizing
216 its databases.
217 .
218 .IP "\fBovsdb\-server/connect\-active\-ovsdb\-server"
219 Causes \fBovsdb\-server\fR to synchronize its databases with the server
220 specified by \fBovsdb\-server/set\-active\-ovsdb\-server\fR.
221 .
222 .IP "\fBovsdb\-server/disconnect\-active\-ovsdb\-server"
223 Causes \fBovsdb\-server\fR to stop synchronizing its databases with a active server.
224 .
225 .IP "\fBovsdb\-server/set\-sync\-exclude\-tables \fIdb\fB:\fItable\fR[\fB,\fIdb\fB:\fItable\fR]..."
226 Sets the \fItable\fR whitin \fIdb\fR that will be excluded from synchronization.
227 .
228 .IP "\fBovsdb\-server/get\-sync\-exclude\-tables"
229 Gets the tables that are currently excluded from synchronization.
230 .
231 .IP "\fBovsdb\-server/sync\-status"
232 Prints a summary of replication run time information. The \fBstate\fR
233 information is always provided, indicating whether the server is running
234 in the \fIactive\fR or the \fIbackup\fR mode.
235 When running in backup mode, replication connection status, which
236 can be either \fIconnecting\fR, \fIreplicating\fR or \fIerror\fR, are shown.
237 When the connection is in \fIreplicating\fR state, further output shows
238 the list of databases currently replicating, and the tables that are
239 excluded.
240 .
241 .so lib/vlog-unixctl.man
242 .so lib/memory-unixctl.man
243 .so lib/coverage-unixctl.man
244 .SH "SPECIFICATIONS"
245 .
246 .PP
247 \fBovsdb\-server\fR implements the Open vSwitch Database (OVSDB)
248 protocol specified in RFC 7047, with the following clarifications:
249 .
250 .IP "3.1. JSON Usage"
251 RFC 4627 says that names within a JSON object should be unique.
252 The Open vSwitch JSON parser discards all but the last value
253 for a name that is specified more than once.
254 .
255 .IP
256 The definition of <error> allows for implementation extensions.
257 Currently \fBovsdb\-server\fR uses the following additional "error"
258 strings which might change in later releases):
259 .
260 .RS
261 .IP "\fBsyntax error\fR or \fBunknown column\fR"
262 The request could not be parsed as an OVSDB request. An additional
263 "syntax" member, whose value is a string that contains JSON, may
264 narrow down the particular syntax that could not be parsed.
265 .IP "\fBinternal error\fR"
266 The request triggered a bug in \fBovsdb\-server\fR.
267 .IP "\fBovsdb error\fR"
268 A map or set contains a duplicate key.
269 .RE
270 .
271 .IP "3.2. Schema Format"
272 RFC 7047 requires the "version" field in <database-schema>. Current
273 versions of \fBovsdb\-server\fR allow it to be omitted (future
274 versions are likely to require it).
275 .IP
276 RFC 7047 allows columns that contain weak references to be immutable.
277 This raises the issue of the behavior of the weak reference when the
278 rows that it references are deleted. Since version 2.6,
279 \fBovsdb\-server\fR forces columns that contain weak references to be
280 mutable.
281 .
282 .IP "4. Wire Protocol"
283 The original OVSDB specifications included the following reason,
284 omitted from RFC 7047, to operate JSON-RPC directly over a stream
285 instead of over HTTP:
286 .
287 .RS
288 .IP \(bu
289 JSON-RPC is a peer-to-peer protocol, but HTTP is a client-server
290 protocol, which is a poor match. Thus, JSON-RPC over HTTP requires
291 the client to periodically poll the server to receive server requests.
292 .IP \(bu
293 HTTP is more complicated than stream connections and doesn't provide
294 any corresponding advantage.
295 .IP \(bu
296 The JSON-RPC specification for HTTP transport is incomplete.
297 .RE
298 .
299 .IP "4.1.5. Monitor"
300 For backward compatibility, \fBovsdb\-server\fR currently permits a
301 single <monitor-request> to be used instead of an array; it is treated
302 as a single-element array. Future versions of \fBovsdb\-server\fR
303 might remove this compatibility feature.
304 .IP
305 Because the <json-value> parameter is used to match subsequent update
306 notifications (see below) to the request, it must be unique among all
307 active monitors. \fBovsdb\-server\fR rejects attempt to create two
308 monitors with the same identifier.
309 .
310 .IP "4.1.12. Monitor_cond"
311 A new monitor method added in Open vSwitch version 2.6. The monitor_cond
312 request enables a client to replicate subsets of tables within an OVSDB
313 database by requesting notifications of changes to rows matching one of
314 the conditions specified in "where" by receiving the specified contents
315 of these rows when table updates occur. Monitor_cond also allows a more
316 efficient update notifications by receiving table-updates2 notifications
317 (described below).
318 .
319 .IP
320 The monitor method described in Section 4.1.5 also applies to monitor_cond,
321 with the following exceptions:
322 .
323 .RS
324 .IP \(bu
325 RPC request method becomes "monitor_cond".
326 .IP \(bu
327 Reply result follows <table-updates2>, described in Section 4.1.14.
328 .IP \(bu
329 Subsequent changes are sent to the client using the "update2" monitor
330 notification, described in Section 4.1.14
331 .IP \(bu
332 Update notifications are being sent only for rows matching [<condition>*].
333 .RE
334 .
335 .IP
336 The request object has the following members:
337 .
338 .PP
339 .RS
340 .nf
341 "method": "monitor_cond"
342 "params": [<db-name>, <json-value>, <monitor-cond-requests>]
343 "id": <nonnull-json-value>
344 .fi
345 .RE
346 .
347 .IP
348 The <json-value> parameter is used to match subsequent update notifications
349 (see below) to this request. The <monitor-cond-requests> object maps the name
350 of the table to an array of <monitor-cond-request>.
351 .
352 .IP
353 Each <monitor-cond-request> is an object with the following members:
354 .
355 .PP
356 .RS
357 .nf
358 "columns": [<column>*] optional
359 "where": [<condition>*] optional
360 "select": <monitor-select> optional
361 .fi
362 .RE
363 .
364 .IP
365 The "columns", if present, define the columns within the table to be monitored
366 that match conditions. If not present all columns are being monitored.
367 .
368 .IP
369 The "where" if present is a JSON array of <condition> and boolean values. If not
370 present or condition is an empty array, implicit True will be considered and
371 updates on all rows will be sent.
372 .
373 .IP
374 <monitor-select> is an object with the following members:
375 .
376 .PP
377 .RS
378 .nf
379 "initial": <boolean> optional
380 "insert": <boolean> optional
381 "delete": <boolean> optional
382 "modify": <boolean> optional
383 .fi
384 .RE
385 .
386 .IP
387 The contents of this object specify how the columns or table are to be
388 monitored as explained in more detail below.
389 .
390 .IP
391 The response object has the following members:
392 .
393 .PP
394 .RS
395 .nf
396 "result": <table-updates2>
397 "error": null
398 "id": same "id" as request
399 .fi
400 .RE
401 .
402 .IP
403 The <table-updates2> object is described in detail in Section 4.1.14. It
404 contains the contents of the tables for which "initial" rows are selected.
405 If no tables initial contents are requested, then "result" is an empty object.
406 .
407 .IP
408 Subsequently, when changes to a specified table that match one of the conditions
409 in monitor-cond-request are committed, the changes are automatically sent to the
410 client using the "update2" monitor notification (see Section 4.1.14). This
411 monitoring persists until the JSON-RPC session terminates or until the client
412 sends a "monitor_cancel" JSON-RPC request.
413 .
414 .IP
415 Each <monitor-cond-request> specifies one or more conditions and the manner in
416 which the rows that match the conditions are to be monitored. The circumstances in
417 which an "update" notification is sent for a row within the table are determined by
418 <monitor-select>:
419 .
420 .RS
421 .IP \(bu
422 If "initial" is omitted or true, every row in the original table that matches one of
423 the conditions is sent as part of the response to the "monitor_cond" request.
424 .IP \(bu
425 If "insert" is omitted or true, "update" notifications are sent for rows newly
426 inserted into the table that match conditions or for rows modified in the table
427 so that their old version does not match the condition and new version does.
428 .IP \(bu
429 If "delete" is omitted or true, "update" notifications are sent for rows deleted
430 from the table that match conditions or for rows modified in the table so that
431 their old version does match the conditions and new version does not.
432 .IP \(bu
433 If "modify" is omitted or true, "update" notifications are sent whenever a row in
434 the table that matches conditions in both old and new version is modified.
435 .RE
436 .
437 .IP
438 Both monitor and monitor_cond sessions can exist concurrently. However,
439 monitor and monitor_cond shares the same <json-value> parameter space; it
440 must be unique among all monitor and monitor_cond sessions.
441 .
442 .IP "4.1.13. Monitor_cond_change"
443 The "monitor_cond_change" request enables a client to change an existing
444 "monitor_cond" replication of the database by specifying a new condition
445 and columns for each replicated table. Currently changing the columns set
446 is not supported.
447 .
448 .IP
449 The request object has the following members:
450 .
451 .IP
452 .RS
453 .nf
454 "method": "monitor_cond_change"
455 "params": [<json-value>, <json-value>, <monitor-cond-update-requests>]
456 "id": <nonnull-json-value>
457 .fi
458 .RE
459 .
460 .IP
461 The <json-value> parameter should have a value of an existing conditional
462 monitoring session from this client. The second <json-value> in params array
463 is the requested value for this session. This value is valid only after
464 "monitor_cond_change" is committed. A user can use these values to distinguish
465 between update messages before conditions update and after. The
466 <monitor-cond-update-requests> object maps the name of the table to an array of
467 <monitor-cond-update-request>.
468 .
469 .IP
470 Each <monitor-cond-update-request> is an object with the following members:
471 .
472 .IP
473 .RS
474 .nf
475 "columns": [<column>*] optional
476 "where": [<condition>*] optional
477 .fi
478 .RE
479 .
480 .IP
481 The "columns" specify a new array of columns to be monitored
482 (Currently unsupported).
483 .
484 .IP
485 The "where" specify a new array of conditions to be applied to this monitoring
486 session.
487 .
488 .IP
489 The response object has the following members:
490 .
491 .IP
492 .RS
493 .nf
494 "result": null
495 "error": null
496 "id": same "id" as request
497 .fi
498 .RE
499 .IP
500 Subsequent <table-updates2> notifications are described in detail in Section
501 4.1.14 in the RFC. If insert contents are requested by original monitor_cond
502 request, <table-updates2> will contain rows that match the new condition and
503 do not match the old condition.
504 If deleted contents are requested by origin monitor request, <table-updates2>
505 will contain any matched rows by old condition and not matched by the new
506 condition.
507 .
508 .IP
509 Changes according to the new conditions are automatically sent to the client
510 using the "update2" monitor notification. An update, if any, as a result of a
511 condition change, will be sent to the client before the reply to the
512 "monitor_cond_change" request.
513 .
514 .IP "4.1.14. Update2 notification"
515 The "update2" notification is sent by the server to the client to report
516 changes in tables that are being monitored following a "monitor_cond" request
517 as described above. The notification has the following members:
518 .
519 .RS
520 .nf
521 "method": "update2"
522 "params": [<json-value>, <table-updates2>]
523 "id": null
524 .fi
525 .RE
526 .
527 .IP
528 The <json-value> in "params" is the same as the value passed as the
529 <json-value> in "params" for the corresponding "monitor" request.
530 <table-updates2> is an object that maps from a table name to a <table-update2>.
531 A <table-update2> is an object that maps from row's UUID to a <row-update2>
532 object. A <row-update2> is an object with one of the following members:
533 .
534 .RS
535 .IP "\(dqinitial\(dq: <row>"
536 present for "initial" updates
537 .IP "\(dqinsert\(dq: <row>"
538 present for "insert" updates
539 .IP "\(dqdelete\(dq: <row>"
540 present for "delete" updates
541 .IP "\(dqmodify\(dq: <row>"
542 present for "modify" updates
543 .RE
544 .
545 .IP
546 The format of <row> is described in Section 5.1.
547 .
548 .IP
549 <row> is always a null object for a "delete" update. In "initial" and
550 "insert" updates, <row> omits columns whose values equal the default
551 value of the column type.
552 .
553 .IP
554 For a "modify" update, <row> contains only the columns that are modified.
555 <row> stores the difference between the old and new value for those columns,
556 as described below.
557 .
558 .IP
559 For columns with single value, the difference is the value of the new
560 column.
561 .
562 .IP
563 The difference between two sets are all elements that only belong
564 to one of the sets.
565 .
566 .IP
567 The difference between two maps are all key-value pairs whose keys
568 appears in only one of the maps, plus the key-value pairs whose keys
569 appear in both maps but with different values. For the latter
570 elements, <row> includes the value from the new column.
571 .
572 .IP
573 Initial views of rows are not presented in update2 notifications,
574 but in the response object to the monitor_cond request. The formatting
575 of the <table-updates2> object, however, is the same in either case.
576 .
577 .IP "5.1. Notation"
578 For <condition>, RFC 7047 only allows the use of \fB!=\fR, \fB==\fR,
579 \fBincludes\fR, and \fBexcludes\fR operators with set types. Open
580 vSwitch 2.4 and later extend <condition> to allow the use of \fB<\fR,
581 \fB<=\fR, \fB>=\fR, and \fB>\fR operators with columns with type ``set
582 of 0 or 1 integer'' and ``set of 0 or 1 real''. These conditions
583 evaluate to false when the column is empty, and otherwise as described
584 in RFC 7047 for integer and real types.
585 .
586 .IP
587 <condition> is specified in Section 5.1 in the RFC with the following change:
588 A condition can be either a 3-element JSON array as described in the RFC or a
589 boolean value. In case of an empty array an implicit true boolean value will be
590 considered.
591 .
592 .SH "BUGS"
593 .
594 In Open vSwitch before version 2.4, when \fBovsdb\-server\fR sent
595 JSON-RPC error responses to some requests, it incorrectly formulated
596 them with the \fBresult\fR and \fBerror\fR swapped, so that the
597 response appeared to indicate success (with a nonsensical result)
598 rather than an error. The requests that suffered from this problem
599 were:
600 .
601 .IP \fBtransact\fR
602 .IQ \fBget_schema\fR
603 Only if the request names a nonexistent database.
604 .IP \fBmonitor\fR
605 .IQ \fBlock\fR
606 .IQ \fBunlock\fR
607 In all error cases.
608 .
609 .PP
610 Of these cases, the only error that a well-written application is
611 likely to encounter in practice is \fBmonitor\fR of tables or columns
612 that do not exist, in an situation where the application has been
613 upgraded but the old database schema is still temporarily in use. To
614 handle this situation gracefully, we recommend that clients should
615 treat a \fBmonitor\fR response with a \fBresult\fR that contains an
616 \fBerror\fR key-value pair as an error (assuming that the database
617 being monitored does not contain a table named \fBerror\fR).
618 .
619 .SH "SEE ALSO"
620 .
621 .BR ovsdb\-tool (1).