message: [qa] Handle disconnect_node race
  Several tests call disconnect_nodes() on each node-pair in rapid
  succession, resulting in a race condition if a node disconnects a peer
  in-between the calculation of the nodeid's to disconnect and the
  invocation of the disconnectnode rpc call.  Handle this.
  GitHub-Pull:
  Rebased-From:
diff: @@ -335,7 +335,14 @@ def set_node_times(nodes, t):
  def disconnect_nodes(from_connection, node_num):
  for peer_id in [peer['id'] for peer in from_connection.getpeerinfo() if "testnode%d" % node_num in peer['subver']]:
  + try:
  from_connection.disconnectnode(nodeid=peer_id)
  + except JSONRPCException as e:
  + # If this node is disconnected between calculating the peer id
  + # and issuing the disconnect, don't worry about it.
  + # This avoids a race condition if we're mass-disconnecting peers.
  + if e.error['code'] != -29: # RPC_CLIENT_NODE_NOT_CONNECTED
  + raise
  # wait to disconnect
  wait_until(lambda: [peer['id'] for peer in from_connection.getpeerinfo() if "testnode%d" % node_num in peer['subver']] == [], timeout=5)
  