Commit Graph

303 Commits

Author SHA1 Message Date
Jason Rhinelander d86ecb3a70
Use fixed vector for idle workers
Use a count + fixed size vector with a separate variable tracking the
size seems to perform slightly better than popping/pushing the vector.
2022-05-12 12:44:54 -03:00
Jason Rhinelander 45791d3a19
Use fixed array for known-small internal messages
Internal messages (control messages, worker messages) are always 3 parts
or less, so we can optimize by using a stack allocated std::array for
those cases rather than needing to continually clear and expand a heap
allocated vector.
2022-05-12 12:42:08 -03:00
Jason Rhinelander b8e4eb148f
Use raw index bytes in worker router
Change the internal worker routing id to be "w" followed by the raw
integer bytes, so that we can just memcpy them into a uint32_t rather
than needing to do str -> integer conversion on each received worker
message.

(This also eliminates a vestigal call into oxenc internals).
2022-05-12 12:38:13 -03:00
Jason Rhinelander fa6de369b2
Change std::queue to std::deque typedef
This shouldn't make any difference with an optimizing compiler, but
makes it easier a bit easier to experiment with different data structures.
2022-05-12 12:32:17 -03:00
Jason Rhinelander 371606cde0
Eliminate useless unordered_set
I don't know what this set was originally meant to be doing, but it
currently does nothing (except adding overhead).

The comment says it "owns" the instances but that isn't really true; the
instances effectively already manage themselves as they pass the pointer
through the communications between proxy and workers.
2022-05-12 12:25:46 -03:00
Jason Rhinelander 3a51713396
Add simpler Job subclass of Batch for simple jobs
This adds a much simpler `Job` implementation of `Batch` that is used
for simple no-return, no-completion jobs (as are initiated via
`omq.job(...)`).

This reduces the overhead involved in constructing/destroying the Batch
instance for these common jobs.
2022-05-12 12:20:51 -03:00
Jason Rhinelander 5c7f6504d2
Fix cmake compilation properties
For some reason using target_compile_features doesn't properly set up
C++17 flags in the generate compile_commands.json, which then breaks
clang-complete.  Switch to use properties instead, which works.
2022-05-12 12:15:30 -03:00
Jason Rhinelander 5a3c12e721
Merge pull request #74 from XutaxKamay/patch-1
Fix libzmq library linking
2022-04-07 11:15:24 -03:00
xutaxkamay f0c2222d6e Fix libzmq library linking
Fixes prefix for libzmq library output path
2022-04-07 07:14:23 +02:00
Jason Rhinelander 320a85ac0c
Merge pull request #73 from jagerman/cmake-pkgconfig-workaround
Cmake pkgconfig workaround
2022-03-30 16:56:20 -03:00
Jason Rhinelander 7fca36b3a9
Use liboxenc-dev in ci jobs 2022-03-30 16:21:03 -03:00
Jason Rhinelander bbdf4af98f
cmake work-around for cmake < 3.21
PkgConfig::xyz won't exist before 3.21 if xyz doesn't require any flags
(which is common for a system-installed header-only library like oxenc).

(CMake bug 22180)
2022-03-30 16:09:40 -03:00
Jason Rhinelander 77c4840273
Fix extra file in header install list 2022-02-07 14:41:51 -04:00
Jason Rhinelander d7f5efebc1
Merge pull request #72 from jagerman/oxenc
Use oxen-encoding and add compatibility shim headers
2022-02-07 14:39:59 -04:00
Jason Rhinelander a0a54ed461
Fix static build 2022-02-07 14:38:19 -04:00
Jason Rhinelander 045df9cb9b
Use oxen-encoding and add compatibility shim headers
bt_*, hex, base32z, base64 all moved to oxen-encoding a while ago; this
finishes the move by removing them from oxenmq and instead making oxenmq
depend on oxen-encoding.
2022-01-18 10:30:23 -04:00
Jason Rhinelander 3d178ce3ea
Merge pull request #71 from jagerman/disable-ipv6
Disable IPv6 by default
2021-12-02 19:06:50 -04:00
Jason Rhinelander fe8a1f4306
Disable IPv6 by default
libzmq's IPv6 support is buggy when also using DNS hostname: in
particular, if you try to connect to a DNS name that has an IPv6
address, then zmq will *only* try an IPv6 connection, even if the local
client has no IPv6 connectivity, and even if the remote is only
listening on its IPv4 address.

This is much too unreliable to enable by default.
2021-12-02 19:01:21 -04:00
Jason Rhinelander 3b634329ac Fix libc++
libc++ hates the forward declaration, so just include the <future>
header.
2021-11-30 14:29:24 -04:00
Jason Rhinelander f88691b7e9 Bump version 2021-11-30 14:22:21 -04:00
Jason Rhinelander 9c022b29de
Merge pull request #69 from jagerman/null-logger
Allow null logger
2021-11-30 14:21:39 -04:00
Jason Rhinelander 4d68868482
Merge pull request #68 from jagerman/start-throws-at-caller
Propagate proxy thread startup exceptions
2021-11-30 14:21:31 -04:00
Jason Rhinelander 430951bf3c
Merge pull request #66 from jagerman/address-hashing
Add std::hash implementation for oxenmq::address
2021-11-30 14:21:24 -04:00
Jason Rhinelander 03749c87f0
Merge pull request #67 from jagerman/ipv6
Enable ipv6 support on sockets
2021-11-30 14:20:43 -04:00
Jason Rhinelander 85d35fa505 Propagate proxy thread startup exceptions
Currently if the proxy thread fails to start (typically because a bind
fails) the exception happens in the proxy thread which is uncatchable by
the caller (and aborts the program).

