Ensure loading a configuration that does not exist returns an error

Waiting for a release of figment containing a fix for https://github.com/SergioBenitez/Figment/issues/110.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 90.73%. Comparing base (e277b19) to head (e0d5c30).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #130      +/-   ##
==========================================
- Coverage   91.01%   90.73%   -0.29%
==========================================
  Files           9        9
  Lines         668      669       +1
==========================================
- Hits          608      607       -1
- Misses         60       62       +2

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

🚨 Try these New Features:

Flaky Tests Detection - Detect and resolve failed and flaky tests

Can be merged since Figment is no longer a dependency.


Robonomics IO read/write pubsub doesn't work as expected

Problem
I tried to use robonomics io pubsub module but didn't get any results
Test
In one terminal window I launched:
% ./robonomics io read pubsub airalab.lighthouse.5.robonomics.eth.test
2020-11-02 09:33:14 Generated random peer id: 12D3KooWS71KDZivyEJVRHbeSkupMhhX1rQpU8yAksPz33HkCpr3
2020-11-02 09:33:14 Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-02 09:33:14 Subscribed to topic: airalab.lighthouse.5.robonomics.eth.test
2020-11-02 09:34:14 Published message: MessageId("9058170457282896363")
2020-11-02 09:35:14 Published message: MessageId("6532452495639115700")
2020-11-02 09:36:14 Published message: MessageId("8100266999524895761")
2020-11-02 09:37:14 Published message: MessageId("284839671810760394")
2020-11-02 09:38:14 Published message: MessageId("1733169447693511607")

In another window:
% echo "hh" | ./robonomics io write pubsub airalab.lighthouse.5.robonomics.eth.test
2020-11-02 09:33:37 Generated random peer id: 12D3KooWBGCVXbodmqww2ihxQ8xEF9NKq1zUA5wC3oAdWQ7EdzZM
2020-11-02 09:33:37 Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-02 09:33:37 Published message: MessageId("10812317372823839594")

Expected results
I thought I should see the message from the second command in the first window. I didn't happen. Instead after a bit of time I saw different MessageId's that don't correlate with mine
Robonomics Version
% ./robonomics --version
robonomics 0.21.0-aa982ff-x86_64-linux-gnu

Could you tell me I am doing something wrong or it's a problem with the module? Thank you

Please use debug logging to get more information. Also your nodes probably didn’t connected to receive messages from each other: use special command key to connect nodes peer to peer.

I'm trying to follow your advise.
Log level
I turned on debug level with key --log=debug
I write next command in first window and get this:
$ ./robonomics io --log=debug read pubsub airalab.lighthouse.5.robonomics.eth
2020-11-25 17:13:37.741 main INFO robonomics-identity  Generated random peer id: 12D3KooWK6M9eeGtyYan7YCG4cRN75GQFUavoLdoV6UejJL9yjXg
2020-11-25 17:13:37.743 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-25 17:13:37.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:13:37.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:13:37.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:37.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-25 17:13:37.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:13:37.744 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:13:37.744 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-25 17:13:37.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: airalab.lighthouse.5.robonomics.eth
2020-11-25 17:13:37.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-25 17:13:37.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:37.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-25 17:13:37.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-25 17:13:37.744 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: airalab.lighthouse.5.robonomics.eth
2020-11-25 17:13:37.744 async-std/runtime DEBUG robonomics-pubsub  Subscribed to airalab.lighthouse.5.robonomics.eth
2020-11-25 17:13:37.744 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_tcp  Listening on ["/ip4/<IP_ADDRESS>/tcp/39115", "/ip4/<IP_ADDRESS>/tcp/39115", "/ip6/::1/tcp/39115"]
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip6/::1/tcp/39115"
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:42.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:13:42.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-25 17:13:42.744 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-25 17:13:47.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-25 17:13:47.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-25 17:13:47.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:47.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:13:47.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-25 17:13:47.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:47.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:13:47.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-25 17:13:47.743 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-25 17:13:52.742 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat

In  other window i write next:
$ echo "erfer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth
2020-11-25 17:15:09.330 main INFO robonomics-identity  Generated random peer id: 12D3KooW9wjEYiSx6faPp3NtfQ92PpsyE4E9mMm7etDPKsxt1t8C
2020-11-25 17:15:09.332 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:15:09.332 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:15:09.332 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-25 17:15:09.332 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-25 17:15:09.332 async-std/runtime DEBUG robonomics-pubsub  Publish to airalab.lighthouse.5.robonomics.eth
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Publishing message: MessageId("2727458262341713080")
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Forwarding message: MessageId("2727458262341713080")
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed forwarding message
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" } not in the mesh
2020-11-25 17:15:09.332 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:15:09.332 async-std/runtime INFO libp2p_gossipsub::behaviour  Published message: MessageId("2727458262341713080")

Listen key
After this I saw in first window(read) Listener adresses - Listening on ["/ip4/<IP_ADDRESS>/tcp/39115", "/ip4/<IP_ADDRESS>/tcp/39115", "/ip6/::1/tcp/39115"].
So I used one of this adresses with key  --listen:
$ ./robonomics io --log=debug read pubsub airalab.lighthouse.5.robonomics.eth --listen /ip4/<IP_ADDRESS>/tcp/39115
2020-11-25 17:21:13.649 main INFO robonomics-identity  Generated random peer id: 12D3KooWNrdqYBBgLuu3wJEvBgB8TffvPAskf8RLdVrsyeu2iNU3
2020-11-25 17:21:13.653 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/39115 created: ListenerId(1)
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:21:13.653 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:21:13.653 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: airalab.lighthouse.5.robonomics.eth
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-25 17:21:13.653 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-25 17:21:13.653 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: airalab.lighthouse.5.robonomics.eth
2020-11-25 17:21:13.653 async-std/runtime DEBUG robonomics-pubsub  Subscribed to airalab.lighthouse.5.robonomics.eth
2020-11-25 17:21:13.653 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-25 17:21:18.650 async-std/runtime DEBUG libp2p_tcp  Listening on "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-25 17:21:18.651 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-25 17:21:23.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-25 17:21:28.650 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat

In second window(write) I put:
echo "erfer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth
2020-11-25 17:21:50.776 main INFO robonomics-identity  Generated random peer id: 12D3KooWLhcZyMrYJGY3GnaXVMjNbnyFQu8rZbshu8oy2a9idCB3
2020-11-25 17:21:50.777 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-25 17:21:50.777 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:21:50.777 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:21:50.777 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:21:50.777 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-25 17:21:50.777 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:21:50.777 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:21:50.777 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-25 17:21:50.777 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-25 17:21:50.779 async-std/runtime DEBUG libp2p_tcp  Listening on ["/ip4/<IP_ADDRESS>/tcp/37017", "/ip4/<IP_ADDRESS>/tcp/37017", "/ip6/::1/tcp/37017"]
2020-11-25 17:21:50.779 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/37017"
2020-11-25 17:21:50.780 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/37017"
2020-11-25 17:21:50.780 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip6/::1/tcp/37017"
2020-11-25 17:21:50.780 async-std/runtime DEBUG robonomics-pubsub  Publish to airalab.lighthouse.5.robonomics.eth
2020-11-25 17:21:50.780 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Publishing message: MessageId("2727458262341713080")
2020-11-25 17:21:50.780 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Forwarding message: MessageId("2727458262341713080")
2020-11-25 17:21:50.780 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed forwarding message

