Skip to content
Snippets Groups Projects

Remove truncate and add on conflict clause instead

Merged Jonah Husson requested to merge hotfix/remove-truncate into master
All threads resolved!
Compare and Show latest version
1 file
+ 32
17
Compare changes
  • Side-by-side
  • Inline
+ 32
17
@@ -71,7 +71,7 @@ def main():
auth_nids = set()
current_bins = []
current_chain_conf = {}
init_auth = get_authorizer_nodes()
init_auth = get_authorizer_nodes(auth_conn)
for i in init_auth:
auth_nids.add(i[0])
while True:
@@ -103,9 +103,9 @@ def main():
new_auth_set = set(new_auth_nids)
to_add = new_auth_set.difference(auth_nids)
to_delete = auth_nids.difference(new_auth_set)
set_authorizer_nodes(auth_conn, to_add, to_delete)
# TODO: remove auth for to_delete
auth_nids = new_auth_nids
to_revoke = set_authorizer_nodes(auth_conn, to_add, to_delete)
auth_nids = new_auth_set
revoke_auth(to_revoke)
# Pass a copy because the dict will be mutated
set_active_nodes(conn, copy.deepcopy(new_dict))
@@ -224,13 +224,20 @@ def get_substrate_provider():
#######################
def revoke_auth(to_revoke):
"""
revoke_auth accepts a list of node IP addresses to revoke auth from
:param to_revoke: list of node IP addresses
"""
log.info(f"Revoking access to {len(to_revoke)} nodes...")
for nid in to_revoke:
cmd = f"sudo nft -a list chain inet filter input | grep '{nid}' | awk -F'handle ' '{{print $2}}' | xargs -Ixxx sudo nft delete rule inet filter input handle xxx"
log.debug(cmd)
p = subprocess.Popen(cmd.split())
output, error = p.communicate()
log.debug(output)
if output:
log.debug(output)
if error:
log.error(error)
raise IOError(error)
def id_to_reg_code(cmix_id):
@@ -425,7 +432,7 @@ def poll_active_nodes(substrate):
def update_config_options(conn, chain_conf):
"""
update config based on chain data
:param conn:
:param ChainConf chain_conf:
:return:
@@ -669,7 +676,11 @@ def get_max_app_id(conn):
def get_authorizer_nodes(conn):
""""""
"""
get list of nodes currently in the authorizer nodes table
:param conn: authorizer database connection
:return: list of rows containing id, ip_address, last_updated
"""
cur = conn.cursor()
# Get Node information from nodes table
@@ -691,21 +702,24 @@ def set_authorizer_nodes(conn, to_add, to_delete):
:param conn: database connection object
:param to_add: list of node IDs to add
:param to_delete: list of node IDs to delete
:return:
:return list[ip_address]: list of IPs to revoke auth
"""
cur = conn.cursor()
# Convert Node information into authorizer insert command
node_list = get_authorizer_nodes(conn)
to_revoke = []
delete_command = "DELETE FROM nodes WHERE id = ?;"
for n in to_delete:
try:
cur.execute(delete_command, (n,))
log.debug(cur.query)
except Exception as e:
log.error(f"Failed to remove node from authorizer DB: {cur.query}")
raise e
delete_command = "DELETE FROM nodes WHERE id = %s;"
for row in node_list:
if row[0] in to_delete:
try:
cur.execute(delete_command, (row[0],))
log.debug(cur.query)
except Exception as e:
log.error(f"Failed to remove node from authorizer DB: {cur.query}")
raise e
to_revoke.append(row[1])
insert_list = [(i, None, None) for i in to_add]
# Insert Node information into authorizer db
@@ -721,6 +735,7 @@ def set_authorizer_nodes(conn, to_add, to_delete):
raise e
finally:
cur.close()
return to_revoke
def check_table(conn, table_name):
Loading