summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMark Gray <mark.d.gray@redhat.com>2020-10-20 11:07:07 -0400
committerIlya Maximets <i.maximets@ovn.org>2020-11-16 17:47:11 +0100
commit12eb2f67df055faab7603b987c9f3c044cc199a8 (patch)
tree6887dde8134b374d347266d9f123cca1623686f7 /tests
parent6fcef9088b6657f7a68cdded172f5bb5b053d848 (diff)
downloadopenvswitch-12eb2f67df055faab7603b987c9f3c044cc199a8.tar.gz
ovsdb-idl: Fix *_is_new() IDL functions.
Currently all functions of the type *_is_new() always return 'false'. This patch resolves this issue by using the 'OVSDB_IDL_CHANGE_INSERT' 'change_seqno' instead of the 'OVSDB_IDL_CHANGE_MODIFY' 'change_seqno' to determine if a row is new and by resetting the 'OVSDB_IDL_CHANGE_INSERT' 'change_seqno' on clear. Further to this, the code is also updated to match the following behaviour: When a row is inserted, the 'OVSDB_IDL_CHANGE_INSERT' 'change_seqno' is updated to match the new database change_seqno. The 'OVSDB_IDL_CHANGE_MODIFY' 'change_seqno' is not set for inserted rows (only for updated rows). At the end of a run, ovsdb_idl_db_track_clear() should be called to clear all tracking information, this includes resetting all row 'change_seqno' to zero. This will ensure that subsequent runs will not see a previously 'new' row. add_tracked_change_for_references() is updated to only track rows that reference the current row. Also, update unit tests in order to test the *_is_new(), *_is_delete() functions. Suggested-by: Dumitru Ceara <dceara@redhat.com> Reported-at: https://bugzilla.redhat.com/1883562 Fixes: ca545a787ac0 ("ovsdb-idl.c: Increase seqno for change-tracking of table references.") Signed-off-by: Mark Gray <mark.d.gray@redhat.com> Acked-by: Han Zhou <hzhou@ovn.org> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/ovsdb-idl.at5
-rw-r--r--tests/test-ovsdb.c32
2 files changed, 28 insertions, 9 deletions
diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at
index a6d16176c..cacc82d82 100644
--- a/tests/ovsdb-idl.at
+++ b/tests/ovsdb-idl.at
@@ -1162,6 +1162,7 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated],
"where": [],
"row": {"b": true}}]']],
[[000: i=1 r=2 b=true s=mystring u=<0> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<1> <2>] uuid=<3>
+000: inserted row: uuid=<3>
000: updated columns: b ba i ia r ra s sa u ua
001: {"error":null,"result":[{"count":2}]}
002: i=0 r=0 b=true s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<5>
@@ -1224,6 +1225,7 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially empty, various ops],
[[000: empty
001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]}
002: i=1 r=2 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<0>
+002: inserted row: uuid=<0>
002: updated columns: b ba i ia r ra s sa u ua
003: {"error":null,"result":[{"count":2}]}
004: i=0 r=0 b=true s= u=<5> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
@@ -1235,6 +1237,7 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially empty, various ops],
006: updated columns: r
007: {"error":null,"result":[{"uuid":["uuid","<6>"]}]}
008: i=-1 r=125 b=false s= u=<5> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
+008: inserted row: uuid=<6>
008: updated columns: ba i ia r ra
009: {"error":null,"result":[{"count":2}]}
010: i=-1 r=125 b=false s=newstring u=<5> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
@@ -1242,7 +1245,7 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially empty, various ops],
010: updated columns: s
010: updated columns: s
011: {"error":null,"result":[{"count":1}]}
-012: ##deleted## uuid=<1>
+012: deleted row: uuid=<1>
013: reconnect
014: i=-1 r=125 b=false s=newstring u=<5> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
014: i=1 r=123.5 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<0>
diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c
index b1a4be36b..6dd476f75 100644
--- a/tests/test-ovsdb.c
+++ b/tests/test-ovsdb.c
@@ -2030,7 +2030,7 @@ print_idl(struct ovsdb_idl *idl, int step)
}
static void
-print_idl_track(struct ovsdb_idl *idl, int step, unsigned int seqno)
+print_idl_track(struct ovsdb_idl *idl, int step)
{
const struct idltest_simple *s;
const struct idltest_link1 *l1;
@@ -2038,26 +2038,42 @@ print_idl_track(struct ovsdb_idl *idl, int step, unsigned int seqno)
int n = 0;
IDLTEST_SIMPLE_FOR_EACH_TRACKED (s, idl) {
- if (idltest_simple_row_get_seqno(s, OVSDB_IDL_CHANGE_DELETE) >= seqno) {
- printf("%03d: ##deleted## uuid="UUID_FMT"\n", step, UUID_ARGS(&s->header_.uuid));
+ if (idltest_simple_is_deleted(s)) {
+ printf("%03d: deleted row: uuid="UUID_FMT"\n", step,
+ UUID_ARGS(&s->header_.uuid));
} else {
print_idl_row_simple(s, step);
+ if (idltest_simple_is_new(s)) {
+ printf("%03d: inserted row: uuid="UUID_FMT"\n", step,
+ UUID_ARGS(&s->header_.uuid));
+ }
}
n++;
}
IDLTEST_LINK1_FOR_EACH_TRACKED (l1, idl) {
- if (idltest_simple_row_get_seqno(s, OVSDB_IDL_CHANGE_DELETE) >= seqno) {
- printf("%03d: ##deleted## uuid="UUID_FMT"\n", step, UUID_ARGS(&s->header_.uuid));
+ if (idltest_link1_is_deleted(l1)) {
+ printf("%03d: deleted row: uuid="UUID_FMT"\n", step,
+ UUID_ARGS(&l1->header_.uuid));
} else {
print_idl_row_link1(l1, step);
+ if (idltest_link1_is_new(l1)) {
+ printf("%03d: inserted row: uuid="UUID_FMT"\n", step,
+ UUID_ARGS(&l1->header_.uuid));
+ }
}
n++;
}
IDLTEST_LINK2_FOR_EACH_TRACKED (l2, idl) {
- if (idltest_simple_row_get_seqno(s, OVSDB_IDL_CHANGE_DELETE) >= seqno) {
- printf("%03d: ##deleted## uuid="UUID_FMT"\n", step, UUID_ARGS(&s->header_.uuid));
+ if (idltest_link2_is_deleted(l2)) {
+ printf("%03d: deleted row: uuid="UUID_FMT"\n", step,
+ UUID_ARGS(&l2->header_.uuid));
} else {
print_idl_row_link2(l2, step);
+ if (idltest_link2_is_new(l2)) {
+ printf("%03d: inserted row: uuid="UUID_FMT"\n", step,
+ UUID_ARGS(&l2->header_.uuid));
+ }
+
}
n++;
}
@@ -2465,7 +2481,7 @@ do_idl(struct ovs_cmdl_context *ctx)
/* Print update. */
if (track) {
- print_idl_track(idl, step++, ovsdb_idl_get_seqno(idl));
+ print_idl_track(idl, step++);
ovsdb_idl_track_clear(idl);
} else {
print_idl(idl, step++);