I like this one better. I am surprised that test-ovsdb has the only invocations of idl.run(), but if that is true, LGTM.
On Tue, Aug 6, 2013 at 3:14 PM, Aaron Rosen <aro...@nicira.com> wrote: > This patch changes what is being returned from Idl.run() to a tuple > (changed, changes) so one can determine what changes have occurred to > the database without having to read the entire table. > > Signed-off-by: Aaron Rosen <aro...@nicira.com> > --- > python/ovs/db/idl.py | 16 ++++++++++------ > tests/test-ovsdb.py | 4 ++-- > 2 files changed, 12 insertions(+), 8 deletions(-) > > diff --git a/python/ovs/db/idl.py b/python/ovs/db/idl.py > index 55fbcba..1affd54 100644 > --- a/python/ovs/db/idl.py > +++ b/python/ovs/db/idl.py > @@ -134,11 +134,13 @@ class Idl: > > def run(self): > """Processes a batch of messages from the database server. > Returns > - True if the database as seen through the IDL changed, False if it > did > - not change. The initial fetch of the entire contents of the > remote > - database is considered to be one kind of change. If the IDL has > been > - configured to acquire a database lock (with Idl.set_lock()), then > - successfully acquiring the lock is also considered to be a change. > + a tuple (changed, changes) where changed is True if the database > as > + seen through the IDL changed, False if it did not change. The > changes > + variable contain all of the jsonrpc messages that have been > processed. > + The initial fetch of the entire contents of the remote database is > + considered to be one kind of change. If the IDL has been > configured > + to acquire a database lock (with Idl.set_lock()), then > successfully > + acquiring the lock is also considered to be a change. > > This function can return occasional false positives, that is, > report > that the database changed even though it didn't. This happens if > the > @@ -153,6 +155,7 @@ class Idl: > assert not self.txn > initial_change_seqno = self.change_seqno > self._session.run() > + changes = [] > i = 0 > while i < 50: > i += 1 > @@ -176,6 +179,7 @@ class Idl: > and len(msg.params) == 2 > and msg.params[0] == None): > # Database contents changed. > + changes.append(msg) > self.__parse_update(msg.params[1]) > elif (msg.type == ovs.jsonrpc.Message.T_REPLY > and self._monitor_request_id is not None > @@ -218,7 +222,7 @@ class Idl: > % (self._session.get_name(), > > ovs.jsonrpc.Message.type_to_string(msg.type))) > > - return initial_change_seqno != self.change_seqno > + return (initial_change_seqno != self.change_seqno, changes) > > def wait(self, poller): > """Arranges for poller.block() to wake up when self.run() has > something > diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py > index 392ed4b..afc8287 100644 > --- a/tests/test-ovsdb.py > +++ b/tests/test-ovsdb.py > @@ -366,7 +366,7 @@ def do_idl(schema_file, remote, *commands): > command = command[1:] > else: > # Wait for update. > - while idl.change_seqno == seqno and not idl.run(): > + while idl.change_seqno == seqno and not idl.run()[0]: > rpc.run() > > poller = ovs.poller.Poller() > @@ -415,7 +415,7 @@ def do_idl(schema_file, remote, *commands): > > if rpc: > rpc.close() > - while idl.change_seqno == seqno and not idl.run(): > + while idl.change_seqno == seqno and not idl.run()[0]: > poller = ovs.poller.Poller() > idl.wait(poller) > poller.block() > -- > 1.7.9.5 > > > > On Tue, Aug 6, 2013 at 2:45 PM, Aaron Rosen <aro...@nicira.com> wrote: > >> This patch changes what is being returned from Idl.run() to a tuple >> (changed, changes) so one can determine what changes have occurred to >> the database without having to read the entire table. >> >> Signed-off-by: Aaron Rosen <aro...@nicira.com> >> --- >> python/ovs/db/idl.py | 16 ++++++++++------ >> tests/test-ovsdb.py | 4 ++-- >> 2 files changed, 12 insertions(+), 8 deletions(-) >> >> diff --git a/python/ovs/db/idl.py b/python/ovs/db/idl.py >> index 55fbcba..095cf4f 100644 >> --- a/python/ovs/db/idl.py >> +++ b/python/ovs/db/idl.py >> @@ -134,11 +134,13 @@ class Idl: >> >> def run(self): >> """Processes a batch of messages from the database server. >> Returns >> - True if the database as seen through the IDL changed, False if >> it did >> - not change. The initial fetch of the entire contents of the >> remote >> - database is considered to be one kind of change. If the IDL has >> been >> - configured to acquire a database lock (with Idl.set_lock()), then >> - successfully acquiring the lock is also considered to be a >> change. >> + a tuple (changed, changes) where changed is True if the database >> as >> + seen through the IDL changed, False if it did not change. The >> changes >> + variable contain all of the jsonrpc messages that have been >> processed. >> + The initial fetch of the entire contents of the remote database >> is >> + considered to be one kind of change. If the IDL has been >> configured >> + to acquire a database lock (with Idl.set_lock()), then >> successfully >> + acquiring the lock is also considered to be a change. >> >> This function can return occasional false positives, that is, >> report >> that the database changed even though it didn't. This happens >> if the >> @@ -153,6 +155,7 @@ class Idl: >> assert not self.txn >> initial_change_seqno = self.change_seqno >> self._session.run() >> + changes = [] >> i = 0 >> while i < 50: >> i += 1 >> @@ -171,6 +174,7 @@ class Idl: >> msg = self._session.recv() >> if msg is None: >> break >> + changes.append(msg) >> if (msg.type == ovs.jsonrpc.Message.T_NOTIFY >> and msg.method == "update" >> and len(msg.params) == 2 >> @@ -218,7 +222,7 @@ class Idl: >> % (self._session.get_name(), >> >> ovs.jsonrpc.Message.type_to_string(msg.type))) >> >> - return initial_change_seqno != self.change_seqno >> + return (initial_change_seqno != self.change_seqno, changes) >> >> def wait(self, poller): >> """Arranges for poller.block() to wake up when self.run() has >> something >> diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py >> index 392ed4b..afc8287 100644 >> --- a/tests/test-ovsdb.py >> +++ b/tests/test-ovsdb.py >> @@ -366,7 +366,7 @@ def do_idl(schema_file, remote, *commands): >> command = command[1:] >> else: >> # Wait for update. >> - while idl.change_seqno == seqno and not idl.run(): >> + while idl.change_seqno == seqno and not idl.run()[0]: >> rpc.run() >> >> poller = ovs.poller.Poller() >> @@ -415,7 +415,7 @@ def do_idl(schema_file, remote, *commands): >> >> if rpc: >> rpc.close() >> - while idl.change_seqno == seqno and not idl.run(): >> + while idl.change_seqno == seqno and not idl.run()[0]: >> poller = ovs.poller.Poller() >> idl.wait(poller) >> poller.block() >> -- >> 1.7.9.5 >> >> > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > >
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev