Commit Graph

5222 Commits

Author SHA1 Message Date
Jason Rhinelander
5d1230d7c9 constexpr string_view fixes
Pre-C++17 char_traits::compare isn't constexpr so we can't constexpr the
find/rfind methods that use it.

begin() etc, however, can be constexpr (and need to be for some of the
other constexpr methods here that use them).
2020-02-24 14:27:44 -04:00
Jason Rhinelander
46242ba69b TrimWhiteSpace -> TrimWhitespace
Fix my dumb initial capitalization choice.
2020-02-24 14:27:44 -04:00
Jason Rhinelander
74d4afad51 Remove metric config parsing 2020-02-24 14:27:44 -04:00
Jason Rhinelander
54186c4a89 Replace absl string_view with string_view from lokimq
When we add loki-mq has a dependency we can just alias it, but for now
it's easier to copy the header than add the whole submodule library.
2020-02-24 14:27:44 -04:00
Jason Rhinelander
089056ca5b Remove all ABSL_ATTRIBUTE_UNUSED uses 2020-02-24 14:27:44 -04:00
Jason Rhinelander
5fd830bc36 Prettify uptime duration in log lines
Produces strings such as:

    [+1h09m12.475s]

instead of:

    [+4152475 ms]
2020-02-24 14:27:44 -04:00
Jason Rhinelander
2e9840ea39 Replace abseil date code with Hinnart's date.h
Howard Hinnart's date.h is the library that was accepted as C++20
date/calendar support, so this is essentially a backport of C++20 date
time support.

(It does support timezone support, but requires more of the library and
that seems like overkill for what we need; this just prints UTC
timestamps instead, which need only a header-only include).
2020-02-24 14:27:44 -04:00
Jason Rhinelander
ba1b20153e Miscellaneous small absl removals 2020-02-24 14:27:44 -04:00
Jason Rhinelander
870062e8cc Remove absl optimization
This was being used to get at gcc/clang's __builtin_expect, but we don't
really need that: we can just avoid the check entirely when not in debug
mode which should be even faster.
2020-02-24 14:27:44 -04:00
Jason Rhinelander
5efcd49a3b Deabseil: remove absl::StrCat, de-templatize fromEnv
fromEnv here wasn't usefully templatized (the base template basically
couldn't be used for anything except a string anyway), so just replaced
it with the overloads we need and moved the implementations out of the
header.
2020-02-24 14:27:44 -04:00
Jason Rhinelander
5c95971335 Make C++ literals available everywhere in llarp 2020-02-24 14:27:44 -04:00
Jason Rhinelander
561bfe24c0 Add cmake "check" target to run all tests
Renames the cmake Catch2 test target to "catch" (instead of "check") and
adds a "rungtest" for gtest (because the "gtest" target is already taken
by the gtest library itself), and then repurposes the "check" target to
run both test suite binaries.

Also updates the top-level Makefile to do the same thing, except that
there the gtest target is just "gtest" instead of "rungtest".
2020-02-24 14:27:44 -04:00
Jason Rhinelander
98c34d995b De-abseil: Add our own llarp::TrimWhiteSpace
Adds a TrimWhiteSpace instead of using abseil's.

Adds Catch2 tests for it, and also converts the existing str tests to
catch (which look much, much nicer than the gtest ones).
2020-02-24 14:27:44 -04:00
Jason Rhinelander
00a624ab40 Fix and rename CaselessCmp -> CaselessLessThan
The comparison done here was really weird: by comparing lengths *before*
contents "zz" would sort before "aaa".  It wasn't invalid for the
specific purpose being used here (looking for true/false values), but
would be highly broken if someone tried to use it elsewhere.

