Exemplo n.º 1
0
def refresh_peer_connections(task_context):
    db = task_context.db
    ipfs_client = task_context.ipfs_client
    redis = task_context.redis
    interval = int(
        task_context.shared_config["discprov"]["peer_refresh_interval"])
    with db.scoped_session() as session:
        db_cnode_endpts = (session.query(User.creator_node_endpoint).filter(
            User.creator_node_endpoint != None,
            User.is_current == True).distinct())

        cnode_endpoints = {}
        # Generate dictionary of unique creator node endpoints
        for entry in db_cnode_endpts:
            for cnode_user_set in entry:
                cnode_entries = cnode_user_set.split(',')
                for cnode_url in cnode_entries:
                    if cnode_url == "''":
                        continue
                    cnode_endpoints[cnode_url] = True

        # Add user metadata URL to peer connection list
        user_node_url = task_context.shared_config["discprov"][
            "user_metadata_service_url"]
        cnode_endpoints[user_node_url] = True

        # Update creator node list
        ipfs_client.update_cnode_urls(list(cnode_endpoints.keys()))

        # Query ipfs information for each cnode endpoint
        multiaddr_info = {}
        for cnode_url in cnode_endpoints:
            stored_in_redis = redis.get(cnode_url)
            if stored_in_redis is not None:
                continue
            if cnode_url == "''":
                continue

            try:
                logger.warning('index.py | Retrieving connection info for %s',
                               cnode_url)
                multiaddr_info[cnode_url] = get_ipfs_info_from_cnode_endpoint(
                    cnode_url, None)
            except Exception as e:  # pylint: disable=broad-except
                # Handle error in retrieval by not peering this node
                logger.warning('index.py | Error retrieving info for %s, %s',
                               cnode_url, str(e))
                multiaddr_info[cnode_url] = None

        for key in multiaddr_info:
            if multiaddr_info[key] is not None:
                try:
                    # Peer nodes
                    logger.warning('index.py | Connecting to %s',
                                   multiaddr_info[key])
                    ipfs_client.connect_peer(multiaddr_info[key])
                    redis.set(key, multiaddr_info[key], ex=interval)
                except Exception as e:  #pylint: disable=broad-except
                    logger.warning('index.py | Error connection to %s, %s, %s',
                                   multiaddr_info[key], cnode_url, str(e))
Exemplo n.º 2
0
def connect_peer(endpoint, ipfs_client):
    logger.info(f"index_network_peers.py | Peering with {endpoint}")
    ipfs_swarm_address = get_ipfs_info_from_cnode_endpoint(endpoint, None)
    ipfs_client.connect_peer(ipfs_swarm_address)
    logger.info(
        f"index_network_peers.py | Successfully peered with {endpoint}")