Giter Site home page Giter Site logo

eclipse-iceoryx / iceoryx2 Goto Github PK

View Code? Open in Web Editor NEW
346.0 10.0 17.0 1.56 MB

Eclipse iceoryx2™ - true zero-copy inter-process-communication in pure Rust

Home Page: https://iceoryx.io

License: Apache License 2.0

Rust 98.86% C 0.26% Shell 0.88%
eclipse iceoryx inter-process-communication ipc middleware publish-subscribe pubsub request-response rpc rust

iceoryx2's People

Contributors

eclipse-iceoryx-bot avatar elboberido avatar elfenpiff avatar hydroid7 avatar shock-1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iceoryx2's Issues

Document Error Handling Strategy

Brief feature description

The error handling strategy must be documented.

  • That we use enums as error codes
  • A strategy how internal error codes from a lower architectural level are translated into enum error codes of an higher architectural level
  • How std::error::Error and later (when it is in stable) core::error::Error is implemented for all error enums.

The issue shall be concluded with a markdown file explaining the above points and showing some code snippets to illustrate them.

Detailed information

From @elBoberido

I found another solution in the zstd crate. They use derive_more with a feature flag to derive Error only on std. This makes would allow no_std on stable but without the Error trait. Something to think of.

They basically did this

[dependencies]
derive_more = { version = "0.99", default-features = false, features = ["display", "from"] }

[features]
default = ["std"]
std = ["derive_more/error"]
#[derive(Debug, derive_more::Display, derive_more::From)]
#[cfg_attr(feature = "std", derive(derive_more::Error))]
#[non_exhaustive]
pub enum Foo {
    #[display(fmt = "Bar occurred. Is: {baz}, must be either 1 or 2")]
    Bar { baz: u8 },
    //...
}

The attributes on the enum tags are quite similar to thiserror so it wouldn't be too hard to switch between the two crates.

benchmark-publish subscripe panic

Bug report after analysis

bindgen-0.69.2 is unable to handle macro redefines, see: rust-lang/rust-bindgen#2722

The signal SIGSTOP and SIGCONT are redefined under ubuntu 20.04 in the included file bits/signum.h of signal.h. The redefinition turns SIGCONT into the unfetchable signal SIGSTOP which leads to a failure in the sigaction call.

The quick fix is to comment out the Continue signal in the abstraction, since it is also nowhere used. When the bindgen bug report is closed, we can revert the change and close the issue.

  1. comment out Continue signal in signal.rs
  2. comment in Continue signal after bindgen bugfix

Original bug report from @fengtuo58

