Properly handle takeover state in VXNetworks
Most of these actions/conditionals were looking for primary state, but were failing during node takeover. Update the conditionals to look for both router states instead. Also add a wait to lock flushing until a takeover is completed.
This commit is contained in:
parent
b8852e116e
commit
1e4350ca6f
|
@ -74,6 +74,9 @@ def run_command(zk_conn, logger, this_node, data):
|
||||||
# Flushing VM RBD locks
|
# Flushing VM RBD locks
|
||||||
if command == 'flush_locks':
|
if command == 'flush_locks':
|
||||||
dom_uuid = args
|
dom_uuid = args
|
||||||
|
# If this node is taking over primary state, wait until it's done
|
||||||
|
while this_node.router_state == 'takeover':
|
||||||
|
time.sleep(1)
|
||||||
if this_node.router_state == 'primary':
|
if this_node.router_state == 'primary':
|
||||||
# Lock the command queue
|
# Lock the command queue
|
||||||
zk_lock = zkhandler.writelock(zk_conn, '/cmd/domains')
|
zk_lock = zkhandler.writelock(zk_conn, '/cmd/domains')
|
||||||
|
|
|
@ -235,11 +235,11 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
|
|
||||||
if data and self.ip6_gateway != data.decode('ascii'):
|
if data and self.ip6_gateway != data.decode('ascii'):
|
||||||
orig_gateway = self.ip6_gateway
|
orig_gateway = self.ip6_gateway
|
||||||
if self.this_node.router_state == 'primary':
|
if self.this_node.router_state in ['primary', 'takeover']:
|
||||||
if orig_gateway:
|
if orig_gateway:
|
||||||
self.removeGateway6Address()
|
self.removeGateway6Address()
|
||||||
self.ip6_gateway = data.decode('ascii')
|
self.ip6_gateway = data.decode('ascii')
|
||||||
if self.this_node.router_state == 'primary':
|
if self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.createGateway6Address()
|
self.createGateway6Address()
|
||||||
if self.dhcp_server_daemon:
|
if self.dhcp_server_daemon:
|
||||||
self.stopDHCPServer()
|
self.stopDHCPServer()
|
||||||
|
@ -257,9 +257,9 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
|
|
||||||
if data and self.dhcp6_flag != ( data.decode('ascii') == 'True' ):
|
if data and self.dhcp6_flag != ( data.decode('ascii') == 'True' ):
|
||||||
self.dhcp6_flag = ( data.decode('ascii') == 'True' )
|
self.dhcp6_flag = ( data.decode('ascii') == 'True' )
|
||||||
if self.dhcp6_flag and not self.dhcp_server_daemon and self.this_node.router_state == 'primary':
|
if self.dhcp6_flag and not self.dhcp_server_daemon and self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.startDHCPServer()
|
self.startDHCPServer()
|
||||||
elif self.dhcp_server_daemon and not self.dhcp4_flag and self.this_node.router_state == 'primary':
|
elif self.dhcp_server_daemon and not self.dhcp4_flag and self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.stopDHCPServer()
|
self.stopDHCPServer()
|
||||||
|
|
||||||
@self.zk_conn.DataWatch('/networks/{}/ip4_network'.format(self.vni))
|
@self.zk_conn.DataWatch('/networks/{}/ip4_network'.format(self.vni))
|
||||||
|
@ -286,11 +286,11 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
|
|
||||||
if data and self.ip4_gateway != data.decode('ascii'):
|
if data and self.ip4_gateway != data.decode('ascii'):
|
||||||
orig_gateway = self.ip4_gateway
|
orig_gateway = self.ip4_gateway
|
||||||
if self.this_node.router_state == 'primary':
|
if self.this_node.router_state in ['primary', 'takeover']:
|
||||||
if orig_gateway:
|
if orig_gateway:
|
||||||
self.removeGateway4Address()
|
self.removeGateway4Address()
|
||||||
self.ip4_gateway = data.decode('ascii')
|
self.ip4_gateway = data.decode('ascii')
|
||||||
if self.this_node.router_state == 'primary':
|
if self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.createGateway4Address()
|
self.createGateway4Address()
|
||||||
if self.dhcp_server_daemon:
|
if self.dhcp_server_daemon:
|
||||||
self.stopDHCPServer()
|
self.stopDHCPServer()
|
||||||
|
@ -308,9 +308,9 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
|
|
||||||
if data and self.dhcp4_flag != ( data.decode('ascii') == 'True' ):
|
if data and self.dhcp4_flag != ( data.decode('ascii') == 'True' ):
|
||||||
self.dhcp4_flag = ( data.decode('ascii') == 'True' )
|
self.dhcp4_flag = ( data.decode('ascii') == 'True' )
|
||||||
if self.dhcp4_flag and not self.dhcp_server_daemon and self.this_node.router_state == 'primary':
|
if self.dhcp4_flag and not self.dhcp_server_daemon and self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.startDHCPServer()
|
self.startDHCPServer()
|
||||||
elif self.dhcp_server_daemon and not self.dhcp6_flag and self.this_node.router_state == 'primary':
|
elif self.dhcp_server_daemon and not self.dhcp6_flag and self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.stopDHCPServer()
|
self.stopDHCPServer()
|
||||||
|
|
||||||
@self.zk_conn.DataWatch('/networks/{}/dhcp4_start'.format(self.vni))
|
@self.zk_conn.DataWatch('/networks/{}/dhcp4_start'.format(self.vni))
|
||||||
|
@ -349,7 +349,7 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
if self.dhcp_reservations != new_reservations:
|
if self.dhcp_reservations != new_reservations:
|
||||||
old_reservations = self.dhcp_reservations
|
old_reservations = self.dhcp_reservations
|
||||||
self.dhcp_reservations = new_reservations
|
self.dhcp_reservations = new_reservations
|
||||||
if self.this_node.router_state == 'primary':
|
if self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.updateDHCPReservations(old_reservations, new_reservations)
|
self.updateDHCPReservations(old_reservations, new_reservations)
|
||||||
if self.dhcp_server_daemon:
|
if self.dhcp_server_daemon:
|
||||||
self.stopDHCPServer()
|
self.stopDHCPServer()
|
||||||
|
@ -601,7 +601,7 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
self.createGateway4Address()
|
self.createGateway4Address()
|
||||||
|
|
||||||
def createGateway6Address(self):
|
def createGateway6Address(self):
|
||||||
if self.this_node.router_state == 'primary':
|
if self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.logger.out(
|
self.logger.out(
|
||||||
'Creating gateway {}/{} on interface {}'.format(
|
'Creating gateway {}/{} on interface {}'.format(
|
||||||
self.ip6_gateway,
|
self.ip6_gateway,
|
||||||
|
@ -614,7 +614,7 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
common.createIPAddress(self.ip6_gateway, self.ip6_cidrnetmask, self.bridge_nic)
|
common.createIPAddress(self.ip6_gateway, self.ip6_cidrnetmask, self.bridge_nic)
|
||||||
|
|
||||||
def createGateway4Address(self):
|
def createGateway4Address(self):
|
||||||
if self.this_node.router_state == 'primary':
|
if self.this_node.router_state in ['primary', 'takeover']:
|
||||||
self.logger.out(
|
self.logger.out(
|
||||||
'Creating gateway {}/{} on interface {}'.format(
|
'Creating gateway {}/{} on interface {}'.format(
|
||||||
self.ip4_gateway,
|
self.ip4_gateway,
|
||||||
|
@ -627,7 +627,7 @@ add rule inet filter forward ip6 saddr {netaddr6} counter jump {vxlannic}-out
|
||||||
common.createIPAddress(self.ip4_gateway, self.ip4_cidrnetmask, self.bridge_nic)
|
common.createIPAddress(self.ip4_gateway, self.ip4_cidrnetmask, self.bridge_nic)
|
||||||
|
|
||||||
def startDHCPServer(self):
|
def startDHCPServer(self):
|
||||||
if self.this_node.router_state == 'primary' and self.nettype == 'managed':
|
if self.this_node.router_state in ['primary', 'takeover'] and self.nettype == 'managed':
|
||||||
self.logger.out(
|
self.logger.out(
|
||||||
'Starting dnsmasq DHCP server on interface {}'.format(
|
'Starting dnsmasq DHCP server on interface {}'.format(
|
||||||
self.bridge_nic
|
self.bridge_nic
|
||||||
|
|
Loading…
Reference in New Issue