But result is the same.
If i give to "writer" the same listen key (the same port) It give error:
$ echo "erfer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth --listen /ip4/<IP_ADDRESS>/tcp/39115
2020-11-25 17:24:42.688 main INFO robonomics-identity  Generated random peer id: 12D3KooWLZXYXG9JTX3UbRP8pfnUHbpDgfdiR6YW2FTF5nuyL9Cx
2020-11-25 17:24:42.688 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/39115 created: ListenerId(1)
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-25 17:24:42.689 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-25 17:24:42.689 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-25 17:24:42.689 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); Closed by Err(Custom { kind: Other, error: Other(A(A(A(Underlying(Os { code: 98, kind: AddrInUse, message: "Address already in use" }))))) }).
2020-11-25 17:24:42.689 async-std/runtime DEBUG robonomics-pubsub  Publish to airalab.lighthouse.5.robonomics.eth
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Publishing message: MessageId("2727458262341713080")
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Forwarding message: MessageId("2727458262341713080")
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed forwarding message
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" } not in the mesh
2020-11-25 17:24:42.689 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-25 17:24:42.689 async-std/runtime INFO libp2p_gossipsub::behaviour  Published message: MessageId("2727458262341713080")

Robonomics version
$ ./robonomics --version
robonomics 0.21.0-31a135b-x86_64-linux-gnu

question
Am I understand right how to use --listen key?
What else can I try ?
I noticed, that the same message e.g. "erfer", always get the same MessageID. I've send with time delays from 30 sec to 5 minutes, and always get the same value. Should it work like this?

Great, as we can see, your nodes have 0 peers. Listen key used correctly, but it should be used in pair with bootnodes key.
Please try to launch writer with bootnodes key points to reader.

OK, I launch node as you ask.There are some results:
First test
At first i decide work with 1 writer and 1 listener: In first window I write:(Listener)
$ ./robonomics io --log=debug read pubsub airalab.lighthouse.5.robonomics.eth --listen /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 18:59:32.869 main INFO robonomics-identity  Generated random peer id: 12D3KooWPj5VtgcFJWcGfsnR6M7CFV4d3wAcTsHUTYpo17BhhAhK
2020-11-26 18:59:32.874 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/39115 created: ListenerId(1)
2020-11-26 18:59:32.874 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-26 18:59:32.874 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 18:59:32.875 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-26 18:59:32.875 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: airalab.lighthouse.5.robonomics.eth
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 18:59:32.875 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 18:59:32.875 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: airalab.lighthouse.5.robonomics.eth
2020-11-26 18:59:32.875 async-std/runtime DEBUG robonomics-pubsub  Subscribed to airalab.lighthouse.5.robonomics.eth
2020-11-26 18:59:32.875 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_tcp  Listening on "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 18:59:37.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-26 18:59:42.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 18:59:42.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-26 18:59:42.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 18:59:42.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 18:59:42.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-26 18:59:42.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 18:59:42.870 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 18:59:42.871 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 18:59:42.871 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat

In other window:(writer)
$ echo "hhehrer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth --bootnodes /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:02:57.342 main INFO robonomics-identity  Generated random peer id: 12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR
2020-11-26 19:02:57.344 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-26 19:02:57.344 async-std/runtime DEBUG robonomics-pubsub  Connecting to /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:02:57.344 async-std/runtime DEBUG libp2p_tcp  Dialing /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:02:57.344 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:02:57.344 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:02:57.344 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:02:57.344 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:02:57.344 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:02:57.344 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:02:57.344 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-26 19:02:57.344 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /secio/1.0.0
2020-11-26 19:02:57.344 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-26 19:02:57.344 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /secio/1.0.0
2020-11-26 19:02:57.344 libp2p-swarm-task-3 DEBUG libp2p_secio  Starting secio upgrade
2020-11-26 19:02:57.345 libp2p-swarm-task-3 DEBUG libp2p_secio::handshake  selected cipher: Aes128
2020-11-26 19:02:57.345 libp2p-swarm-task-3 DEBUG libp2p_secio::handshake  selected hash: Sha256
2020-11-26 19:02:57.345 libp2p-swarm-task-3 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.346 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /yamux/1.0.0
2020-11-26 19:02:57.346 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /yamux/1.0.0
2020-11-26 19:02:57.346 libp2p-swarm-task-3 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.346 async-std/runtime DEBUG libp2p_tcp  Listening on ["/ip4/<IP_ADDRESS>/tcp/38647", "/ip4/<IP_ADDRESS>/tcp/38647", "/ip6/::1/tcp/38647"]
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/38647"
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/38647"
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip6/::1/tcp/38647"
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_swarm  Connection established: Connected { endpoint: Dialer { address: "/ip4/<IP_ADDRESS>/tcp/39115" }, info: PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB") }; Total (peer): 1.
2020-11-26 19:02:57.347 async-std/runtime INFO libp2p_gossipsub::behaviour  New peer connected: PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB")
2020-11-26 19:02:57.347 async-std/runtime DEBUG robonomics-pubsub  Publish to airalab.lighthouse.5.robonomics.eth
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Publishing message: MessageId("10050784870312166118")
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Forwarding message: MessageId("10050784870312166118")
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed forwarding message
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" } not in the mesh
2020-11-26 19:02:57.347 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:02:57.347 async-std/runtime INFO libp2p_gossipsub::behaviour  Published message: MessageId("10050784870312166118")
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG multistream_select::listener_select  Listener: confirming protocol: /meshsub/1.0.0
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /meshsub/1.0.0
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /meshsub/1.0.0
2020-11-26 19:02:57.349 libp2p-swarm-task-2 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /meshsub/1.0.0
2020-11-26 19:02:57.349 libp2p-swarm-task-2 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.349 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Handling subscriptions: [GossipsubSubscription { action: Subscribe, topic_hash: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" } }, GossipsubSubscription { action: Subscribe, topic_hash: TopicHash { hash: "_robonomics_pubsub_peer_discovery" } }], from source: PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB")
2020-11-26 19:02:57.349 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: topic_peer: Adding gossip peer: PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB") to topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:02:57.349 async-std/runtime INFO libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer: PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB") to topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:02:57.349 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: topic_peer: Adding gossip peer: PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:02:57.349 async-std/runtime INFO libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer: PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:02:57.349 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer PeerId("12D3KooWNpDMyL5g3pCjQwkf59bXCKFKiwVhCypieCNy4BeDV3YB") to the mesh

And I get this error message in Listener window:
2020-11-26 19:02:51.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:02:56.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-26 19:02:57.344 libp2p-swarm-task-0 DEBUG multistream_select::listener_select  Listener: confirming protocol: /secio/1.0.0
2020-11-26 19:02:57.344 libp2p-swarm-task-0 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /secio/1.0.0
2020-11-26 19:02:57.344 libp2p-swarm-task-0 DEBUG libp2p_secio  Starting secio upgrade
2020-11-26 19:02:57.345 libp2p-swarm-task-0 DEBUG libp2p_secio::handshake  selected cipher: Aes128
2020-11-26 19:02:57.345 libp2p-swarm-task-0 DEBUG libp2p_secio::handshake  selected hash: Sha256
2020-11-26 19:02:57.346 libp2p-swarm-task-2 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.346 libp2p-swarm-task-2 DEBUG multistream_select::listener_select  Listener: confirming protocol: /yamux/1.0.0
2020-11-26 19:02:57.346 libp2p-swarm-task-2 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /yamux/1.0.0
2020-11-26 19:02:57.346 libp2p-swarm-task-2 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.346 async-std/runtime DEBUG libp2p_swarm  Connection established: Connected { endpoint: Listener { local_addr: "/ip4/<IP_ADDRESS>/tcp/39115", send_back_addr: "/ip4/<IP_ADDRESS>/tcp/35092" }, info: PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR") }; Total (peer): 1.
2020-11-26 19:02:57.346 async-std/runtime INFO libp2p_gossipsub::behaviour  New peer connected: PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR")
2020-11-26 19:02:57.346 libp2p-swarm-task-1 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /meshsub/1.0.0
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG multistream_select::listener_select  Listener: confirming protocol: /meshsub/1.0.0
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /meshsub/1.0.0
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /meshsub/1.0.0
2020-11-26 19:02:57.348 libp2p-swarm-task-1 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:02:57.349 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Handling subscriptions: [GossipsubSubscription { action: Subscribe, topic_hash: TopicHash { hash: "_robonomics_pubsub_peer_discovery" } }], from source: PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR")
2020-11-26 19:02:57.349 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: topic_peer: Adding gossip peer: PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:02:57.349 async-std/runtime INFO libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer: PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:02:57.349 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR") to the mesh
2020-11-26 19:02:57.352 libp2p-swarm-task-2 DEBUG libp2p_tcp  Dropped TCP connection to V4(<IP_ADDRESS>:35092)
2020-11-26 19:02:57.352 async-std/runtime DEBUG libp2p_swarm  Connection Connected { endpoint: Listener { local_addr: "/ip4/<IP_ADDRESS>/tcp/39115", send_back_addr: "/ip4/<IP_ADDRESS>/tcp/35092" }, info: PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR") } closed: IO(Custom { kind: Other, error: "yamux error: connection is closed" })
2020-11-26 19:02:57.352 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Peer disconnected: PeerId("12D3KooWNadthHuvhg91JdNVwRyBfnsCPDY3bUd1WqZAwdakXeRR")
2020-11-26 19:03:01.257 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat

second test
You told that "node has 0 peers" and i see this part:
2020-11-26 19:03:01.257 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:03:01.258 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat

So i decide to create N (N>4) listener's nodes and then repit the test. I made 5 windows and write next commands:
In first window:
$ ./robonomics io --log=debug read pubsub airalab.lighthouse.5.robonomics.eth --listen /ip4/<IP_ADDRESS>/tcp/39115
In others windows:
$ ./robonomics io --log=debug read pubsub airalab.lighthouse.5.robonomics.eth --bootnodes /ip4/<IP_ADDRESS>/tcp/39115
Exacly after start 2 nodes I see this:
First window:
$ ./robonomics io --log=debug read pubsub airalab.lighthouse.5.robonomics.eth --listen /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:17:40.264 main INFO robonomics-identity  Generated random peer id: 12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB
2020-11-26 19:17:40.265 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/39115 created: ListenerId(1)
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:40.265 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:17:40.265 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: airalab.lighthouse.5.robonomics.eth
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:17:40.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:40.265 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: airalab.lighthouse.5.robonomics.eth
2020-11-26 19:17:40.265 async-std/runtime DEBUG robonomics-pubsub  Subscribed to airalab.lighthouse.5.robonomics.eth
2020-11-26 19:17:40.265 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_tcp  Listening on "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/39115"
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 0 needs: 4
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 0 needs: 4
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:17:45.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-26 19:17:46.297 libp2p-swarm-task-1 DEBUG multistream_select::listener_select  Listener: confirming protocol: /secio/1.0.0
2020-11-26 19:17:46.297 libp2p-swarm-task-1 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /secio/1.0.0
2020-11-26 19:17:46.297 libp2p-swarm-task-1 DEBUG libp2p_secio  Starting secio upgrade
2020-11-26 19:17:46.298 libp2p-swarm-task-1 DEBUG libp2p_secio::handshake  selected cipher: Aes128
2020-11-26 19:17:46.298 libp2p-swarm-task-1 DEBUG libp2p_secio::handshake  selected hash: Sha256
2020-11-26 19:17:46.299 libp2p-swarm-task-1 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:46.301 libp2p-swarm-task-0 DEBUG multistream_select::listener_select  Listener: confirming protocol: /yamux/1.0.0
2020-11-26 19:17:46.301 libp2p-swarm-task-0 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /yamux/1.0.0
2020-11-26 19:17:46.301 libp2p-swarm-task-0 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:46.301 async-std/runtime DEBUG libp2p_swarm  Connection established: Connected { endpoint: Listener { local_addr: "/ip4/<IP_ADDRESS>/tcp/39115", send_back_addr: "/ip4/<IP_ADDRESS>/tcp/36486" }, info: PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe") }; Total (peer): 1.
2020-11-26 19:17:46.301 async-std/runtime INFO libp2p_gossipsub::behaviour  New peer connected: PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe")
2020-11-26 19:17:46.301 libp2p-swarm-task-0 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /meshsub/1.0.0
2020-11-26 19:17:46.303 libp2p-swarm-task-1 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /meshsub/1.0.0
2020-11-26 19:17:46.303 libp2p-swarm-task-1 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:46.304 libp2p-swarm-task-3 DEBUG multistream_select::listener_select  Listener: confirming protocol: /meshsub/1.0.0
2020-11-26 19:17:46.304 libp2p-swarm-task-3 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /meshsub/1.0.0
2020-11-26 19:17:46.304 libp2p-swarm-task-3 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:46.305 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Handling subscriptions: [GossipsubSubscription { action: Subscribe, topic_hash: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" } }, GossipsubSubscription { action: Subscribe, topic_hash: TopicHash { hash: "_robonomics_pubsub_peer_discovery" } }], from source: PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe")
2020-11-26 19:17:46.305 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: topic_peer: Adding gossip peer: PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe") to topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:46.305 async-std/runtime INFO libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer: PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe") to topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:46.305 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe") to the mesh
2020-11-26 19:17:46.305 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: topic_peer: Adding gossip peer: PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:46.305 async-std/runtime INFO libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer: PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:46.305 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer PeerId("12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe") to the mesh
2020-11-26 19:17:50.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 1 needs: 4
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 1 needs: 4
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:17:50.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat

in second:
$ ./robonomics io --log=debug read pubsub airalab.lighthouse.5.robonomics.eth --bootnodes /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:17:46.294 main INFO robonomics-identity  Generated random peer id: 12D3KooWK9xCxXN476pR765M3USVbC1nU87pcwL9qSYymHCkcrNe
2020-11-26 19:17:46.296 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-26 19:17:46.296 async-std/runtime DEBUG robonomics-pubsub  Connecting to /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:17:46.296 async-std/runtime DEBUG libp2p_tcp  Dialing /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:17:46.297 libp2p-swarm-task-0 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /secio/1.0.0
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:46.297 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:17:46.297 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: airalab.lighthouse.5.robonomics.eth
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:17:46.297 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:46.297 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: airalab.lighthouse.5.robonomics.eth
2020-11-26 19:17:46.297 async-std/runtime DEBUG robonomics-pubsub  Subscribed to airalab.lighthouse.5.robonomics.eth
2020-11-26 19:17:46.297 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-26 19:17:46.297 libp2p-swarm-task-0 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /secio/1.0.0
2020-11-26 19:17:46.297 libp2p-swarm-task-0 DEBUG libp2p_secio  Starting secio upgrade
2020-11-26 19:17:46.298 libp2p-swarm-task-0 DEBUG libp2p_secio::handshake  selected cipher: Aes128
2020-11-26 19:17:46.298 libp2p-swarm-task-0 DEBUG libp2p_secio::handshake  selected hash: Sha256
2020-11-26 19:17:46.300 libp2p-swarm-task-3 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:46.300 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /yamux/1.0.0
2020-11-26 19:17:46.301 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /yamux/1.0.0
2020-11-26 19:17:46.301 libp2p-swarm-task-3 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:46.302 async-std/runtime DEBUG libp2p_tcp  Listening on ["/ip4/<IP_ADDRESS>/tcp/40197", "/ip4/<IP_ADDRESS>/tcp/40197", "/ip6/::1/tcp/40197"]
2020-11-26 19:17:46.302 libp2p-swarm-task-3 DEBUG multistream_select::listener_select  Listener: confirming protocol: /meshsub/1.0.0
2020-11-26 19:17:46.302 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/40197"
2020-11-26 19:17:46.302 libp2p-swarm-task-3 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /meshsub/1.0.0
2020-11-26 19:17:46.302 libp2p-swarm-task-3 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:46.302 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/40197"
2020-11-26 19:17:46.303 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip6/::1/tcp/40197"
2020-11-26 19:17:46.303 async-std/runtime DEBUG libp2p_swarm  Connection established: Connected { endpoint: Dialer { address: "/ip4/<IP_ADDRESS>/tcp/39115" }, info: PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB") }; Total (peer): 1.
2020-11-26 19:17:46.303 async-std/runtime INFO libp2p_gossipsub::behaviour  New peer connected: PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB")
2020-11-26 19:17:46.303 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Handling subscriptions: [GossipsubSubscription { action: Subscribe, topic_hash: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" } }, GossipsubSubscription { action: Subscribe, topic_hash: TopicHash { hash: "_robonomics_pubsub_peer_discovery" } }], from source: PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB")
2020-11-26 19:17:46.303 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: topic_peer: Adding gossip peer: PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB") to topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:46.303 async-std/runtime INFO libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer: PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB") to topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" }
2020-11-26 19:17:46.303 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB") to the mesh
2020-11-26 19:17:46.304 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: topic_peer: Adding gossip peer: PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:46.304 async-std/runtime INFO libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer: PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB") to topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:17:46.304 async-std/runtime DEBUG libp2p_gossipsub::behaviour  SUBSCRIPTION: Adding peer PeerId("12D3KooWB3rEx63yyNRvqA9yGtAsa3qzjroMddPLDaUL7Zn4M9zB") to the mesh
2020-11-26 19:17:46.304 libp2p-swarm-task-1 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /meshsub/1.0.0
2020-11-26 19:17:46.305 libp2p-swarm-task-2 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /meshsub/1.0.0
2020-11-26 19:17:46.305 libp2p-swarm-task-2 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 1 needs: 4
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 1 needs: 4
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:17:51.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "airalab.lighthouse.5.robonomics.eth" Contains: 1 needs: 4
2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []
2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 1 needs: 4
2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Updating mesh, new mesh: []

So now we see 1 topic in mesh: 2020-11-26 19:17:56.295 async-std/runtime DEBUG libp2p_gossipsub::behaviour  HEARTBEAT: Mesh low. Topic: "_robonomics_pubsub_peer_discovery" Contains: 1 needs: 4
I start others node. Every time i get the same messages about find new coneccted toipcs. At the end The messages about "low mesh" is disappeared.
2020-11-26 19:22:55.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:22:55.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:22:55.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-26 19:23:00.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat
2020-11-26 19:23:00.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:23:00.265 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat

But all nodes are starting create peers:
2020-11-26 19:24:17.502 async-std/runtime DEBUG libp2p_swarm  Connection established: Connected { endpoint: Dialer { address: "/ip4/<IP_ADDRESS>/tcp/39219" }, info: PeerId("12D3KooWJajiAmSbJZPEKSXhJcZsf1Rpt886cDM5BMG8qUa94NCH") }; Total (peer): 13.
2020-11-26 19:24:17.495 libp2p-swarm-task-2 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:24:17.502 libp2p-swarm-task-2 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /yamux/1.0.0
2020-11-26 19:24:17.495 libp2p-swarm-task-3 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:24:17.502 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /yamux/1.0.0
2020-11-26 19:24:17.504 libp2p-swarm-task-0 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /yamux/1.0.0
2020-11-26 19:24:17.504 libp2p-swarm-task-0 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:24:17.504 async-std/runtime DEBUG libp2p_swarm  Connection established: Connected { endpoint: Dialer { address: "/ip4/<IP_ADDRESS>/tcp/45059" }, info: PeerId("12D3KooWDKmACWWhm4k3rbSa2cdP9ER7oF2N1CBMi2T1Gerj9CtT") }; Total (peer): 12.
2020-11-26 19:24:17.510 libp2p-swarm-task-1 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /yamux/1.0.0
2020-11-26 19:24:17.510 libp2p-swarm-task-1 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:24:17.510 async-std/runtime DEBUG libp2p_swarm  Connection established: Connected { endpoint: Dialer { address: "/ip4/<IP_ADDRESS>/tcp/45059" }, info: PeerId("12D3KooWDKmACWWhm4k3rbSa2cdP9ER7oF2N1CBMi2T1Gerj9CtT") }; Total (peer): 13.

Total number of peers every time grow up.
At the end I made "writer" with same bootnode key:
$ echo "hhehrer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth --bootnodes /ip4/<IP_ADDRESS>/tcp/39115

I sent message 3 time, And get different output:
1)
$ echo "hhehrer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth --bootnodes /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:31:30.779 main INFO robonomics-identity  Generated random peer id: 12D3KooWG1KYyJsoVsQq9tKC7i9HfJSzh8Nvt1YSCHDErQjHBU9W
2020-11-26 19:31:30.784 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-26 19:31:30.785 async-std/runtime DEBUG robonomics-pubsub  Connecting to /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:31:30.785 async-std/runtime DEBUG libp2p_tcp  Dialing /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:31:30.785 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:31:30.785 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:31:30.785 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:31:30.786 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:31:30.786 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:31:30.786 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery

and this error in Listener:
2020-11-26 19:31:30.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Started gossip
2020-11-26 19:31:30.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed Heartbeat
2020-11-26 19:31:30.795 libp2p-swarm-task-1 DEBUG libp2p_tcp  Dropped TCP connection to V4(<IP_ADDRESS>:38880)
2020-11-26 19:31:30.796 async-std/runtime DEBUG libp2p_swarm  Incoming connection failed: Transport(Other(Custom { kind: Other, error: Other(A(B(Select(ProtocolError(IoError(Kind(UnexpectedEof))))))) }))
2020-11-26 19:31:35.264 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Starting heartbeat

Writer

$ echo "hhehrer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth --bootnodes /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:31:59.598 main INFO robonomics-identity  Generated random peer id: 12D3KooWRkwp15fPvMiGU8j7Ji1BXafnZrQj2rZZLPSufrzRFcAr
2020-11-26 19:31:59.602 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-26 19:31:59.602 async-std/runtime DEBUG robonomics-pubsub  Connecting to /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:31:59.602 async-std/runtime DEBUG libp2p_tcp  Dialing /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:31:59.603 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:31:59.604 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:31:59.604 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:31:59.604 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:31:59.605 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:31:59.605 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:31:59.605 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-26 19:31:59.605 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-26 19:31:59.605 async-std/runtime DEBUG robonomics-pubsub  Publish to airalab.lighthouse.5.robonomics.eth
2020-11-26 19:31:59.605 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Publishing message: MessageId("10050784870312166118")
2020-11-26 19:31:59.604 libp2p-swarm-task-0 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /secio/1.0.0
2020-11-26 19:31:59.606 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Forwarding message: MessageId("10050784870312166118")
2020-11-26 19:31:59.606 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed forwarding message
2020-11-26 19:31:59.606 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Topic: TopicHash { hash: "airalab.lighthouse.5.robonomics.eth" } not in the mesh
2020-11-26 19:31:59.606 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:31:59.606 async-std/runtime INFO libp2p_gossipsub::behaviour  Published message: MessageId("10050784870312166118")

Listener:
2020-11-26 19:31:59.607 libp2p-swarm-task-2 DEBUG multistream_select::listener_select  Listener: confirming protocol: /secio/1.0.0
2020-11-26 19:31:59.607 libp2p-swarm-task-2 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /secio/1.0.0
2020-11-26 19:31:59.607 libp2p-swarm-task-2 DEBUG libp2p_secio  Starting secio upgrade
2020-11-26 19:31:59.613 libp2p-swarm-task-0 DEBUG libp2p_tcp  Dropped TCP connection to undeterminate peer
2020-11-26 19:31:59.613 libp2p-swarm-task-0 DEBUG libp2p_core::upgrade::apply  Failed to apply negotiated protocol
2020-11-26 19:31:59.613 async-std/runtime DEBUG libp2p_swarm  Incoming connection failed: Transport(Other(Custom { kind: Other, error: Other(A(B(Apply(IoError(Os { code: 104, kind: ConnectionReset, message: "Connection reset by peer" }))))) }))

Writer:

$ echo "hhehrer" | ./robonomics io --log=debug write pubsub airalab.lighthouse.5.robonomics.eth --bootnodes /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:32:56.770 main INFO robonomics-identity  Generated random peer id: 12D3KooWBCFq6MxQxaMezgU9jZiiP8npigKYTEASHMBYrqSx9yBu
2020-11-26 19:32:56.773 async-std/runtime DEBUG robonomics-pubsub  Listener for address /ip4/<IP_ADDRESS>/tcp/0 created: ListenerId(1)
2020-11-26 19:32:56.774 async-std/runtime DEBUG robonomics-pubsub  Connecting to /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:32:56.774 async-std/runtime DEBUG libp2p_tcp  Dialing /ip4/<IP_ADDRESS>/tcp/39115
2020-11-26 19:32:56.775 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Subscribing to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:32:56.776 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Running JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:32:56.776 libp2p-swarm-task-1 DEBUG multistream_select::dialer_select  Dialer: Proposed protocol: /secio/1.0.0
2020-11-26 19:32:56.776 async-std/runtime DEBUG libp2p_gossipsub::behaviour  RANDOM PEERS: Got 0 peers
2020-11-26 19:32:56.776 async-std/runtime DEBUG libp2p_gossipsub::behaviour  JOIN: Inserting 0 random peers into the mesh
2020-11-26 19:32:56.776 async-std/runtime DEBUG libp2p_gossipsub::behaviour  Completed JOIN for topic: TopicHash { hash: "_robonomics_pubsub_peer_discovery" }
2020-11-26 19:32:56.776 async-std/runtime INFO libp2p_gossipsub::behaviour  Subscribed to topic: _robonomics_pubsub_peer_discovery
2020-11-26 19:32:56.776 async-std/runtime DEBUG robonomics-pubsub  Subscribed to _robonomics_pubsub_peer_discovery
2020-11-26 19:32:56.776 async-std/runtime DEBUG robonomics-pubsub  Listeners: []
2020-11-26 19:32:56.778 libp2p-swarm-task-3 DEBUG multistream_select::dialer_select  Dialer: Received confirmation for protocol: /secio/1.0.0
2020-11-26 19:32:56.778 libp2p-swarm-task-3 DEBUG libp2p_secio  Starting secio upgrade
2020-11-26 19:32:56.779 libp2p-swarm-task-3 DEBUG libp2p_secio::handshake  selected cipher: Aes128
2020-11-26 19:32:56.779 libp2p-swarm-task-3 DEBUG libp2p_secio::handshake  selected hash: Sha256
2020-11-26 19:32:56.779 async-std/runtime DEBUG libp2p_tcp  Listening on ["/ip4/<IP_ADDRESS>/tcp/46037", "/ip4/<IP_ADDRESS>/tcp/46037", "/ip6/::1/tcp/46037"]
2020-11-26 19:32:56.779 async-std/runtime DEBUG libp2p_swarm  Listener ListenerId(1); New address: "/ip4/<IP_ADDRESS>/tcp/46037"

Listener:
2020-11-26 19:32:56.777 libp2p-swarm-task-3 DEBUG multistream_select::listener_select  Listener: confirming protocol: /secio/1.0.0
2020-11-26 19:32:56.777 libp2p-swarm-task-3 DEBUG multistream_select::listener_select  Listener: sent confirmed protocol: /secio/1.0.0
2020-11-26 19:32:56.777 libp2p-swarm-task-3 DEBUG libp2p_secio  Starting secio upgrade
2020-11-26 19:32:56.779 libp2p-swarm-task-1 DEBUG libp2p_secio::handshake  selected cipher: Aes128
2020-11-26 19:32:56.779 libp2p-swarm-task-1 DEBUG libp2p_secio::handshake  selected hash: Sha256
2020-11-26 19:32:56.782 libp2p-swarm-task-0 DEBUG libp2p_core::upgrade::apply  Successfully applied negotiated protocol
2020-11-26 19:32:56.787 libp2p-swarm-task-3 DEBUG libp2p_secio  error during secio handshake IoError(Os { code: 104, kind: ConnectionReset, message: "Connection reset by peer" })
2020-11-26 19:32:56.788 libp2p-swarm-task-3 DEBUG libp2p_tcp  Dropped TCP connection to undeterminate peer
2020-11-26 19:32:56.790 async-std/runtime DEBUG libp2p_swarm  Incoming connection failed: Transport(Other(Custom { kind: Other, error: Other(B(Select(ProtocolError(IoError(Custom { kind: InvalidData, error: IoError(Os { code: 104, kind: ConnectionReset, message: "Connection reset by peer" }) }))))) }))

Resume

In test wirh 1 Listener and one Writer I got an error.
In test with 5 Listeners and 1 Writer Listeners found each others and started mesh, But I still couldn't write in it(everytime writer has got mistakes from different "swarm-task-*".
Also Listeners was trying sent to each other messages, but I didn't see them in differrent windows.


Consider adding declarations

Although it is impossible to use Typescript to re implement, using .d.ts files to declare interfaces and types may be more effective than writing documents.   Especially when using it in frameworks like Angular, type declarations can be very important.
but now @types/sigma is not exist in npm store yet

Are there any updates for this?
@types/sigmajs repository is not compatible to be used with sigma.js original library.

Hello @eakarpov. There won’t be declarations for this version of the library unless someone wants to submit a PR about it. It would probably be more useful to add declarations to the lib’s v2 which targets more modern js envs.

@Yomguithereal Is the second version out? Can I use it?

The second version is not out because it's not documented but you can install it through npm install<EMAIL_ADDRESS>and you can find some examples in the v2 branch of this repository.


ASP.Net SignalR - exception with Microsoft.Extensions.Logging.EventSource v3.0.0

When using the latest version of Microsoft.Extensions.Logging.EventSource  (version 3.0.0) which was released recently, SignalR for ASP.Net fails with the following exception captured in the EventLog:
Exception has been thrown by the target of an invocation.
	at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
	at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
	at Owin.Loader.DefaultLoader.<>c__DisplayClass18_1.<MakeDelegate>b__0(IAppBuilder builder)
	at Owin.Loader.DefaultLoader.<>c__DisplayClass9_0.<LoadImplementation>b__0(IAppBuilder builder)
	at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.<>c__DisplayClass5_0.<InitializeBlueprint>b__0(IAppBuilder builder)
	at Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(Action`1 startup)
	at Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build(Action`1 startup)
	at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint()
	at System.Threading.LazyInitializer.EnsureInitializedCore[T](T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory)
	at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(HttpApplication context)
	at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
	at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
	at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
	at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) Method not found: 'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.EventSourceLoggerFactoryExtensions.AddEventSourceLogger(Microsoft.Extensions.Logging.ILoggerFactory)'.
	at Owin.OwinExtensions.RunAzureSignalRCore(IAppBuilder builder, String applicationName, HubConfiguration configuration, ServiceOptions options)
	at Owin.OwinExtensions.RunAzureSignalR(IAppBuilder builder, String applicationName, HubConfiguration configuration, Action`1 optionsConfigure)
	at Owin.OwinExtensions.<>c__DisplayClass6_0.<MapAzureSignalR>b__0(IAppBuilder subApp)
	at Owin.MapExtensions.Map(IAppBuilder app, PathString pathMatch, Action`1 configuration)
	at Owin.MapExtensions.Map(IAppBuilder app, String pathMatch, Action`1 configuration)
	at Owin.OwinExtensions.MapAzureSignalR(IAppBuilder builder, String path, String applicationName, HubConfiguration configuration, Action`1 optionsConfigure)
	at Owin.OwinExtensions.MapAzureSignalR(IAppBuilder builder, String applicationName, HubConfiguration configuration, Action`1 optionsConfigure)
	at Startup.Configuration(IAppBuilder app)

We are running an ASP.Net App Service in Azure backed by an Azure SignalR instance cofigured in Default mode.
I have tested this avaing Microsoft.Azure.SignalR.AspNet versions 1.2.0 and 1.2.1, and both produce the same issue (however there is no issue when running locally).
It appears that the Logging API has changed and the method has been removed or had its signature changed - the following line from the above stack trace appears to be the culprit:
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) Method not found: 'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.EventSourceLoggerFactoryExtensions.AddEventSourceLogger(Microsoft.Extensions.Logging.ILoggerFactory)'.

Can you please review the ASP.Net SignalR service against the latest Microsoft.Extensions.Logging.EventSource and confirm if this is a real issue or if I could be missing something?  For now we can run against an earlier version of the library, but it would be good to be able to support the lastest version.
Many thanks

Quick update - the issue persists with the latest version of Microsoft.Extensions.Logging.EventSource (version 3.0.1) which was released today along with a number of other extension libraries at the same version.

3.0.0 removes extension method public static ILoggerFactory AddEventSourceLogger(this ILoggerFactory factory)

v1.2.2 is planned to be released next week to fix this issue. The current 1.2.2 preview package should already contain the fix.
Install-Package Microsoft.Azure.SignalR.AspNet -Version 1.2.2-preview1-10501 -Source https://www.myget.org/F/azure-signalr-dev/api/v3/index.json


Design system / tables

Yep, they are in the "Links and Buttons" section of the Main Design System sheet in Figma: https://www.figma.com/file/AXufBnFAVHvGdsxnQMVhNF/The-Accessibility-Exchange-Wireframes?node-id=1134%3A11567&t=lNoMoU04cqpPU3FY-4

Overflow/horizontal scrolling affordances: https://looseleaf.netlify.app/components/detail/table--default.html


Update page feed controller to not collide with Controller::get

This is a few updated fixes for #3485

@mlocati what's up with this hhvm error?

I don't know. It seems that HHVM behaviour in reading xml files somehow differs from PHP. I'll take a look at this.


Remove 'pending' from RTN12a, RTN12b.

Ok, hard to tell if this change is passing or not though as the CI builds are still failing / hanging. So :+1:

@ricardopereira PTAL

:+1:


Bounding Box for Prediction set

How to get the prediction bounding box for label

I'm also interested in this!


Faster than 1 second inference?

First, thanks for publishing this project.
I'm trying to infer objects faster than 1 FPS. My camera is 20 FPS.
I have the motion detector down to 0.05 (1/20).
Object detection interval down to 0.05.
Looking at the debugs, I am guessing I get about 1-2, maybe 3 FPS send into the detector, it's difficult to tell as the viseron logs say the same message (objects detected []) was repeated X times, but it doesn't timestamp each detection log.
My Jetson Nano is idling around 20% cpu across the cores, and barely hitting the GPU (watching via jtop) - and I want to process more FPS for a realtime vehicle application.
I've read some docs and the previous issues. It seems like I need to decrease the motion detector, but when I decrease it below 0.05, I get divide by 0 errors in the code.
How can I increase the FPS pushed into the Object Detection engine and not hit divide by 0 errors?
Here's my config
cameras:
  - name: Camera
    host: <IP_ADDRESS>
    port: 554
    username: <if auth is enabled>
    password: <if auth is enabled>
    path: /live.sdp
    width: 1920
    height: 1920
    fps: 20
motion_detection:
  interval: 0.05
  trigger_detector: false
  trigger_recorder: false
  timeout: true
  max_timeout: 30
  width: 416
  height: 416
  area: 0.1
  threshold: 1
  frames: 1

object_detection:
  type: darknet
  interval: 0.05
  log_all_objects: true

logging:
  level: debug

Thanks for showing interest in Viseron!
You should not have to decrease the interval any lower, i suspect the bottleneck may be elsewhere.
Hard to guess where tho.
Do you get faster detections if you swap the model for the yolov3-tiny version?
object_detection:
  type: darknet
  interval: 0.05
  model_path: /detectors/models/darknet/yolov3-tiny.weights
  log_all_objects: true

Googling a bit on using the Nano with YOLOv4 on OpenCV it seems that the FPS is generally quite low.
This post points towards around 2 FPS.
https://forums.developer.nvidia.com/t/yolov4-with-opencv/158725
To utilize the Nano better it seems other tools and models need to be used.
Is this something you have experience with?

Yeah, I do have some experience there, so I know the targets I want to hit from that experience. I made my own multithreaded threaded Python engine that uses the nvidia optimized gstreamer to feed from a RTSP h264 stream camera, run Darknet Yolov3-Tiny inference on realtime frames, have a listener for MQTT control and notifications, and that pushes captured images and objects down via MQTT. Many similarities with your project!
I can get about 12 FPS detection out of Yolov3-tiny on the Nano with a custom trained 416x416 model.

That sounds awesome! Do you have your code posted anywhere? Would love to have a look.
Would be great to make a tailored solution for the Nano, but I dont own a Nano myself sadly so creating something like that is very hard for me on my own (took me ages to get it running on the Nano in the first place!)
I have some work going on right now where im trying to make Viseron more modular, and also the interfacing with the cameras.
Right now FFMPEG is the only possibility but i would like to be able to utilize, in this instance, gstreamer as you mentioned.

Here's the traceback, after I change motion and detector intervals to 0.025 to try to get (2 out of every 20 frames inspected instead of just 1 - 0.05)
viseron | Exception in thread viseron.camera.cisco: viseron | Traceback (most recent call last): viseron | File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner viseron | self.run() viseron | File "/usr/local/lib/python3.8/threading.py", line 870, in run viseron | self._target(*self._args, **self._kwargs) viseron | File "/src/viseron/camera/init.py", line 114, in capture_pipe viseron | decoder.scan_frame(current_frame) viseron | File "/src/viseron/camera/frame_decoder.py", line 93, in scan_frame viseron | if self._frame_number % self._interval_fps == 0: viseron | ZeroDivisionError: integer division or modulo by zero

interval: 0.05 should already be working at 20 FPS for you.
interval is specified in seconds, so if you take 1/20 = 0.05 it will inspect every frame.
However it doesnt seem like the current implementation can keep up with that.

That sounds awesome! Do you have your code posted anywhere? Would love to have a look.

@jasonbarbee  Yes, please. lets have a look?

Update -  I got permission to share the code, need a little time to test and write a readme - will update here soon when it's ready.

Closing due to inactivity


archiver in freebsd images appears to be broken

Checklist

[X] I've looked through the issues and pull requests for similar reports

Describe your issue
The toolchain used in the freebsd images appears to be broken. I managed to reduce the test case basically down to just:
$ docker pull ghcr.io/cross-rs/x86_64-unknown-freebsd:0.2.4
$ docker run -it ghcr.io/cross-rs/x86_64-unknown-freebsd:0.2.4 bash
$ echo "int banana(void) { return 0; }" | x86_64-unknown-freebsd12-gcc -xc - -c -o chaenomeles.o
$ x86_64-unknown-freebsd12-gcc-ar cq mango.ar chaenomeles.o; echo $?
x86_64-unknown-freebsd12-gcc-ar: Cannot find plugin 'liblto_plugin.so'
1

This in practice causes crates such as cc fail to package the built objects into an .a in crates’ build.rs scripts.
What target(s) are you cross-compiling for?
i686-unknown-freebsd, x86_64-unknown-freebsd
Which operating system is the host (e.g computer cross is on) running?

[ ] macOS
[ ] Windows
[X] Linux / BSD
[ ] other OS (specify in description)

What architecture is the host?

[X] x86_64 / AMD64
[ ] arm32
[ ] arm64 (including Mac M1)

What container engine is cross using?

[X] docker
[ ] podman
[ ] other container engine (specify in description)

cross version
cross 0.2.4
Example
No response
Additional information / notes
The closest relevant thing I can find on the internet is https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81326. Curiously we are already building the toolchain with --disable-lto flag, so it might be a bug in gcc itself?

It works if we use x86_64-unknown-freebsd12-ar rather than x86_64-unknown-freebsd12-gcc-ar, which means this should be fixed if we provide AR_x86_64_unknown_freebsd=x86_64-unknown-freebsd12-ar as an environment variable in the Dockerfile.

or just
[target.x86_64-unknown-freebsd.env]
passthrough = ["AR_x86_64_unknown_freebsd=x86_64-unknown-freebsd12-ar"]

Aha, curious. This seems like it is potentially an issue cc-rs might be interested in in the first place, given its preference towards the -gcc-ar suffix.
https://github.com/rust-lang/cc-rs/blob/2d5cc704dfafad16c873e386244181118cb5e4d1/src/lib.rs#L2623-L2638
and this is a very recent change too (https://github.com/rust-lang/cc-rs/pull/735).
But otherwise yeah setting the environment variable does work.


snowMelt-elijahPierce

Write a short description about your art piece, such as what your artwork represents and your experience drawing it!
I made a penguin whose nose change in size. then i made an igloo, and a snowman whose nose and hat change in size. I also made snowflakes randomly placed on the canvas. Then i made a 1-10 chance of the penguin "dying" when the sun comes out. First i made the penguin and the randomized snow, but i wanted more so I randomized the nose size. I still wanted to do more so I made the snowman and the igloo. but then i discovered how to make a chance of something different showing so I made a 1-10 chance of the sun coming out and the igloo and snowman melting.

[x] I have read the steps to getting a blot
[x] I have read all the submission requirements and follow them
[x] I am submitting art that...

[x] is algorithmically generated (will meaningfully change each time the program is run)
[x] is your own work that is not copied from somewhere else
[x] is drawable through the editor(does not use outside tools)
[x] doesn't call Math.random() (See the documentation on randomness)
[x] is drawable on Blot itself (doesn't have lines overlap more than 5 times)

[x] Doesn't overlap lines more than 5 times
[x] Fits in the working area of 125x125mm
[x] Doesn't rely on colour to look good

If you used based your art on something else, used a tutorial, or remixed it from something else, please link it here:
Lastly, link a picture of your art piece here:

I already made many things randomized and I mentioned it in the description when I say that change I mean that its size is randomly changing an amount of pixels on top of that It has a completely different picture 1-10 chanceOn Oct 3, 2024, at 4:20 PM, Dongathan-Jong @.***> wrote:
This is a good start! Unfortunately, this falls short of our submission requirements due to simplicity. I would recommend making your art piece more complex e.g. randomly generating character (not predetermined lines), or different landscape each time! I look forward to seeing your update and am happy to re-review once updated!
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

Hi there! I’m closing this PR for now to clear up the repo. I'd recommend doing some more major changes in the randomness, as currently it looks almost the same each time. Once you’ve made your edits/improvements, please make a new PR and we can review it there!!


Python: Run auto provisioning in async

The auto provisioning (having the SDK launch the engine session in a subprocess automatically, including downloading the CLI if on in the default cache dir) is being done in sync (in a worker thread). Make it run in async instead.
### Tasks
- [ ] Non-blocking
- [ ] Info and debug logs during provisioning
- [ ] Include stderr in provisioning error when `log_output` is set
- [ ] Make sure cancellations are properly handled and work as expected
- [ ] Make sure timeouts are properly handled during connection, not just query execution
- [ ] Consider supporting retries on a failed connection
- [ ] Capture more error conditions
- [ ] Capture OS signals to shut down

Related

https://github.com/dagger/dagger/issues/3806
https://github.com/dagger/dagger/issues/3838

I'm closing this in favor of shifting to using modules which don't need provisioning. The current sync approach is good enough in the meantime.


Exception copy is buggy

Environment

Millet version: v0.12.2

Steps to reproduce
Given
(*!
 * Doc for A
 *)
exception A
exception B = A

Try to e.g.:

Hover over the usage of A for doc.
Try to jump to the def of A from the usage of A.

Expected behavior
It works.
Actual behavior
It doesn't.

I believe this affects more things than just exception copy. Basically whenever in the grammar we have a name or path that is a usage site that is not directly inside exp or pat, we don’t provide jump to def for that.
This is because the current way we do jump to def is by storing information for the exp or pat idx. We don’t have a way to store jump to def info for an an arbitrary path nested in some gramma structure, such as exception copy or where type.


Predefined dictionaries with language translations

The translations are almost always the same. Is it possible to add default dictionaries?

@Eclipsium I thought about it, but I don't have enough time to fix it. Therefore I added a method to extract current error messages strings from pydantic. So if you get time for this, just create a PR and I will review it :smiley_cat:


Why need second retry queue?

I read the source code and find issue #314, I do not understand why need second retry queue for more retry times.
Can not increase the number of first retries?

The second retry queue has an exponential wait-time increment and it is mostly used in the case of Spark REST fetcher. First retry queue doesn't have any exponential wait-time period.

@imperio-wxm I hope you got a suitable explaination for your doubt. Let me know if you want to discuss this further. Thanks.


How to make computed setter activated when Leaflet map change view

I have an app that has Leaflet map in different pages, and customer wants the view must be synced. I tried to make the center of the map and at least the zoom sync but had no luck.
Let's say I have simple leaflet map:
<l-map
    :center="currentCenter"
    :zoom="currentZoom"
    :options="mapOptions"
    :url="url"
/>

In computed, I tried this way:
computed: {
    currentCenter: {
        get() {
            return this.$store.state.currentCenter;
            // try to get currentCenter from vuex store
        },
        set(value) {
            this.$store.commit('updateCenter', value);
            // this setter does not triggered when currentCenter changes.
        }
    }
}

My problem is, it can get correct currentCenter when mounted, but whenever I pane the map around, the Leaflet map change the currentCenter, but the setter inside currentCenter does not triggered, so vuex yelling "Do not mutate vuex store state outside mutation handlers."
So my question is, how could I can make the setter in currentCenter computed get triggered everytime I pane the leaflet map?
Thank you.
Versions

Leaflet: v1.3.1
Vue: v2.5.13
Vue2Leaflet: v1.0.2

moveend is the leaflet event triggered after the map changes https://leafletjs.com/reference-1.3.0.html#map-moveend (zoom, or any movement)
In l-map components, you can see it here https://github.com/KoRiGaN/Vue2Leaflet/blob/master/src/components/LMap.vue#L98 returning an event https://github.com/KoRiGaN/Vue2Leaflet/blob/master/src/components/LMap.vue#L116
So you would probably do something like this (didn't test, it s just a hint):
<l-map
  :center="currentCenter"
  :zoom="currentZoom"
  @update:center="updateCenter"
/>

<script>
export default {
  methods: {
    updateCenter (val) {
      console.log('my new center: ' + val)
      // trigger here your vuex mutations or use it directly in @update:center="vuexMutation"
    }
  }
}
</script>

Closing due to inactivity

I was having the same problem, and I think you need to be passing a copy of the currentCenter  from your store, because the vue-leaflet modifies properties of this object directly, rather than re-assigning the center object which would call the setter.
computed: {
    currentCenter: {
        get() {
            return Object.assign({}, this.$store.state.currentCenter);
        },
        ...
    }
   ...
}


route params not passed when staying on same page

Version
3.0.2
Reproduction link
https://jsfiddle.net/1946Leau/4/
Steps to reproduce
When defining routes which do not contain a parameter which is passed in the route params, the component params are updated only when coming from another route. In short, when the route url does not change, nothing is updated.
If you call $router.push({ name:'a', params: { foo: 1 } }) and $router.push({ name:'a', params: { foo: 2 } }) alternatively, the value of foo passed to the component will be updated only if :foo is included in the route url (Example B in Fiddle) or if you force an update by using a random query str (Example C in Fiddle)
What is expected?
I will expect to have foo passed also in the case it is not included in the route url.
At least, having a way to force the update without the trick with the query string would be nice.
What is actually happening?
foo is updated only the first time

params must be defined in the route in order to work: /route/:foo

Yes of course. But.

It works already without being defined in the route, if you come from another route
It would be a nice enhancement and nice way to pass additional parameters you dont want to get reflected in the route ?


List of necessary endpoints for Vault Issuer

Hello!
I have been trying to make a remote Vault issuer working. I wanted only the necessary endpoints to be accessible.
At first I was allowing only pki/sign/example to be reached on my remote Vault server, but I kept running into a "Vault sealed or uninitialized" error.
Then, I opened up all the paths and it started working.
Could you please indicate which Vault endpoints are necessary for the Vault issuer to work, so I can add some filters instead of letting it all open? I haven't found this in the documentation.
Thank you very much in advance and have a great day!

Thanks for opening the issue, I think this would be a valuable addition to our docs. Adding a good first issue label in case anyone wants to pick this up.
https://cert-manager.io/docs/configuration/vault/
https://github.com/cert-manager/website/blob/master/content/docs/configuration/vault.md
The endpoints can be discovered by looking at all the calls made to Vault in from issuers controller and certificate requests controller
https://github.com/cert-manager/cert-manager/blob/master/pkg/controller/certificaterequests/vault/vault.go
https://github.com/cert-manager/cert-manager/blob/master/pkg/issuer/vault/vault.go

Hi,
I think I found the endpoint causing me trouble.
Instead of simply writing a trivial and unwelcome list of endpoints, I added a mention to that particular endpoint in the "Verifying" section.
The PR is here and ready for approval / further modifications :)
Have a great day!

In general I'd encourage people just to make a PR instead of worrying about the assignee field...

My PR was merged, there was just a check on v1/sys/health which wasn't indicated in the doc and I hadn't open that path.


[CI] Bump upload to v4 to ensure schema-push still works

See https://github.com/inventree/InvenTree/pull/6836#issuecomment-2016977467 for details. Upload and download action need to be in the same major version.

@matmair thanks for the quick fix :)


Receiving-rebalancing of multiple connected node channel not supported.

I am aware that "The reason is that the last hop (channel) can't be controlled by us."
But I would argue that now, with MPP working, it actually does not matter which receiving channel receives the funds. So I suggest to treat multiple channels between the same nodes (at least in the incoming case) as one, and balance "the entireness" of channels. Certainly the user should be made aware of this, and be required to set some flag to acknowledge they understood this. But in my opinion multiple channels between the same nodes should be supported if possible.

Hey, yes I was thinking to somehow transition from a per channel basis to a per peer basis or to create an extra "listpeers", which aggregates the channels. I'll have to think a little bit more about it.


Use h4 instead of bold in table explanations?

One of my minor annoyances when using the spec is that I'll want to refer to a particular section but it's done in bold and there's no hyperlink.
The latest was summaries - I have to say: 'go to https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#collection-fields and scroll down'.
We could consider just using the smallest markdown heading, so we get an automatic hyperlink.

Linking to the description below is also not ideal:

It only covers things with a description below the table
It doesn't cover the "formal" data type description

I feel like linking to the collection fields fine, but on my screen I see it directly with the link, not sure about smaller screens.

This is changed to must have as it's now in an inconsistent state, as h4's were added in #942 so it could link better.


Update sbt-native-packager to 1.9.7

Updates com.typesafe.sbt:sbt-native-packager from 1.8.1 to 1.9.7.
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.typesafe.sbt", artifactId = "sbt-native-packager" } ]

labels: sbt-plugin-update, early-semver-minor, semver-spec-minor, commit-count:1

Superseded by #77.


Changed the build tools installer URL

This installer is the one that is suggested on node-gyp's page. Here is the link to the build tools.
It installs everything you need, but the downside is that it takes more space and time to install. We still need to install .NET Framework 4.5.1 for Vista and Windows 7

Merged and a new version released!


Improve Donate request

Improve pathway, placement and text

Use google analytics to track pathway?

Pathway>straight through to Free UK Gen donate page. Nice to have ability to track where users are coming from (i.e. which site) prior to donating. Placement - to remove donate from header? Place below instead (button). Text i.e. 'if you are happy with the results and wish to keep X free, then please donate'. Idea of different text each time.

I think this is now all broken down to individual stories.


Bug: Creating a new file or folder wont use set name

Description
They will always default to using "New Folder" or "New File"
Steps To Reproduce

Right click in a folder
Go to new > Folder/File
Enter a name
See the name not used

Steps to fix

Create File/Folder with entered name

Files Version
<IP_ADDRESS>
Windows Version
10.0.22621.1105
Relevant Assets/Logs
debug.log

@hecksmosis

After a quick look, inside Files.App\Helpers\UIFilesystemHelpers.cs, line.331 has this set of instruction :
userInput = dialog.ViewModel.AdditionalData as string;