This should never happen! Unable to register raw sional since sigaction was called with invalid parameters.
thread "
iceorvx2-bb/posix/src/signal.rs:516:13:
panicked at
rom: SignalHandler ( registered signals: 11 ) :.: This should never happen! Unable to register raw signal since sigaction was called with inve
lid parameters
note: run with RUST BACKTRACE=1' environment variable to display a backtrace
12 [F] SianalHandler f registered sianals: [7
This should never happen! nable to register raw sional since sigaction was called with invalid parameters
thread ' ' panicked at iceoryx2-bb/posix/src/sianal,rs:516:13:
rom: SianalHandler ! registered sianals: : This should never happen: Unable
to register raw signal since sigaction was called with inva
lid parameters .
stack backtrace:

Make multithreaded tests with asserts more robust

Brief feature description

From larry-robotics/elkodon#25 (comment)

========

@elfenpiff I found this https://stackoverflow.com/questions/35988775/how-can-i-cause-a-panic-on-a-thread-to-immediately-end-the-main-thread/36031130#36031130

The following code would terminate the whole test when an assert in a thread fails. It can also be placed in a function which could be called at the start of a test

let orig_hook = panic::take_hook();
panic::set_hook(Box::new(move |panic_info| {
    // invoke the default handler and exit the process
    orig_hook(panic_info);
    process::exit(1);
}));

========

miri integration

Brief feature description

To increase the code quality, fix potential undefined behavior and unravel race conditions and memory synchronization issues in lock-free code we need to integrate miri in our development workflow.

Todo

  • Create CI script that runs miri scans on all files based on an allowed list. In the beginning, the allowed list can be empty
  • Fix miri issues beginning from the lowest layer up to the highest one and add fixed files/components to the allowed list.

Cleanup tool/internal service for resources of crashed applications

Brief feature description

When an application crashes, it can happen that a service is only partially removed and becomes unusable.
An internal service and/or a command line application shall cleanup the remainders of such services.

The following use cases shall be considered:

  • remove static service info, when only the dynamic service info exists
  • remove dynamic service info, when only the static service info exists
  • remove the data segment of a publisher if the owning process no longer exists
  • remove the publisher/subscriber as participant from the dynamic service info when the owning process no longer exists.

documentation fixes

Brief

This issue takes care of small documentation fixes like typos or out-of-date examples/explanations.

docs.rs iceoryx2 build fails since libacl.h is missing

Required information

See build log: https://docs.rs/crate/iceoryx2/0.0.4/builds/1061128

In the default environment in docs.rs the libacl.h is not available and therefore the build fails. Either we need to install it, provide a stub implementation of the interface just for docs.rs or we deactivate all acl abstractions in docs.rs.

I would favor a solution where we make libacl.h somehow available, even when it is just a stub.

The first affected crate is iceoryx2_bb_posix and then every crate that depends on it.

Store ports and samples in container

Brief feature description

Currently, it is not possible to store any port type easily in a container like a Vec. This is due to the fact that the ports, even when they share the same data type, may have different lifetime requirements since they are originating from distinct services or from distinct service variations, like a zero_copy and a process_local publisher.

Detailed information

All ports shall be renamed to $NAME$Port and we introduce traits with the common interface of the port called $NAME. An example shall demonstrate how this can be used by the end user.

crosspile in arm

/code/rust-trail/iceoryx2$ cargo build
Compiling iceoryx2-pal-posix v0.1.1 (~/code/rust-trail/iceoryx2/iceoryx2-pal/posix)
error: failed to run custom build command for iceoryx2-pal-posix v0.1.1 (~/code/rust-trail/iceoryx2/iceoryx2-pal/posix)

Caused by:
process didn't exit successfully: ~/code/rust-trail/iceoryx2/target/debug/build/iceoryx2-pal-posix-187ccb108511064a/build-script-build (exit status: 101)
--- stdout
cargo:rustc-link-lib=pthread
cargo:rerun-if-changed=src/c/posix.h
cargo:rerun-if-env-changed=TARGET
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_arm-unknown-linux-gnueabi
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_arm_unknown_linux_gnueabi
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS

--- stderr
/usr/include/bits/socket.h:390:10: fatal error: 'asm/socket.h' file not found
thread 'main' panicked at iceoryx2-pal/posix/build.rs:45:18:
Unable to generate bindings: ClangDiagnostic("/usr/include/bits/socket.h:390:10: fatal error: 'asm/socket.h' file not found\n")
stack backtrace:
0: rust_begin_unwind
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:597:5
1: core::panicking::panic_fmt
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/panicking.rs:72:14
2: core::result::unwrap_failed
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/result.rs:1652:5
3: core::result::Result<T,E>::expect
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/result.rs:1034:23
4: build_script_build::main
at ./build.rs:41:13
5: core::ops::function::FnOnce::call_once
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with RUST_BACKTRACE=full for a verbose backtrace.

Remove `no_run` from as many documentation code example as possible

Brief feature description

If the example code is also run, we can ensure that the example is also functional working. Therefore, we should remove the no_run tag from as many documentation code examples as possible.

Comment from @elBoberido :

@elfenpiff there is also the option for ignore. Those could then be run on a single platform, just in case the reason for no_run is platform dependent code in the lower layers

Support for MacOS

Brief feature description

Finalize the implementation for mac os support

Circular dependency in `iceoryx2_bb_container`

Required information

The unit tests of iceoryx2_bb_container require the iceoryx2_bb_memory crate as dev-dependency for relocatable container tests. This dependency must be removed.

Rename `char` in platform to `c_char`

(Code) Example Of Cumbersome API

The type alias char in iceoryx2_pal/posix/src/$PLATFORM$/types.rs is mapped to core::ffi::c_char and not u8, this may lead to mixing it up with the rust primitive type char.

Improvement Suggestion

To have a clear distinction, the type alias in types.rs shall be renamed to c_char

Reduce rust version to the minimum required version

(Code) Example Of Cumbersome API

Currently, rust 1.72.1 is required, but a first check has shown that rust 1.70.0 should suffice.

Improvement Suggestion

Use only the absolute minimum rust version as requirement and add cargo msrv to verify in the CI that this minimum is correct.

Write docker example

(Code) Example Of Cumbersome API

iceoryx2 already runs between different docker instances and the host but we do not yet have an example. Create an example and document it.

Circular dependency in `iceoryx2_bb_elementary`

Required information

The RelocatableContainer trait comes also with a conformity test suite that is used by other traits which induces a circular dependency on dev level.
The iceoryx2_bb_container crate is affected as well.

This may be solved by adding another crate with the test suite which than can be used by the dev dependency of the elementary crate.

  • iceoryx2_bb_container & iceoryx2_bb_container_tests
  • iceoryx2_bb_elementary & iceoryx2_bb_elementary_tests

Another solution could be to combine the following crates into one.

  • iceoryx2_bb_container
  • iceoryx2_bb_elementary
  • iceoryx2_bb_memory
  • iceoryx2_bb_lock_free
  • iceoryx2_bb_system_types

Use Geoffrey to test rust code examples in markdown

(Code) Example Of Cumbersome API

Currently, it can happen that due to some API adjustments code examples in the markdown files are no longer running. The Geoffrey solves this problem.

Improvement Suggestion

Only provide code examples in combination with geoffrey in markdown files.

Windows `shm_unlink` return wrong `errno`

Required information

Operating system:

  • OS Windows 2019 Server

Rust version:
Output of: rustc 1.73

Cargo version:
Output of: cargo 1.73

elkodon version:
main branch

Observed result or behaviour:
In iceoryx2_pal/posix/src/windows/mman.rs the shm_unlink call uses DeleteFileA. When a file is opened and deleted with this call it successfully returns. If DeleteFileA is again called while the file is opened it will set the GetLastError to ERROR_ACCESS_DENIED instead of ERROR_FILE_NOT_FOUND, see: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-deletefilea

This causes all iceoryx2_cal tests to fail that are using shared memory. Whenever std::mem::forget is called in such a concept, the file descriptor is leaked and a subsequent second remove call will return permission denied instead of false.

The quick-fix Errno::set(Errno::ENOENT); in iceoryx2_pal/posix/src/windows/mman.rs (shm_unlink) shall be removed and the concept tests must be adjusted.

Create social media accounts and link them in the readme

Brief feature description

The ability to quickly communicate with the maintainers of iceoryx2 or to promote new features requires some kind of social media accounts. Explore what kind of mechanisms can be used and create an account.

  • gitter?
  • youtube channel?
  • discord
  • mastodon

Add std functionality to shm-comp `Vec`/`FixedSizeVec`

(Code) Example Of Cumbersome API

The iceoryx2_bb_container::FixedSizeVec does not implement Copy & Clone. Also, other traits the std version offers are missing. Add these features to be able to use these shm comp versions in most of the use cases one can use the std::Vec.

`MessagingPattern` shall implement `Display`

(Code) Example Of Cumbersome API

If the user wants to print out the messaging pattern of the current service only the long debug output is available.

Improvement Suggestion

This shall work:

println!("my service type {}", service.messaging_pattern());

Same default config file for every platform.

(Code) Example Of Cumbersome API

Currently, the default config file for windows is named config_win.toml to handle the windows path style. The unix variant is named config.toml.

Both should be named config.toml but the problem is, how to deliver two different default config files one for windows and one for the rest of the systems.

async `future` support for every entity waiting on events

Brief feature description

A user may want to receive a sample from a subscriber packed into a future, so that they can consume the sample whenever it is ready. The usage could look like:

    let future_sample = subscriber.async_receive();
    // do stuff here
    println!("received {:?}", sample.await);

Other constructs that are maybe interesting are:

  • service discovery - wait until a thing is there or gone
  • events - wait for an incoming event
  • publisher & listeners - wait for participants

Overflow behavior shall be a property of the subscriber port, not the service

Brief feature description

Currently, the enable_safe_overflow behavior is part of the service but it should be actually a subscriber property for its buffer behavior.

Comment from @elBoberido :

I think it is not only a property of the subscriber but also the publisher. If it is only the subscriber one could easily create a denial of service. The publisher also has to opt in for the blocking.

Versioning of all IPC capable `iceoryx2_cal` constructs

Problem

When two iceoryx2_cal constructs interact with each other, we need to add some initial versioning information to ensure that not to incompatible versions of the same constructs are interacting. This could lead to undefined behavior and hard to unravel bugs.

They could be, for instance incompatible since the member order of shared management constructs has changed or members have been added/removed. Or the internal communication protocol was updated.

Solution

Introduce a const SHM_API_VERSION: u64 constant inside iceoryx2_cal, that must be checked before any of these constructs start to interact on an ipc level.
Constructs that use shared memory could add this constant to the beginning, as the first value, to their shared memory. If the construct does not use shared memory, one could create a file and store the number value is binary, or human-readable value, in there.

Static config uses suffix of dynamic config

Required information

When listing the static service config files in /tmp/iceoryx2/services/ one sees that all service files have the file suffix .dynamic from the dynamic service config but it should be .service.

Check memory order of thread fence in `mpmc/unique_index_set.rs`

Required information

In iceoryx1 the loffli (template for the unique index set) has an ?issue? with the memory ordering of the atomic thread fences at the end of the push and pop method.

Check if the unique index set has the same issue and ensure that the memory order really fits.

Service with the same name, but different messaging pattern shall be allowed.

Brief feature description

Currently, when creating/opening a service with an existing name but a different messaging pattern one receives the failure that it either exists or that the messaging pattern does not match.

It would be better if this would be allowed and that a service is uniquely identified by the messaging pattern and the name.

Detailed information

Should be easily implementable, just hash the messaging pattern as well to acquire the services uuid.

Add `from_bytes_truncated` to `FixedSizeByteString`

(Code) Example Of Cumbersome API

When a fixed size byte string shall be created from a String it would be handy if a truncated version can be stored if the whole string does not fit - otherwise one has to write the complex code all over the place in positions where it does not belong.

Improvement Suggestion

Add from_bytes_truncated

publish_subscribe example panics on MacOS

Required information

Operating system:

  • MacOS 12.7.1

Rust version:

  • rustc 1.75.0 (82e1608df 2023-12-21)

Cargo version:

  • cargo 1.75.0 (1d8b05cdd 2023-11-20)

iceoryx2 version:

Observed result or behaviour:
Run cargo run --release --example publish_subscribe_subscriber in the root project directory, and I receive a panic:

brian iceoryx2 $ cargo run --release --example publish_subscribe_subscriber
    Finished release [optimized] target(s) in 0.11s
     Running `target/release/examples/publish_subscribe_subscriber`
        0 [T] FileBuilder { file_path: FilePath { value: FixedSizeByteString<4096> { len: 20,
               data: "config/iceoryx2.toml" } }, access_mode: Read, permission: OWNER_READ | 
              OWNER_WRITE | OWNER_EXEC | OWNER_ALL, owner: None, group: None, truncate_size: 
              None, creation_mode: None }
              | opened
        1 [T] Config { global: Global { root_path: "/tmp/iceoryx2/", prefix: "iox2_", service
              : Service { directory: "services", publisher_data_segment_suffix: ".publisher_d
              ata", static_config_storage_suffix: ".service", dynamic_config_storage_suffix: 
              ".dynamic", creation_timeout: 500ms, connection_suffix: ".connection" } }, defa
              ults: Defaults { publish_subscribe: PublishSubscribe { max_subscribers: 8, max_
              publishers: 2, subscriber_max_buffer_size: 2, subscriber_max_borrowed_samples: 
              2, publisher_max_loaned_samples: 2, publisher_history_size: 1, enable_safe_over
              flow: true, unable_to_deliver_strategy: Block }, event: Event { max_listeners: 
              2, max_notifiers: 16 } } }
              | Loaded.
        2 [T] Config { global: Global { root_path: "/tmp/iceoryx2/", prefix: "iox2_", service
              : Service { directory: "services", publisher_data_segment_suffix: ".publisher_d
              ata", static_config_storage_suffix: ".service", dynamic_config_storage_suffix: 
              ".dynamic", creation_timeout: 500ms, connection_suffix: ".connection" } }, defa
              ults: Defaults { publish_subscribe: PublishSubscribe { max_subscribers: 8, max_
              publishers: 2, subscriber_max_buffer_size: 2, subscriber_max_borrowed_samples: 
              2, publisher_max_loaned_samples: 2, publisher_history_size: 1, enable_safe_over
              flow: true, unable_to_deliver_strategy: Block }, event: Event { max_listeners: 
              2, max_notifiers: 16 } } }
              | Set as global config.
        3 [T] FileBuilder { file_path: FilePath { value: FixedSizeByteString<4096> { len: 76,
               data: "/tmp/iceoryx2/services/iox2_b61bd15e8c3ea16146985e960906a8e125156a73.se
              rvice" } }, access_mode: Read, permission: OWNER_READ | OWNER_WRITE | OWNER_EXE
              C | OWNER_ALL, owner: None, group: None, truncate_size: None, creation_mode: No
              ne }
              | opened
        4 [T] FileBuilder { file_path: FilePath { value: FixedSizeByteString<4096> { len: 76,
               data: "/tmp/iceoryx2/services/iox2_b61bd15e8c3ea16146985e960906a8e125156a73.se
              rvice" } }, access_mode: Read, permission: OWNER_READ | OWNER_WRITE | OWNER_EXE
              C | OWNER_ALL, owner: None, group: None, truncate_size: None, creation_mode: No
              ne }
              | opened
        5 [T] FileBuilder { file_path: FilePath { value: FixedSizeByteString<4096> { len: 76,
               data: "/tmp/iceoryx2/services/iox2_b61bd15e8c3ea16146985e960906a8e125156a73.se
              rvice" } }, access_mode: Read, permission: OWNER_READ | OWNER_WRITE | OWNER_EXE
              C | OWNER_ALL, owner: None, group: None, truncate_size: None, creation_mode: No
              ne }
              | opened
        6 [T] FileBuilder { file_path: FilePath { value: FixedSizeByteString<4096> { len: 76,
               data: "/tmp/iceoryx2/services/iox2_b61bd15e8c3ea16146985e960906a8e125156a73.se
              rvice" } }, access_mode: Read, permission: OWNER_READ | OWNER_WRITE | OWNER_EXE
              C | OWNER_ALL, owner: None, group: None, truncate_size: None, creation_mode: No
              ne }
              | opened
        7 [T] SharedMemory { name: FileName { value: FixedSizeByteString<255> { len: 53, data
              : "iox2_b61bd15e8c3ea16146985e960906a8e125156a73.dynamic" } }, size: 16384, bas
              e_address: 0x100cdc000, has_ownership: false, file_descriptor: FileDescriptor {
               value: 5, is_owned: true }, memory_lock: None }
              | open
        8 [T] ServiceState { static_config: StaticConfig { uuid: "b61bd15e8c3ea16146985e96090
              6a8e125156a73", service_name: ServiceName { value: FixedSizeByteString<255> { l
              en: 19, data: "My/Funk/ServiceName" } }, messaging_pattern: PublishSubscribe(St
              aticConfig { max_subscribers: 8, max_publishers: 2, history_size: 1, subscriber
              _max_buffer_size: 2, subscriber_max_borrowed_samples: 2, enable_safe_overflow: 
              true, type_name: "transmission_data::TransmissionData" }) }, global_config: Con
              fig { global: Global { root_path: "/tmp/iceoryx2/", prefix: "iox2_", service: S
              ervice { directory: "services", publisher_data_segment_suffix: ".publisher_data
              ", static_config_storage_suffix: ".service", dynamic_config_storage_suffix: ".d
              ynamic", creation_timeout: 500ms, connection_suffix: ".connection" } }, default
              s: Defaults { publish_subscribe: PublishSubscribe { max_subscribers: 8, max_pub
              lishers: 2, subscriber_max_buffer_size: 2, subscriber_max_borrowed_samples: 2, 
              publisher_max_loaned_samples: 2, publisher_history_size: 1, enable_safe_overflo
              w: true, unable_to_deliver_strategy: Block }, event: Event { max_listeners: 2, 
              max_notifiers: 16 } } }, dynamic_storage: Storage { shm: SharedMemory { name: F
              ileName { value: FixedSizeByteString<255> { len: 53, data: "iox2_b61bd15e8c3ea1
              6146985e960906a8e125156a73.dynamic" } }, size: 16384, base_address: 0x100cdc000
              , has_ownership: false, file_descriptor: FileDescriptor { value: 5, is_owned: t
              rue }, memory_lock: None }, name: FileName { value: FixedSizeByteString<255> { 
              len: 40, data: "b61bd15e8c3ea16146985e960906a8e125156a73" } }, _phantom_data: P
              hantomData<iceoryx2::service::dynamic_config::DynamicConfig> }, static_storage:
               Storage { name: FileName { value: FixedSizeByteString<255> { len: 40, data: "b
              61bd15e8c3ea16146985e960906a8e125156a73" } }, config: Configuration { path: Pat
              h { value: FixedSizeByteString<4096> { len: 22, data: "/tmp/iceoryx2/services" 
              } }, suffix: FileName { value: FixedSizeByteString<255> { len: 8, data: ".servi
              ce" } }, prefix: FileName { value: FixedSizeByteString<255> { len: 5, data: "io
              x2_" } } }, has_ownership: false, file: File { path: Some(FilePath { value: Fix
              edSizeByteString<4096> { len: 76, data: "/tmp/iceoryx2/services/iox2_b61bd15e8c
              3ea16146985e960906a8e125156a73.service" } }), file_descriptor: FileDescriptor {
               value: 4, is_owned: true } }, len: 348 } }
              | open service
        9 [D] SharedMemoryBuilder { name: FileName { value: FixedSizeByteString<255> { len: 8
              1, data: "iox2_20123953278630464882616037414168_3866334330696831988048375888828
              0.connection" } }, size: 190, is_memory_locked: false, has_ownership: true, per
              mission: OWNER_READ | OWNER_WRITE | OWNER_EXEC | OWNER_ALL, creation_mode: Some
              (OpenOrCreate), zero_memory: true, access_mode: ReadWrite, enforce_base_address
              : None }
              | Unable to open shared memory since the shared memory does not exist.
       10 [T] SharedMemory { name: FileName { value: FixedSizeByteString<255> { len: 81, data
              : "iox2_20123953278630464882616037414168_38663343306968319880483758888280.conne
              ction" } }, size: 16384, base_address: 0x100ce0000, has_ownership: true, file_d
              escriptor: FileDescriptor { value: 3, is_owned: true }, memory_lock: None }
              | create
       11 [T] SharedMemory { name: FileName { value: FixedSizeByteString<255> { len: 56, data
              : "iox2_254_20123953278630464882616037414168.publisher_data" } }, size: 16384, 
              base_address: 0x100ce4000, has_ownership: false, file_descriptor: FileDescripto
              r { value: 6, is_owned: true }, memory_lock: None }
              | open
       12 [D] "nanosleep_with_clock"
              | Invalid argument in "nanosleep". Either the duration: 1s is out of range or t
              | he clock type Realtime is invalid.
       13 [F] Iox2
              | Failed to wait with cycle time 1s in main event look, caused by (DurationOutO
              | fRange).
thread 'main' panicked at iceoryx2/src/iox2.rs:96:17:
From: Iox2 ::: Failed to wait with cycle time 1s in main event look, caused by (DurationOutOfRange).
stack backtrace:
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
zsh: abort      cargo run --release --example publish_subscribe_subscriber

Expected result or behaviour:
Expected to see the subscriber start and receive a message (assuming I run the publisher example as well)

Conditions where it occurred / Performed steps:
Happens on every run of the publish_subscribe example.

Subscriber shall be able to reduce its buffer size

Brief feature description

A pub-sub service has the ability to define a max buffer size for a subscriber but the subscriber is unable to reduce its buffer size - every subscriber has the same buffer size.

So we need to introduce a setting in the subscriber port factory to set a custom buffer size.

Fix acl string conversion on `aarch64`

Required information

Operating system:

  • OS Ubuntu 22.04 LTS aarch64

Rust version:
Output of: rustc 1.73.0

Cargo version:
Output of: cargo 1.73.0

elkodon version:
main branch

Observed result or behaviour:
The test access_control_list_string_conversion_works fails.

Expected result or behaviour:
The test access_control_list_string_conversion_works passes.

Publish-Subscribe Benchmark between two processes

Brief feature description

Currently, the publish-subscribe benchmark is working in one process between two threads. The benchmark shall be extended so that it can also run between two distinct processes.

Open Source Preparations

Technical Debt

  • Write unit tests for event messaging pattern
  • remove src/bin/* and old rust_experiments
  • namespace/prefix for config files e.g. /tmp/elkodon
  • replace all iceoryx´ strings with elkodon`
  • follow XDG spec
  • remove platform suffix in pal/settings
  • check where &[u8] can be replaced with &str
  • tests for discovery
  • remove elkodon_bb_posix::SignalHandler from public API and examples, introduce eventloop::wait() instead (maybe with better name)
  • final API review before the release in case there are still some quirks left
    • no get_ prefix for getter but a set_ prefix for setter

Cargo.toml

  • add version inheritance from root workspace
  • Add the following entries:
  • every package inherits from main workspace and does not add new dependencies
[workspace.package]
version = ""
repository = ""
homepage = ""
authors = []
edition = "2021"
license = ""
categories = ["ipx"]
description = "elkodon: zero copy ipc"

Changelog

  • introduce CHANGELOG.md
  • evaluate CI check that every pull request comes with a changelog update

Contributions and Conventions

Write contribution md with the content:

  • name conventions for release branch, tags
  • branch protection for release branches
  • Introduce CONTRIBUTORS.md
  • Add pull request template
  • Add issue and bug issue template
  • elkodon vs Elkodon

Licensing & File Header

  • Introduce script to check and modify license header
  • Use only spdx license code as header

Documentation

  • README.md that contains supported platforms, example, overview
  • ROADMAP.md
    • add waitset and quality of life improvements
  • CONTRIBUTIONS.md
  • documentation for every example
  • document whole elkodon crate
  • Add badges for CI, Code Coverage, Documentation state, gitter, discord, license, https://linktr.ee/, create Reddit iceoryx room
  • Add github labels

CI Checks

  • commit message style elk-##ISSUE_NUMBER##-##BRANCH_NAME##
  • every commit is signed
  • that linked issue exists
  • one approval required
  • Documentation contains no warnings
  • add ci check that new crate dependencies are only added in the root Cargo.toml and the subcrates inherit from it

CI Platform checks

  • Linux x86_64 (archlinux)
  • Linux x86_64 (ubuntu-latest)
  • Linux aarch64 (archlinux)
  • Linux aarch64 (ubuntu-latest)
  • Linux x86_64 (rust-nightly)
  • FreeBSD
  • Windows
  • Mac OS

Permanent Issues

  • CI updates
  • Documentation fixes

Initial introspection GUI web-app

Brief feature description

Listed on the road map is the desire to create a web app GUI that spins up basic webserver and allows the user to introspect an iceoryx2 system.

Introspection information expected to be displayed would be:

  1. Active iceoryx2 participants
    1. basic info for each participant like name, up-time, memory usage, etc. (maybe @elfenpiff can list some more requirements here)

A good place to start would be to look at what exists for iceoryx and re-implement it here.

Looking at egui as the basic lib, using eframe as a starting point.

Detailed information

The features of the introspection GUI will be dependent on availability of introspection API's to list required info. We should link other related issues here that relate to creating / enabling introspection APIs so that once they are available the features can be added to the GUI.

Subscriber never receives sample when publisher shuts down

Required information

When a publisher sends a sample and goes out of scope right after sending, the subscriber will update its 1-to-1 connection due to the change in the dynamic service information and will never receive the last delivered sample.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.