Fastest RPC in the west

Overview

smf - the fastest RPC in the West Travis-ci Build Status

We're looking for a new maintainer for the SMF project. As I have little time to keep up with issues. Please let me know by filing an issue.

smf is pronounced /smɝf/

Site Link
Mailing List https://groups.google.com/forum/#!forum/smf-dev
Documentation https://smfrpc.github.io/smf/

Official Documentation

Please visit our official documentation, it'll get you up and running in no time!

If you are using smf, drop us a line on the mailing list introducing your project.

What is smf?

smf is a new RPC system and code generation like gRPC, Cap n Proto, Apache Thrift, etc, but designed for microsecond tail latency*.

Current benchmarks in microseconds (e2e see docs)

60 byte payload latency
p50 7us
p90 8us
p99 8us
p9999 15us
p100 26us

Getting started

Please see our quick getting started on our official docs!

Comments
  • Go support for smf_gen

    Go support for smf_gen

    I just started go-smf implementation. Go is missing flatbuffers parser so now I was thinking about using smf_gen to do that, do you have any thoughts?

    enhancement help wanted design 
    opened by crackcomm 61
  • wip/dnm: cmake and git submodule support

    wip/dnm: cmake and git submodule support

    this is a wip pr for review. the primary goal of this patch is to support cmake builds with git submodules to enable smf to work well in c++/cmake project workflows. it also includes some clean-up of existing cmake files.

    this patch set can test builds and unit tests on {sid,stretch,buster,artful,zesty,fc25,fc26,fc27} x {makefiles, ninja} x {gcc, clang}. it's been tested with everything except clang since Seastar is having some issues there. you can run all of these configurations with:

    git submodule update --init --recursive
    ci/local.sh
    

    it'd be great to get some early feedback, and testing with existing workflows.

    dependencies

    the deps that were handled by ansible roles are now included as sub-modules and built with cmake, provided that support isn't already available in the a target distribution. this includes zstd, xxhash, flat buffers, google test, HDR histogram, and fast range.

    several of the deps handled by ansible did not seem to be used (e.g. roaring bitmaps, afl, pmem, etc...), so those can be added back later, or in case I missed something or they are used in separate workflows.

    I didn't run into any issues with versions of boost, so there is no special handling there.

    questions/remaining

    1. some ansible deps like cpplint aren't setup yet. it isn't strictly needed for the build, so that can added that back in, or maybe just use ansible to do the release builds when cpplint can be applied?

    2. the biggest thing left to do is get the cmake branch merged upstream in Seastar. Currently this PR points to some patches on top of a cmake branch maintained by a scylla developer. I suspect it won't be too long before that get merged.

    3. packaging. I didn't do anything with cpack. is that something that is currently in use? I'm not very familiar with cpack, but it seemed to still produce src packages. adding explicit rpm/deb packaging isn't too hard, but maybe out of scope at the moment.

    that's all I can think of right now.

    update 1 (done)

    • all of the build configurations can be run in parallel on semaphore ci, I presume. I do this with another project and its been incredibly helpful at catching early issues (https://github.com/noahdesu/zlog/blob/master/.travis.yml#L23). I don't have any experience setting up semaphore ci.

    update 2 (done)

    • the sanitizer stuff is missing

    update 3 (done)

    make sure that release/package/etc.. script are working on the new build

    update 4 (done)

    .common_build.sh can be deleted i think. just gets the nprocs

    opened by dotnwat 56
  • RPC - xor map lookup test

    RPC - xor map lookup test

    There are 2 main places in the hotpath that are lookup heavy.

    1. Method dispatch of the RPC framework.
    2. in the WAL path we do lookup of topic,partition tuples for every write.

    We need to make sure that those 2 paths are optimized.

    currently we use unordered_map.

    However other map datastructures are designed for lookups! - We do not do a lot of insertions - so it's ok if they are slow. However, the lookups have to be exceedingly fast.

    https://github.com/skarupke/flat_hash_map/blob/master/flat_hash_map.hpp

    I'm not convinced that if we stored the RPC methods in a std::vector + for loop it wouldn't be faster for example.

    This is blocked by the microbenchmark framework - i need to add the stuff for google-benchmark next.

    enhancement help wanted 
    opened by emaxerrno 31
  • proposal: keep public headers in common include/smf directory

    proposal: keep public headers in common include/smf directory

    Compiling the demo apps outside the smf tree, using smf as a git sub-module. This seems to work well, but the include paths are a little weird.

    For example, the app wants to include histogram stuff:

    #include "histogram/histogram_seastar_utils.h"

    but for this path to work we'd need to add the entire smf/src directory to the list of includes of the including project. alternatively, one can do:

    smf/src/include/smf/{histogram, rpc, etc...}
    

    and in the including project simply do include_directories(smf/src/include) then

    #include <smf/histogram_seastar_utils.h>

    etc...

    there are other schemes, too...

    enhancement help wanted good first issue design 
    opened by dotnwat 27
  • Use SMF as a library to send/receive data within a conventional application

    Use SMF as a library to send/receive data within a conventional application

    Hello, I have been surveying using Seastar to build a network stack for an application. However, I find out that this usually requires completely rewriting the application to adopt the seastar. When I look at the SMF, I am wondering if this RPC library can be used as a communication library within a conventional application?

    question 
    opened by luomai 20
  • DNM: cmake ng

    DNM: cmake ng

    this PR is for identifying any major issues before polishing it further. it is effectively the cooking approach without the cooking infrastructure. it works pretty well. not all dependencies have been ported over, but most. i happened to have everything on fc29 NOTE: this isn't yet integrated into the build.sh script etc....

    Usage

    cmake .
    make
    

    Current status

    [[email protected] smf-ng2]$ nice -n 19 ctest
    Test project /home/nwatkins/src/smf-ng2
          Start  1: smf_checksum_benchmark_test
     1/11 Test  #1: smf_checksum_benchmark_test ......................   Passed    7.66 sec
          Start  2: smf_fbsalloc_benchmark_test
     2/11 Test  #2: smf_fbsalloc_benchmark_test ......................   Passed   45.59 sec
          Start  3: smf_histograms_integration_test
     3/11 Test  #3: smf_histograms_integration_test ..................   Passed    0.18 sec
          Start  4: smf_rpc_integration_test
     4/11 Test  #4: smf_rpc_integration_test .........................***Failed    4.60 sec
          Start  5: smf_rpc_recv_timeout_integration_test
     5/11 Test  #5: smf_rpc_recv_timeout_integration_test ............   Passed    0.24 sec
          Start  6: smf_rpc_multiple_remote_addrs_integration_test
     6/11 Test  #6: smf_rpc_multiple_remote_addrs_integration_test ...   Passed    0.19 sec
          Start  7: smf_rpc_backpressure_integration_test
     7/11 Test  #7: smf_rpc_backpressure_integration_test ............***Failed   12.88 sec
          Start  8: smf_rpc_send_client_timeout_integration_test
     8/11 Test  #8: smf_rpc_send_client_timeout_integration_test .....***Failed   32.02 sec
          Start  9: smf_rpc_bad_msg_t_integration_test
     9/11 Test  #9: smf_rpc_bad_msg_t_integration_test ...............   Passed    0.08 sec
          Start 10: smf_randomstr_unit_test
    10/11 Test #10: smf_randomstr_unit_test ..........................   Passed    0.08 sec
          Start 11: smf_simple_hist_unit_test
    11/11 Test #11: smf_simple_hist_unit_test ........................   Passed    0.07 sec
    
    73% tests passed, 3 tests failed out of 11
    
    opened by dotnwat 15
  • cmake help! - update w/ latest seastar cmake

    cmake help! - update w/ latest seastar cmake

    #contributors/help w/ cmake pls!

    Seastar added a complicated cmake set up here:

    https://github.com/scylladb/seastar/commit/c79e9dec76186f76d1a2e48187e3073449a60bfe

    I found cmake-cooking.sh hard to understand.

    I think it does:

    ExternalProjectAdd and given how cmake build systems are I'm sure it's doing the right thing under the covers.

    It uses (i think standard ML) to generate a bash script. This bash script contains a giant string. The string is a cmake macro This cmake macro builds & passes through arguments for ExternalProjectAdd It build them and tells cmake to add it. It builds them w/ default options (we want to change some options to make them as static a build as possible)

    I'm not sure if cmake-cooking.sh is a good fit for this project to use.

    Ideally we should strive to have as a static of a compilation as we can it gives the compiler much more room for optimizing function calls etc.

    We already have a git submodules for some dependencies and some apt-get or dnf-install dependencies. The mix is less than ideal. We should do one consistently. I vote for explicitly declaring all our deps. Testing against a known set and supporting that.

    I like jessies idea of a recipe but as the main way of building this project.

    We can say we tested against a known set of dependencies. Harder to find ABI crashes and try to debug other issues in practice. Except of course for openssl / gnutls (makes making security updates easier)

    Jessie already did a lot of hardwork here: https://github.com/scylladb/seastar/blob/master/recipe/dev.cmake

    We can try to make that our main dependency file. But of course it requires cmake-cooking.sh macro. A potential route is we render it and just save it to a cooking.cmake and use it as is for the first pass.

    The ideal scenario would be for all our deps to be an ExternalProjectAdd type of defs.

    Alternative designs are welcomed.

    enhancement help wanted good first issue design 
    opened by emaxerrno 14
  • use cmake ExternalProject_Add

    use cmake ExternalProject_Add

    Currently, it is really hard to exclude targets and to set versions, etc on the cmake build

    https://cmake.org/cmake/help/v3.0/module/ExternalProject.html

    Effectively, it prints a bunch of warnings from different projects, it runs tests and the downside is that only mature projects have guards against them via a simple -DCMAKE_<PROJ_SPECIFIC_OPT>=OFF

    which means a bunch of custom logic for them. (non pkgfind'd things)

    
    Test project /home/agallego/workspace/smf/build_debug
        Start 1: Histogram
    1/7 Test #1: Histogram ...............................   Passed    0.05 sec
        Start 2: HistogramLogging
    2/7 Test #2: HistogramLogging ........................   Passed    0.03 sec
        Start 3: HistogramAtomic
    3/7 Test #3: HistogramAtomic .........................   Passed    0.00 sec
        Start 4: flattests
    4/7 Test #4: flattests ...............................   Passed    0.04 sec
        Start 5: smf_histograms_integration_test
    5/7 Test #5: smf_histograms_integration_test .........   Passed    0.20 sec
        Start 6: smf_rpc_integration_test
    6/7 Test #6: smf_rpc_integration_test ................   Passed    0.25 sec
        Start 7: smf_rpc_recv_timeout_integration_test
    7/7 Test #7: smf_rpc_recv_timeout_integration_test ...   Passed    0.20 sec
    
    100% tests passed, 0 tests failed out of 7
    
    
    enhancement help wanted good first issue 
    opened by emaxerrno 13
  • [DNM] seastar cmake ng

    [DNM] seastar cmake ng

    builds OK, please test before merging :)

    also, it does seem that the blessed way of using seastar as a dependency in an application is for the application to adopt the cmake-cooking way of things, and use seastar as an "ingredient". that integration looks pretty nice as you can control the build (e.g. turn of tests etc...). so maybe that is a good next step, but will just need to be investigated. perhaps if this works we merge and create a ticket for investigating the cooking show version.

    opened by dotnwat 12
  • Docker test image

    Docker test image

    Maybe we could build and deploy an image in CI with entire built smf but mainly

    1. demo_apps - client and server for testing with Go (and later node.js) implementation I am currently working on
    2. smf_gen - can be useful for someone
    3. load_gen - not sure what toolchain do you use to graph latencies but it would be useful to have it too :+1:

    This all would be mainly useful for CI testing and this image could be built as the test.

    I can submit a pull request just tell me your requirements, OS etc. (Ubuntu 16.04?)

    enhancement help wanted good first issue design 
    opened by crackcomm 12
  • rpc_generated and CMAKE_BUILD_TYPE

    rpc_generated and CMAKE_BUILD_TYPE

    I recently noticed that on release builds the rpc_generated.h file is produced using 64-bit types here:

    https://github.com/smfrpc/smf/blob/master/src/include/smf/rpc_generated.h#L630

    And with a debug build the same is produced with a 32-bit type. Oddly, it looks like 64-bit is hardcoded in the flatbuffers idl generator.

    I'm wondering if anyone has seen this before I go looking deeper.

    opened by dotnwat 11
  • build(deps): bump nokogiri from 1.12.5 to 1.13.9 in /docs

    build(deps): bump nokogiri from 1.12.5 to 1.13.9 in /docs

    Bumps nokogiri from 1.12.5 to 1.13.9.

    Release notes

    Sourced from nokogiri's releases.

    1.13.9 / 2022-10-18

    Security

    Dependencies

    • [CRuby] Vendored libxml2 is updated to v2.10.3 from v2.9.14.
    • [CRuby] Vendored libxslt is updated to v1.1.37 from v1.1.35.
    • [CRuby] Vendored zlib is updated from 1.2.12 to 1.2.13. (See LICENSE-DEPENDENCIES.md for details on which packages redistribute this library.)

    Fixed

    • [CRuby] Nokogiri::XML::Namespace objects, when compacted, update their internal struct's reference to the Ruby object wrapper. Previously, with GC compaction enabled, a segmentation fault was possible after compaction was triggered. [#2658] (Thanks, @​eightbitraptor and @​peterzhu2118!)
    • [CRuby] Document#remove_namespaces! now defers freeing the underlying xmlNs struct until the Document is GCed. Previously, maintaining a reference to a Namespace object that was removed in this way could lead to a segfault. [#2658]

    sha256 checksums:

    9b69829561d30c4461ea803baeaf3460e8b145cff7a26ce397119577a4083a02  nokogiri-1.13.9-aarch64-linux.gem
    e76ebb4b7b2e02c72b2d1541289f8b0679fb5984867cf199d89b8ef485764956  nokogiri-1.13.9-arm64-darwin.gem
    15bae7d08bddeaa898d8e3f558723300137c26a2dc2632a1f89c8574c4467165  nokogiri-1.13.9-java.gem
    f6a1dbc7229184357f3129503530af73cc59ceba4932c700a458a561edbe04b9  nokogiri-1.13.9-x64-mingw-ucrt.gem
    36d935d799baa4dc488024f71881ff0bc8b172cecdfc54781169c40ec02cbdb3  nokogiri-1.13.9-x64-mingw32.gem
    ebaf82aa9a11b8fafb67873d19ee48efb565040f04c898cdce8ca0cd53ff1a12  nokogiri-1.13.9-x86-linux.gem
    11789a2a11b28bc028ee111f23311461104d8c4468d5b901ab7536b282504154  nokogiri-1.13.9-x86-mingw32.gem
    01830e1646803ff91c0fe94bc768ff40082c6de8cfa563dafd01b3f7d5f9d795  nokogiri-1.13.9-x86_64-darwin.gem
    8e93b8adec22958013799c8690d81c2cdf8a90b6f6e8150ab22e11895844d781  nokogiri-1.13.9-x86_64-linux.gem
    96f37c1baf0234d3ae54c2c89aef7220d4a8a1b03d2675ff7723565b0a095531  nokogiri-1.13.9.gem
    

    1.13.8 / 2022-07-23

    Deprecated

    • XML::Reader#attribute_nodes is deprecated due to incompatibility between libxml2's xmlReader memory semantics and Ruby's garbage collector. Although this method continues to exist for backwards compatibility, it is unsafe to call and may segfault. This method will be removed in a future version of Nokogiri, and callers should use #attribute_hash instead. [#2598]

    Improvements

    • XML::Reader#attribute_hash is a new method to safely retrieve the attributes of a node from XML::Reader. [#2598, #2599]

    Fixed

    ... (truncated)

    Changelog

    Sourced from nokogiri's changelog.

    1.13.9 / 2022-10-18

    Security

    Dependencies

    • [CRuby] Vendored libxml2 is updated to v2.10.3 from v2.9.14.
    • [CRuby] Vendored libxslt is updated to v1.1.37 from v1.1.35.
    • [CRuby] Vendored zlib is updated from 1.2.12 to 1.2.13. (See LICENSE-DEPENDENCIES.md for details on which packages redistribute this library.)

    Fixed

    • [CRuby] Nokogiri::XML::Namespace objects, when compacted, update their internal struct's reference to the Ruby object wrapper. Previously, with GC compaction enabled, a segmentation fault was possible after compaction was triggered. [#2658] (Thanks, @​eightbitraptor and @​peterzhu2118!)
    • [CRuby] Document#remove_namespaces! now defers freeing the underlying xmlNs struct until the Document is GCed. Previously, maintaining a reference to a Namespace object that was removed in this way could lead to a segfault. [#2658]

    1.13.8 / 2022-07-23

    Deprecated

    • XML::Reader#attribute_nodes is deprecated due to incompatibility between libxml2's xmlReader memory semantics and Ruby's garbage collector. Although this method continues to exist for backwards compatibility, it is unsafe to call and may segfault. This method will be removed in a future version of Nokogiri, and callers should use #attribute_hash instead. [#2598]

    Improvements

    • XML::Reader#attribute_hash is a new method to safely retrieve the attributes of a node from XML::Reader. [#2598, #2599]

    Fixed

    • [CRuby] Calling XML::Reader#attributes is now safe to call. In Nokogiri <= 1.13.7 this method may segfault. [#2598, #2599]

    1.13.7 / 2022-07-12

    Fixed

    XML::Node objects, when compacted, update their internal struct's reference to the Ruby object wrapper. Previously, with GC compaction enabled, a segmentation fault was possible after compaction was triggered. [#2578] (Thanks, @​eightbitraptor!)

    1.13.6 / 2022-05-08

    Security

    • [CRuby] Address CVE-2022-29181, improper handling of unexpected data types, related to untrusted inputs to the SAX parsers. See GHSA-xh29-r2w5-wx8m for more information.

    ... (truncated)

    Commits
    • 897759c version bump to v1.13.9
    • aeb1ac3 doc: update CHANGELOG
    • c663e49 Merge pull request #2671 from sparklemotion/flavorjones-update-zlib-1.2.13_v1...
    • 212e07d ext: hack to cross-compile zlib v1.2.13 on darwin
    • 76dbc8c dep: update zlib to v1.2.13
    • 24e3a9c doc: update CHANGELOG
    • 4db3b4d Merge pull request #2668 from sparklemotion/flavorjones-namespace-scopes-comp...
    • 73d73d6 fix: Document#remove_namespaces! use-after-free bug
    • 5f58b34 fix: namespace nodes behave properly when compacted
    • b08a858 test: repro namespace_scopes compaction issue
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • build(deps): bump tzinfo from 1.2.7 to 1.2.10 in /docs

    build(deps): bump tzinfo from 1.2.7 to 1.2.10 in /docs

    Bumps tzinfo from 1.2.7 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    v1.2.9

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    TZInfo v1.2.9 on RubyGems.org

    v1.2.8

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    TZInfo v1.2.8 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Version 1.2.9 - 16-Dec-2020

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    Version 1.2.8 - 8-Nov-2020

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.
    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • How to build behind a proxy

    How to build behind a proxy

    Describe the bug The cmake process is trying to download other packages. They all fail when I'm behind a proxy. It is not clear what tool is used to download, but it fails. The environment is set with a correct http/https proxies. wget works, so does curl.

    To Reproduce Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior A clear and concise description of what you expected to happen.

    Screenshots If applicable, add screenshots to help explain your problem.

    Asciinema

    see https://asciinema.org/ for recording video in terminal

    ** Environment Info **

    • operating system
    • git hash
    • compiler

    Additional context Add any other context about the problem here.

    opened by dan-bar-dov 1
  • Manual build script appears broken under Fedora 31, Ubuntu 19.04, 20.04.

    Manual build script appears broken under Fedora 31, Ubuntu 19.04, 20.04.

    Describe the bug Running the build script errors out with the following message:

    ninja: build stopped: subcommand failed.
    CMake Error at CMakeLists.txt:51 (message):
      Build step for deps-build failed: 1
    
    
    -- Configuring incomplete, errors occurred!
    See also "/root/smf/build/release/CMakeFiles/CMakeOutput.log".
    

    I get this not just on Ubuntu 19.04, but also Ubuntu 20.04, and Fedora 31.

    To Reproduce Steps to reproduce the behavior:

    1. docker run -it ubuntu:disco
    2. apt update -y && apt upgrade -y
    3. apt install git
    4. git clone https://github.com/smfrpc/smf.git
    5. cd smf
    6. ./install-deps.sh
    7. ./tools/build.sh -r
    8. Build fails per text above.

    Expected behavior I expected a successful release build.

    Environment Info

    • Ubuntu 19.04, 20.04, and Fedora 31 running in Docker containers
    • On current master branch.
    • GCC 8 and 9
    opened by jriehl 11
  • seastar::metrics::double_registration

    seastar::metrics::double_registration

    Describe the bug "seastar::metrics::double_registration: registering metrics twice for metrics: smf::rpc_server_active_connections" when run several rpc servers at the same time.

    To Reproduce for (int i = 0; i < 10; i++) { smf::rpc_server_args opts; opts.rpc_port = ports[i]; auto server = seastar::make_shared<smf::rpc_server>(opts); ... }

    To Fix make metric name unique for each server, for example, "smf::rpc_server(" + args.ip + ":" + seastar::to_sstring(args.rpc_port) + ")" instead of "smf::rpc_server" only.

    opened by laomd 2
Releases(2020.10)
RPC++ is a tool for Discord RPC (Rich Presence) to let your friends know about your Linux system

RPC++ RPC++ is a tool for Discord RPC (Rich Presence) to let your friends know about your Linux system Installing requirements Arch based systems pacm

grialion 4 Jul 6, 2022
A local DNS server to obtain the fastest website IP for the best Internet experience

A local DNS server to obtain the fastest website IP for the best Internet experience

Nick Peng 5.5k Nov 23, 2022
LAppS - Lua Application Server for micro-services with default communication over WebSockets. The fastest and most vertically scalable WebSockets server implementation ever. Low latency C++ <-> Lua stack roundtrip.

LAppS - Lua Application Server This is an attempt to provide very easy to use Lua Application Server working over WebSockets protocol (RFC 6455). LApp

null 48 Oct 13, 2022
BingBing 60 Nov 4, 2022
🚀 Discord RPC Blocker for Lunar Client

?? Soyuz Soyuz has one simple purpose; listen for incoming Discord RPC requests from Lunar Client and block them! Limitations Windows only Soon to com

Fuwn 8 Oct 6, 2022
C++ framework for json-rpc (json remote procedure call)

I am currently working on a new C++17 implementation -> json-rpc-cxx. Master Develop | libjson-rpc-cpp This framework provides cross platform JSON-RPC

Peter Spiess-Knafl 827 Nov 30, 2022
modern C++(C++11), simple, easy to use rpc framework

modern C++(C++11), simple, easy to use rpc framework

qicosmos 1.2k Nov 24, 2022
gRPC - An RPC library and framework Baind Unity 3D Project

Unity 3D Compose for Desktop and Android, a modern UI framework for C ++ , C# that makes building performant and beautiful user interfaces easy and enjoyable.

Md Raihan 4 May 19, 2022
RPC based on C++ Workflow. Supports Baidu bRPC, Tencent tRPC, thrift protocols.

中文版入口 SRPC Introduction SRPC is an RPC system developed by Sogou. Its main features include: Base on Sogou C++ Workflow, with the following features:

C++ Workflow Project and Ecosystem 1.5k Dec 1, 2022
Gromox - Groupware server backend with MAPI/HTTP, RPC/HTTP, IMAP, POP3 and PHP-MAPI support for grommunio

Gromox is the central groupware server component of grommunio. It is capable of serving as a replacement for Microsoft Exchange and compatibles. Conne

grommunio 130 Nov 26, 2022
Apache Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation

Apache Thrift Introduction Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation. Thrift provides clean a

The Apache Software Foundation 9.5k Nov 26, 2022
✔️The smallest header-only GUI library(4 KLOC) for all platforms

Welcome to GUI-lite The smallest header-only GUI library (4 KLOC) for all platforms. 中文 Lightweight ✂️ Small: 4,000+ lines of C++ code, zero dependenc

null 6.5k Nov 24, 2022
Industrial-grade RPC framework used throughout Baidu, with 1,000,000+ instances and thousands kinds of services. "brpc" means "better RPC".

中文版 An industrial-grade RPC framework used throughout Baidu, with 1,000,000+ instances(not counting clients) and thousands kinds of services. "brpc" m

The Apache Software Foundation 14.1k Nov 24, 2022
Packio - An asynchronous msgpack-RPC and JSON-RPC library built on top of Boost.Asio.

Header-only | JSON-RPC | msgpack-RPC | asio | coroutines This library requires C++17 and is designed as an extension to boost.asio. It will let you bu

Quentin Chateau 54 Nov 26, 2022
RPC++ is a tool for Discord RPC (Rich Presence) to let your friends know about your Linux system

RPC++ RPC++ is a tool for Discord RPC (Rich Presence) to let your friends know about your Linux system Installing requirements Arch based systems pacm

grialion 4 Jul 6, 2022
The fastest feature-rich C++11/14/17/20 single-header testing framework

master branch Windows All dev branch Windows All doctest is a new C++ testing framework but is by far the fastest both in compile times (by orders of

Viktor Kirilov 4.4k Nov 23, 2022
Jsmn is a world fastest JSON parser/tokenizer. This is the official repo replacing the old one at Bitbucket

JSMN jsmn (pronounced like 'jasmine') is a minimalistic JSON parser in C. It can be easily integrated into resource-limited or embedded projects. You

Serge Zaitsev 3.1k Nov 25, 2022
Fastest Integer Compression

TurboPFor: Fastest Integer Compression TurboPFor: The new synonym for "integer compression" ?? (2019.11) ALL functions now available for 64 bits ARMv8

powturbo 643 Nov 28, 2022
TurboRLE-Fastest Run Length Encoding

TurboRLE: Turbo Run Length Encoding Efficient and fastest Run Length Encoding library ?? The fastest now up to 50% more faster incl. SSE/AVX2 + improv

powturbo 245 Nov 18, 2022
The fastest feature-rich C++11/14/17/20 single-header testing framework

master branch Windows All dev branch Windows All doctest is a new C++ testing framework but is by far the fastest both in compile times (by orders of

Viktor Kirilov 4.4k Dec 1, 2022