Also renamed it because it really is just a `<` implementation, not a
full cmp implementation.
2020-02-24 14:27:44 -04:00
Jeff
d9b779e780
Merge pull request #1126 from jagerman/old-xenial
Add an old xenial gcc build
2020-02-24 13:16:45 -05:00
Jason Rhinelander
b7eb083da0 Add an old xenial gcc build 2020-02-24 13:09:40 -04:00
Jeff
60f92f2f45
Merge pull request #1122 from jagerman/deabseil-mutexes
De-abseil, part 2: mutex, locks, (most) time
2020-02-24 08:34:43 -05:00
Jason Rhinelander
7d167d3fe4 Add return types to lambda
Without these the return type could be wrong (e.g. supposed to return a
reference but returns a value).
2020-02-22 12:17:53 -04:00
Jason Rhinelander
f84ce61d66 Removed empty cpp files
These aren't needed: CMake already knows how to follow #includes and
rebuild when headers change as long as the headers are included
*somewhere*.  The extra .cpp files here just require building a bunch of
.cpp files with just header content that we just end up throw away
during linking (since the same things will also be compiled in whatever
other compilation units include the same headers).
2020-02-21 23:39:11 -04:00
Jason Rhinelander
fe61367a87 Vastly simplified llarp::util::memFn
There is a huge pile of unnecessary machinery here that can be solved
with a few lambdas and some member function pointer type deduction.
2020-02-21 23:24:33 -04:00
Jason Rhinelander
b4440094b0 De-abseil, part 2: mutex, locks, (most) time
- util::Mutex is now a std::shared_timed_mutex, which is capable of
  exclusive and shared locks.

- util::Lock is still present as a std::lock_guard<util::Mutex>.

- the locking annotations are preserved, but updated to the latest
  supported by clang rather than using abseil's older/deprecated ones.

- ACQUIRE_LOCK macro is gone since we don't pass mutexes by pointer into
  locks anymore (WTF abseil).

- ReleasableLock is gone.  Instead there are now some llarp::util helper
  methods to obtain unique and/or shared locks:
    - `auto lock = util::unique_lock(mutex);` gets an RAII-but-also
      unlockable object (std::unique_lock<T>, with T inferred from
      `mutex`).
    - `auto lock = util::shared_lock(mutex);` gets an RAII shared (i.e.
      "reader") lock of the mutex.
    - `auto lock = util::unique_locks(mutex1, mutex2, mutex3);` can be
      used to atomically lock multiple mutexes at once (returning a
      tuple of the locks).
  This are templated on the mutex which makes them a bit more flexible
  than using a concrete type: they can be used for any type of lockable
  mutex, not only util::Mutex.  (Some of the code here uses them for
  getting locks around a std::mutex).  Until C++17, using the RAII types
  is painfully verbose:

  ```C++
  // pre-C++17 - needing to figure out the mutex type here is annoying:
  std::unique_lock<util::Mutex> lock(mutex);
  // pre-C++17 and even more verbose (but at least the type isn't needed):
  std::unique_lock<decltype(mutex)> lock(mutex);
  // our compromise:
  auto lock = util::unique_lock(mutex);
  // C++17:
  std::unique_lock lock(mutex);
  ```

  All of these functions will also warn (under gcc or clang) if you
  discard the return value.  You can also do fancy things like
  `auto l = util::unique_lock(mutex, std::adopt_lock)` (which lets a
  lock take over an already-locked mutex).

- metrics code is gone, which also removes a big pile of code that was
  only used by metrics:
  - llarp::util::Scheduler
  - llarp:🧵:TimerQueue
  - llarp::util::Stopwatch
2020-02-21 23:22:47 -04:00
Jeff
9c0f230dbf
Merge pull request #1120 from notlesh/fix-the-build-2020-02-21
Fix the build
2020-02-21 13:00:46 -05:00
Stephen Shelton
ea97a8f2ac
Make format 2020-02-21 10:16:45 -07:00
Jeff
2868b3327b
Merge pull request #1119 from jagerman/update-osx-image
Update osx image to latest on travis
2020-02-21 12:14:14 -05:00
Stephen Shelton
16be86a5c3
Merge pull request #1116 from tewinget/short-path-names
path builder prints hops, rest print short name
2020-02-21 08:58:05 -08:00
Jason Rhinelander
4c38206944 Remove unneeded mingw homebrew dep 2020-02-21 12:13:57 -04:00
Jason Rhinelander
d517f7d8b2 Do a homebrew update 2020-02-21 12:03:51 -04:00
Jason Rhinelander
fa90726fe1 Update osx image to latest on travis 2020-02-21 11:55:58 -04:00
Thomas Winget
fae86281e9 make path short name look nicer 2020-02-20 17:20:17 -05:00
Thomas Winget
145efaf0bb should probably build before committing... 2020-02-20 17:04:08 -05:00
Thomas Winget
74d421ac2d PathBuildNumber -> NextPathBuildNumber because increment side-effect 2020-02-20 16:57:48 -05:00
Thomas Winget
ad3465ee66 std move better 2020-02-20 16:55:45 -05:00
Thomas Winget
893ef2b874 const-y-ness and move-y-ness 2020-02-20 16:46:07 -05:00
Thomas Winget
fc56a018e5 path builder prints hops, rest print short name 2020-02-20 16:37:39 -05:00
Jeff
7c5a721457
Merge pull request #1114 from notlesh/redundant-introset-lookup-improvements-2020-02-20
Redundant introset lookup improvements
2020-02-20 15:25:09 -05:00
Stephen Shelton
63c3106db2
Make format 2020-02-20 13:14:20 -07:00
Stephen Shelton
0429bafbb3
Merge pull request #1111 from notlesh/redundant-introset-propagation-2020-02-19
Redundant introset propagation
2020-02-20 10:50:06 -08:00
Stephen Shelton
66cb30fa58
Refactor: remove recursionDepth from DHT lookups 2020-02-20 11:18:05 -07:00
Jeff
6ac5f19b3a
Merge pull request #1110 from jagerman/no-abseil-optional
De-abseil, part 1: remove absl::optional
2020-02-20 12:38:16 -05:00
Jeff
a9663d10ae
Merge pull request #1112 from jagerman/remove-llvm-homebrew
Remove llvm from travis-ci homebrew packages
2020-02-20 12:37:44 -05:00
Jason Rhinelander
6aedebbfbf Remove llvm from travis-ci homebrew packages
It doesn't seem like we need this for the mac build.
2020-02-20 12:24:45 -04:00
Stephen Shelton
45a36fcfee
Rework FindIntro logic per redundant strategy 2020-02-20 09:23:41 -07:00
Jason Rhinelander
05a2e961e6 Add missing header 2020-02-20 11:49:18 -04:00
Stephen Shelton
4c499fb076
Make format 2020-02-20 08:36:29 -07:00
Stephen Shelton
6966168f5a
Minor improvements to DHT inroset propagation 2020-02-19 17:30:58 -07:00
Stephen Shelton
dff9aeb250
Propagate Introset publishing redundantly 2020-02-19 17:07:46 -07:00
Jeff Becker
dc7828941f
add log statement 2020-02-19 17:06:13 -07:00
Jason Rhinelander
ac1486d0be Replace absl::optional with optional-lite
Step 1 of removing abseil from lokinet.

For the most part this is a drop-in replacement, but there are also a
few changes here to the JSONRPC layer that were needed to work around
current gcc 10 dev snapshot:

- JSONRPC returns a json now instead of an optional<json>.  It doesn't
  make any sense to have a json rpc call that just closes the connection
  with returning anything.  Invoked functions can return a null (default
  constructed) result now if they don't have anything to return (such a
  null value won't be added as "result").
2020-02-19 18:21:25 -04:00
Jason Rhinelander
860ada8e30
Merge pull request #1108 from majestrate/require-router-version-2020-02-19
Require router version in RCs of public routers
2020-02-19 16:49:10 -04:00
Jeff Becker
9a6148c4c3
require router version in public routers 2020-02-19 15:25:02 -05:00