This makes it nicer by transporting startup exceptions back to the
start() call.
2021-11-30 14:16:17 -04:00
Jason Rhinelander e180187746 Allow null logger
Currently if you pass a nullptr for Logger you get a random
std::bad_function_call called from some random thread the first time a
log message goes out.

This fixes it allow a nullptr that logs nothing.
2021-11-30 14:14:55 -04:00
Jason Rhinelander e382373f2e
Merge pull request #70 from jagerman/internal-rebrand
Rebrand variables LMQ -> OMQ
2021-11-30 14:14:30 -04:00
Jason Rhinelander 375cfab4ce Rebrand variables LMQ -> OMQ
Various things still were using the lmq (or LMQ) names; change them all
to omq/OMQ.
2021-11-30 14:10:47 -04:00
Jason Rhinelander f04bd72a4c Enable ipv6 support on sockets
Without this you cannot bind or connect to IPv6 addresses because,
oddly, libzmq defaults ipv6 to disabled.
2021-11-30 13:50:24 -04:00
Jason Rhinelander 31f64821f8 Add std::hash implementation for oxenmq::address
So that you can store addresses in unordered_sets _maps.
2021-11-28 10:26:35 -04:00
Jason Rhinelander a53e1f1786 CI tweaks
- extract submodule commands (so that macOS gets the `--depth=1`)
- put deps into a list instead of a string
- remove extraneous submodule update from build steps
- move focal to after sid
2021-10-25 13:09:42 -03:00
Jason Rhinelander 39b6d89037 Updates for pyoxenmq 1.0.0
Makes some send/connection options more robust to "do nothing" runtime
value, which the Python wrapper needs.

Also found a bunch of doc typos and fixes.

Bump version to 1.2.8 so that new pyoxenmq can build-depend on it.
2021-10-21 22:56:13 -03:00
Jason Rhinelander f0bb2c3d3f Update ci to use our pre-built images
Also tweak some of the builds a bit, and reformat.
2021-10-18 00:37:17 -03:00
Jason Rhinelander 09f3de2232 Fix versioning in clang/llvm pipeline functions 2021-10-14 20:08:49 -03:00
Jason Rhinelander 519a107542
Merge pull request #53 from jagerman/allow-disabling-werror
Allow disabling -Werror via a cmake option
2021-10-14 11:43:10 -03:00
Jason Rhinelander 23c2d537a3 Maybe fix macos tests? 2021-10-14 11:10:28 -03:00
Jason Rhinelander 6a386b7d4a Crank clang to 13
Also reformat and move things around a bit.
2021-10-14 11:00:25 -03:00
Jason Rhinelander 5e9b8c0948 Update catch2 to latest 2.x upstream
Should fix build issues with newer libc.
2021-10-13 20:35:37 -03:00
Jason Rhinelander 560d38d069 Allow disabling -Werror via a cmake option 2021-10-13 19:03:18 -03:00
Jason Rhinelander 504d0d10ea
Merge pull request #52 from jagerman/convert-iterators
Make (and use) iterator approach for encoding/decoding
2021-10-13 18:17:28 -03:00
Jason Rhinelander 7695e770a7 drone: quiet/optimize image setup 2021-10-05 12:27:53 -03:00
Jason Rhinelander 0d0ed8efa9 Fix r narrowing initialization warning when uint_fast16_t is small 2021-10-05 12:21:38 -03:00
Jason Rhinelander 02a542b9c6 Simplify iterator initialization & avoid warnings 2021-10-05 12:12:16 -03:00
Jason Rhinelander 9a8adb5bfd Add methods for unpadded base64 construction
The iterator has them; this adds wrapper methods to access them when not
using the iterator directly.
2021-10-01 18:53:05 -03:00
Jason Rhinelander ee1d69f333 Add b32z/b64 invalid garbage tests
Tests the new restricted added for b32z/b64 trailing crap.
2021-10-01 18:52:30 -03:00
Jason Rhinelander 24dd7a3854 Make (and use) iterator approach for encoding/decoding
This allows for on-the-fly encoding/decoding, and also allows for
on-the-fly transcoding between types without needing intermediate string
allocations (see added test cases for examples).
2021-10-01 18:23:29 -03:00
Jason Rhinelander cd56ad8e08 Expose size calculations; stricter b32z/b64 validity checking
- Add {to,from}_{base64,base32z,hex}_size functions to calculate the
  resulting output size from a given input size.

- Use it internally

- Make b32z and b64 validity checking slightly stricter: currently we
  "accept" some b32z and b64 strings that contain an extra character
  that leave us with 5-7 trailing bits (base32z) or 6 trailing bits
  (base64).  We simply ignore the extra one if decoding, but we
  shouldn't accept it in the "is valid" calls.
2021-10-01 17:54:03 -03:00
Jason Rhinelander 6100802f82
Merge pull request #48 from majestrate/boob-operator-overload-2021-09-24
add operator() overload for defered message that sends reply
2021-09-28 01:32:58 -03:00
Jason Rhinelander 7cb7c2fd6d
Merge pull request #46 from jagerman/bt_dict_producer
Bt dict producer
2021-09-28 01:32:48 -03:00
Jeff Becker 5a41e84378
add operator() overload for defered message that sends reply 2021-09-24 16:01:31 -04:00