Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
commands = commands[3:]
schema_helper.register_all()
idl = ovs.db.idl.Idl(remote, schema_helper)
step = 0
seqno = 0
commands = list(commands)
for command in commands:
if command.startswith("+"):
# The previous transaction didn't change anything.
command = command[1:]
else:
# Wait for update.
while idl.change_seqno == seqno and not idl.run():
poller = ovs.poller.Poller()
idl.wait(poller)
poller.block()
step += 1
seqno = idl.change_seqno
if command == "reconnect":
print("%03d: reconnect" % step)
sys.stdout.flush()
step += 1
idl.force_reconnect()
elif command == "remote":
print("%03d: %s" % (step, idl.session_name()))
sys.stdout.flush()
step += 1
elif command == "remotestop":
error, server = ovs.unixctl.server.UnixctlServer.create(args.unixctl)
if error:
ovs.util.ovs_fatal(error, "could not create unixctl server at %s"
% args.unixctl, vlog)
ovs.unixctl.command_register("exit", "", 0, 0, unixctl_exit, "aux_exit")
ovs.unixctl.command_register("echo", "[arg ...]", 1, 2, unixctl_echo,
"aux_echo")
ovs.unixctl.command_register("log", "[arg ...]", 1, 2, unixctl_log, None)
ovs.unixctl.command_register("echo_error", "[arg ...]", 1, 2,
unixctl_echo_error, "aux_echo_error")
ovs.unixctl.command_register("block", "", 0, 0, unixctl_block, None)
ovs.daemon.daemonize_complete()
vlog.info("Entering run loop.")
poller = ovs.poller.Poller()
while not exiting:
server.run()
server.wait(poller)
if exiting:
poller.immediate_wake()
poller.block()
server.close()
def recv_block(self):
while True:
error, msg = self.recv()
if error != errno.EAGAIN:
return error, msg
self.run()
poller = ovs.poller.Poller()
self.wait(poller)
self.recv_wait(poller)
poller.block()
def _commit_transaction(self):
if self._transaction:
status = self._transaction.commit()
timeout_end = time.time() + TIMEOUT
while status == Transaction.INCOMPLETE:
self._idl.run()
poller = ovs.poller.Poller()
self._idl.wait(poller)
self._transaction.wait(poller)
poller.timer_wait(TIMEOUT * 1000)
poller.block()
if time.time() > timeout_end:
raise NmstateTimeoutError(
f"Plugin {self.name} timeout({TIMEOUT} "
"seconds) when commit OVS database transaction"
)
status = self._transaction.commit()
if status == Transaction.SUCCESS:
self.refresh_content()
transaction_error = self._transaction.get_error()
self._transaction = None
def transact_block(request, connection):
"""Emulate jsonrpc.Connection.transact_block without blocking eventlet.
"""
error = connection.send(request)
reply = None
if error:
return error, reply
ovs_poller = poller.Poller()
while not error:
ovs_poller.immediate_wake()
error, reply = connection.recv()
if error != errno.EAGAIN:
break
if (reply and
reply.id == request.id and
reply.type in (jsonrpc.Message.T_REPLY,
jsonrpc.Message.T_ERROR)):
break
connection.run()
connection.wait(ovs_poller)
connection.recv_wait(ovs_poller)
deadline = None
if timeout is not None and timeout >= 0:
deadline = ovs.timeval.msec() + timeout
while True:
error = stream.connect()
if sys.platform == 'win32' and error == errno.WSAEWOULDBLOCK:
# WSAEWOULDBLOCK would be the equivalent on Windows
# for EAGAIN on Unix.
error = errno.EAGAIN
if error != errno.EAGAIN:
break
if deadline is not None and ovs.timeval.msec() > deadline:
error = errno.ETIMEDOUT
break
stream.run()
poller = ovs.poller.Poller()
stream.run_wait(poller)
stream.connect_wait(poller)
if deadline is not None:
poller.timer_wait_until(deadline)
poller.block()
if stream.socket is not None:
assert error != errno.EINPROGRESS
if error and stream:
stream.close()
stream = None
return error, stream
def _idl_block(idl_):
poller = ovs.poller.Poller()
idl_.wait(poller)
poller.block()
def get_opsidl():
extschema = restparser.parseSchema(settings.get('ext_schema'))
ovsschema = settings.get('ovs_schema')
ovsremote = settings.get('ovs_remote')
opsidl = ops.dc.register(extschema, ovsschema, ovsremote)
init_seqno = opsidl.change_seqno
while True:
opsidl.run()
if init_seqno != opsidl.change_seqno:
break
poller = ovs.poller.Poller()
opsidl.wait(poller)
poller.block()
return (extschema, opsidl)
def send_block(self, msg):
error = self.send(msg)
if error:
return error
while True:
self.run()
if not self.get_backlog() or self.get_status():
return self.status
poller = ovs.poller.Poller()
self.wait(poller)
poller.block()
def commit_block(self):
"""Attempts to commit this transaction, blocking until the commit
either succeeds or fails. Returns the final commit status, which may
be any Transaction.* value other than Transaction.INCOMPLETE.
This function calls Idl.run() on this transaction'ss IDL, so it may
cause Idl.change_seqno to change."""
while True:
status = self.commit()
if status != Transaction.INCOMPLETE:
return status
self.idl.run()
poller = ovs.poller.Poller()
self.idl.wait(poller)
self.wait(poller)
poller.block()