Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Julien Enoch
    @JEnoch
    Hi @shantanoo-desai ,
    Thanks you for your feedback. Unfortunatelly we don’t have a DevOps guy in our team. But we’re grateful for any advices, guidance or contribution!
    BTW I have few questions you might have the answers:
    • for the zenohd and *.so you built this way, which maximal GLIBC version they require (check with ldd -v zenohd *.so | grep GLIBC) ? I manage to cross-build binaries for armv7l using a specific Dockerfile, but unfortunately the resulting libzplugin_storages.so requires GLIBC 2.29 which is greater than the default one on Raspberry Pi OS (2.28)
    • How do you make publicly available the artifacts produced by GH actions ? Eventually, (at least for final releases) we need to make those available on https://download.eclipse.org/zenoh/ , which is writeable only from the Eclipse CI infra
    17 replies
    gardenest
    @gardenest
    I have a situation that when I used a Zenoh peer A connect to a Zenoh router then everything works fine with other peers, but when I use zn_scout example to scout them I only saw peer A. If I use zn_info example, I could see all these peers and router. Is that normal or do I miss something? I assumed I could saw all the connected peers and routers via zn_scout.
    OlivierHecart
    @OlivierHecart

    Hello @gardenest, this is indeed strange. You should see all reachable routers and peers with zn_scout.
    There is a difference between zn_info and zn_scout that could explain this behavior :

    • zn_scout only reports routers and peers that are reachable through multicast.
    • zn_info and other peers by default connect to all routers and peers they discover through multicast AND gossip discovery (then zn_info reports its status).

    So maybe part of your peers are not reachable through multicast but are discovered by zn_info and other peers by gossip discovery (through the router probably).

    gardenest
    @gardenest
    @OlivierHecart Thanks for your reply. Since the zn_scout discovery instance through multicast, does it mean that I can't get all the routers and peers scout information cross network segmentation? If yes, is it possible to get all the instance information? For example, one router and peers located at Asia connected by another router and peers located at USA and I would like to discovery all the device.
    OlivierHecart
    @OlivierHecart
    @gardenest, there is no built-in way to discover all devices across the wan at this time in zenoh. The simplest way to do so right now would be to :
    • register a queryable (or an eval) with a specific path on each device (for example /system/devices/<device_id>).
    • do a query (or a get) to get the list of all devices (for example /system/devices/*)
    OlivierHecart
    @OlivierHecart
    Btw @gardenest, this may solve your "hello attachment" concern as you can put whatever you want in your reply.
    gardenest
    @gardenest
    @OlivierHecart Yes, it could solve my discovery question with an eval function on each device at this time. Thanks for you reply :)
    Tom Burdick
    @bfrog
    how big is zenoh-c as a library?
    or, maybe the better question is, how small can I get it?
    kydos
    @kydos
    Hello Tom, if you are looking for something small take a look at zenoh-pico
    halfbit
    @halfbit:matrix.org
    [m]
    I did see that, though that loses the p2p aspect of zenoh correct? needs a router in that case?
    kydos
    @kydos
    @halfbit:matrix.org, that is right, at the present stage zenoh-pico only supports client mode.
    kydos
    @kydos
    That said, you can run zenoh on anything that supports rust and its std library.
    halfbit
    @halfbit:matrix.org
    [m]
    the libzenohc at its smallest is about 4MB which I mean, considering it has in it rust std, async-std, rustls, and zenoh isn't all that bad
    equivalent C++ stack might be boost, asio, and openssl... which aren't that small (not including the zenoh bits)
    kydos
    @kydos
    Hello zenohers, @OlivierHecart posted a blog on the key mechanisms provided by zenoh for reliability and congestion control. Enjoy the reading.
    halfbit
    @halfbit:matrix.org
    [m]
    is it possible to split peers on the same host, such that maybe process (a,b,c) are in one set and process (x,y,z) are in another set?
    where a,b,c will discover eachother but not x,y,z and vice versa
    OlivierHecart
    @OlivierHecart
    Hi @halfbit:matrix.org, the simplest way to do that if you rely on multicast for discovery is to use a different multicast address and/or port for each group. You can set the multicast locator using config properties like this :
    use zenoh::net::*;
    let mut config = config::peer();
    config.insert(config::ZN_MULTICAST_ADDRESS_KEY, "224.0.0.224:7448".to_string());
    let session = open(config).await.unwrap();
    halfbit
    @halfbit:matrix.org
    [m]
    that makes sense
    Alexandre Santos
    @AlexandreVSantos_gitlab
    Hi guys! I am trying to implement zenoh protocol, or at least some of its features, using sdn technologies. Looking at the code from the github repo I could not understand how routing is done between routers, are any known protocols used, such as OSPF, BGP, etc? Or is it a custom shortest path algorithm used? If so, can someone highlight how it works?
    Thank you in advance
    OlivierHecart
    @OlivierHecart
    Hi @AlexandreVSantos_gitlab, a custom protocol is used between the routers (and between the peers) :
    • A custom linkstate protocol is used so that all routers share a same view of the routers network topology.
    • Then each router runs a bellman-ford algorithm internally from all nodes to build the shortest path tree from each node to any other node.
    • These trees are then used to propagate the subscriptions to all routers.
    • These trees are also used to propagate data to all nodes with a matching subscriber.
    Shan Desai
    @shantanoo-desai
    Hi all I cross-compiled Zenoh for aarch64 for a Pi4 (2GB) and I started the router ./zenohd and followed the steps in the documentation of setting up a local memory storage and tried putting hello world on the API. Upon querying the data I get [ ] although the paths are the same.
    never mind it works forgot the --mem-storage /demo/example/** parameter for zenohd
    Ashwin Sushil
    @ashwinsushil_gitlab
    image.png

    Unable to map ros2 pubisher/listner to Zenoh resources

    Setup

    • A docker container with
      • Zenoh-DDS-bridge installed
      • ROS2 foxy with CycloneDDS
      • Example publisher and subscriber (from ros2 examples)

    Problem/Issue

    • The zenoh bridge is startd with RUST_LOG=debug ./target/release/zenoh-bridge-dds -m peer
    • A ros2 publisher is started with ros2 run examples_rclcpp_minimal_publisher publisher_member_function
    • As shown in the demo here, the user should be able to see the log that the dds plugin has discovered the publisher but it is not happening (Please see the attached image)

    Additional information

    My CycloneDDS config is as following
    <?xml version="1.0" encoding="UTF-8"?>
    <CycloneDDS xmlns="https://cdds.io/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd">
        <Domain id="any">
            <Discovery>
                <ParticipantIndex>
                    auto
                </ParticipantIndex>
                <MaxAutoParticipantIndex>
                    30
                </MaxAutoParticipantIndex>
            </Discovery>
        </Domain>
    </CycloneDDS>
    6 replies
    Shan Desai
    @shantanoo-desai
    @JEnoch I am trying an initial Workflow for Docker Artefact Build and Publish on my Fork shantanoo-desai/zenoh#1 Fingers Cross
    15 replies
    halfbit
    @halfbit:matrix.org
    [m]
    Is there a simple way to cross compile zenoh-c? It seems to hang up on ring (I think its missing a TARGETCC env var?
    kydos
    @kydos
    Short answer is no. Longer answer is that we would have to do cross compile for both the rust portion and the C-portion.
    Shan Desai
    @shantanoo-desai
    image.png
    So finally after a lot of tries there is a good workflow that will help the zenoh team create Docker Artefacts not just for x86 but also for other platforms I just built zenoh for arm64 and if someone has a Raspberry Pi 4 with docker lying around please give docker run --init -p 7447:7447/tcp -p 7447:7447/udp -p 8000:8000/tcp shantanoodesai/zenoh a spin
    expploitt
    @expploitt
    Hello @shantanoo-desai , right now I don't have my RPi 4B on hand to test it. But tomorrow morning I will try it
    Julien Enoch
    @JEnoch
    And the build time is only 12min vs +5h with my initial attempt… Thanks a lot @shantanoo-desai !
    Shan Desai
    @shantanoo-desai
    I will deep dive into caching mechanisms so that we don't redundantly build a lot of stuff and consume resources. I have also found actions for binary artefacts which implies Binaries for zenoh as well as Docker images can be built effortlessly for all possible platforms amd64, arm64, i686, armv7 + armv6
    Shan Desai
    @shantanoo-desai
    Also with caching the build only takes 5 to 6 mins
    Kristofer
    @MrKristoferH_twitter
    Hi, wondering if there is any documented protocol specification available?, https://github.com/eclipse-zenoh/zenoh/blob/master/zenoh/src/net/protocol/proto/msg.rs gives some insight but not the whole picture.
    kydos
    @kydos
    Hello @MrKristoferH_twitter, we had a formal spec of the protocol for the very first version of zenoh, but that is not outdate. It is on our TODO list as it is a question that we receive very often. As we get there feel free to ask questions on the forum.
    Kristofer
    @MrKristoferH_twitter
    @kydos : Ok, thx
    Shan Desai
    @shantanoo-desai
    Hi all do you guys mind if I document the CI workflow I am working on and use zenoh in it. (for my blog and maybe on dev.to)? If there are objections I would avoid a write up
    Julien Enoch
    @JEnoch
    Hi @shantanoo-desai , no objection at all!
    kydos
    @kydos
    @shantanoo-desai , you are also welcome to contribute a blog to zenoh.io. Just do a pull request on https://github.com/atolab/zenoh-web
    Shan Desai
    @shantanoo-desai

    Hi all just a heads up. Docker Alpine image for zenoh (~45MB) builds well however is not able to run because I keep getting

    Error Relocating: /usr/local/bin/zenohd: __register_atfork: symbol not found
    Error Relocating: /usr/local/bin/zenohd: __res_init: symbol not found

    Does someone have an idea regarding this incompatibility with Alpine Docker containers?

    Something similar in the lines of This StackOverflow Thread
    Julien Enoch
    @JEnoch

    For Alpine I didn’t try to target x86_64-unknown-linux-gnu.
    But I managed to make it work targeting x86_64-unknown-linux-musl, defining RUSTFLAGS '-Ctarget-feature=-crt-static’ (to force dynamic link of the plugins/backends libs, as default is static with MUSL) and having the follwing in my ~/.cargo/config:

    [target.x86_64-unknown-linux-musl]
    linker = "x86_64-linux-musl-gcc"

    Also I’m running on MacOS with musl-cross installed.

    Shan Desai
    @shantanoo-desai

    Hmm I changed the build for aarch64-unknown-linux-musl target but I get

    error: cannot produce cdylib for `zenoh-plugin-storages v0.5.0-dev (/project/plugins/zenoh-plugin-storages)` as the target `aarch64-unknown-linux-musl` does not support these crate types

    Maybe I am drifting in the wrong direction

    Shan Desai
    @shantanoo-desai
    Since alpine and musl is creating a lot of hassle I reverted back aarch64-unknown-linux-gcc and changed the base container to debian-slim. Maybe this might atleast get things works for the Pi 4 (will try it out later)
    Shan Desai
    @shantanoo-desai

    Success on Debian-slim (rpi4) docker run --init -d -p 7447:7447/tcp -p 7447:7447/udp -p 8000:8000/tcp shantanoodesai/zenoh:latest for anyone willing to try. Please not there are changes to the docker image so I advice to run it in detached mode with -d. If you wish to give in-memory example a try

    docker run --init -d -p 7447:7447/tcp -p 7447:7447/udp -p 8000:8000/tcp shantanoodesai/zenoh:latest --mem-storage demo/example/**

    everything mentioned in the getting started page works

    Julien Enoch
    @JEnoch
    Thanks @shantanoo-desai !
    I just tested on my MacOS (x86 with arm64 emulation) and it run wells, even without the -d option.
    I just wonder why the zenohd binary is 59Mb while in the eclipse/zenoh image (alpine x86_64 based) it’s only 5.5Mb. Did you build in release mode ?
    32 replies
    Shan Desai
    @shantanoo-desai

    Yes. Also there are some things I am not sure still about a lot of things e.g. rust, zenoh, musl :( I am just on-boarding on things that I am aware of.

    We can change this once this thing actually goes official for eclipse/zenoh

    Shan Desai
    @shantanoo-desai
    things work well for me I tried querying from WSL2 on Window 10 x86_64 machine to the Pi on its IP address and I get a response on REST API (port 8000)