Stop using deprecated EP_ASSERT_TEST macro (in favor of EP_ASSERT).
Add GDP_INIT_OPT_HONGDS and swarm.gdp.hongd.optional to not give an
error if HONGD is unavailable (i.e., the default has been changed to be
more restrictive); do stricter checking during initialization (and give
better error messages); bump version to 2.1.19.
HONGD compilation glitches.
Force MariaDB/MySQL to use a TCP connection instead of a named pipe;
refactor to centralize database initialization to make this easier;
using new interfaces, make gdp-name-add easier to use (notably password
Don't change response code --- potential conflict with protobuf.
Fix advertising and withdrawal to actually delay between each
advertisement. Required changing handling of event loop startup and
Do better job of delivering "not implemented" from gdplogd to clients.
Fix initialization glitch.
Pass flags to GDP library initialization routines. Add flags to disable
Zeroconf and suppress initialization of HONGDS, which is unused in some
Update license date on all files. No functional changes.
Change debug level on printing the external name of a program on
startup; this turns out to be more important than expected.
Fix problem where debugging info was printed even if debugging was off.
Make some fixes for name parsing to handle warning returns from
gdp_name_parse (happens when falling back to SHA256 implementation).
Split variable swarm.gdplogd.log.dir into swarm.gdp.data.dir (the root
of persistent data) and swarm.gdplogd.log.dir (relative to the other).
This is primarily to make container management easier.
Also, when reading parameter files, allow auto-qualification with the...
Second cut at sorting asynchronous data records. Currently all done with
simulation (-Dtest.gdp.chan.seqno=102 randomizes the incoming sequence
numbers), and so missing or duplicated incoming records have not been
First pass at ordering results of asynchronous reads. Works if the
reads come in pre-sorted, but so far untested for out-of-order delivery.
Return better error message to user on signature failures.
Pass Layer 4 network sequence number to higher layers.
Additional debugging for events and PDU processing for debugging out of
order PDU problems.
Print outstanding requests when giving a state dump using T or SIGUSR1.
Remove vestiges of old signature implementation.
First cut at external => internal name mapping using MySQL. It is
currently not an error if the mapping doesn't exist --- it just falls
back to the old SHA256 behavior --- and there is no automated addition
of the mapping to the database when you create a log. To make this work...
First cut at fixing bug that sometimes caused an "End of Results" PDU to
be delivered before some of the results themselves. This involves
passing a "number of results sent" field in the "End of Results" PDU and
saving that PDU until the indicated number of results are processed....
Avoid problems with the name of gdplogd during upgrades.
Snapshot: change physical interface to make more efficient use of SQLite
when retrieving sets. Use this for asynchronous reads.
Checkpoint, mostly locking issues.
Snapshot. Fixes in protobuf format to better deal with reads returning
The grand renaming: GCL is (mostly) gone in favor of GOB and GIN.
Get basic subscriptions working again.
Snapshot: compiles cleanly with updated protocol and crypto
support, but completely untested.
Improved debugging for incoming PDUs.
Be more careful with enums, which are not just aliases for integers in
C++. Most importantly, use gdp_cmd_t instead of various int types for
commands and acks.
Changes for adding "const" qualifiers. These are mostly good things and
not C++ specific.
Rather non-intuitive changes to suppress "return value not used"
warning; just (void)ing the call no longer works.
Fixes to prevent C++ compile errors for variables that are not
initialized and not used. This isn't a problem with C, and it's not a
bug, just an annoying C++-ism.
Changes necessary to compile under C++ because it doesn't understand
that (void *) is compatible with other pointer types. This adds a lot
of explicit casts that are not needed in C.
First cut at flattening out protobuf definition. Some changes to data
structure printing (e.g., _gdp_pdu_dump) to get indenting more rational
so as to make reading the output easier.
First cut at running Layer 5 network protocol version 4 over old
(version 3) Layer 4 stack. Substantial parts are unimplemented,
including signature generation and checking, read or subscribe by
timestamp or hash, and others. No asynchronous operations including...
Don't leak reqs when doing async read/append.
Tentatively working on v3 network protocol.
Return to compilable state after rebase. No testing.
Snapshot. Not tested.
First cut at new net protocol. Compiles, but not yet tested (not even
once --- do not try to run this!).
First cut at "delete log" command (lightly tested).
First cut at separating GCL instances (GINs) from GDP Objects (GOBs).
This is intended to fix some semantic problems with subscriptions. End
users always use GINs (aliased to gdp_gcl_t for now for compatibility),
and there is one GIN for each call to gdp_gcl_open (i.e., no returning...
Remember to unlock GCL if a corresponding req cannot be found for it.
Caused deadlock. It isn't clear how the error condition can happen, but
it definitely does.
Make ep_thr_gettid produce something useful to developers (with a
semantic change) and include EP_THR_PRItid for printing.
Changes to handle certain error conditions with log creation. This
still isn't right: see the comments in gdp/gdp_main.c.
Routine renaming to make the names easier to remember (hopefully).
Merge branch 'eric/dev'.
Major changes to get lock ordering into shape. I think the remaining
complaints from helgrind are based on problems in helgrind.
Remove temporary debug lines.
More work on making helgrind happy. This seems to be pretty close,
maybe worth a try in production.
Fix core dump on certain error conditions.
Snapshot. Basic things still seem OK, create still seems iffy.
Helgrind fixes. Still kicks out errors, but so far they all look to be
on a trylock, and hence shouldn't actually cause any deadlocks.
Snapshot on reliability work.
Add runtime parameters "swarm.gdp.command.runinthread" and
"swarm.gdp.response.runinthread" to control whether commands and
responses (respectively) run in separate threads from the pool. Default
to true and false respectively. Running responses in threads is...
Basic things seems to work, including passing helgrind race condition
tests. Still more testing needed.
SNAPSHOT: still with some locking problems.
SNAPSHOT: fewer race conditions; still need more testing.
Generalize statistics printing on exit (and save gdp-reader and
gdp-writer from using internal interfaces).
Add allocated GCL statistics gathering and printing.
Move some of the assertion recover cleverness from gdplogd into libep so
it is more generally available. Also updates the documentation to make
it clearer (I hope).
Cleanup (and hopefully simplification) of assertion subsystem. Lots of
changes, but nothing particularly obtuse.
Attempt to allow GCLs to be cached in applications. This is
specifically for gdp-rest, but there may be other cases where it is
Fix a possible deadlock during startup. It's surprising this hasn't
Fix reference counting on GCLs when they get responses.
Clean up user messages to use ep_app_* routines (and be consistent with
Attempt to get gdp-log-check to run as the same user as gdplogd
(assuming it was launched as root).
Significant changes to locking to avoid problems with threaded clients.
Change EP_ASSERT_MUTEX_IS(UN)?LOCKED to EP_THR_MUTEX_ASSERT_IS(UN)LOCKED
for consistency with other routine names.
Arrange to lock initialization so that it isn't possible for an activity
thread to continue before I/O event thread has initialized.
Subscriptions seem to get expired now, but only when another record is
written (should happen spontaneously in order to mop up file
Subscriptions work again.
More work on locking issues.
Fairly extensive locking changes to avoid races/deadlocks.
Add swarm.gdp.debug.assert.allabort to make all assertions abort
Fix some printf type disagreements.
Update licenses to 2017.
Minor debug cleanups.
Split req->pdu into two: cpdu holds the PDU for the command and rpdu
holds the PDU for the response. This makes it easier to make restart
work and the code to understand. However, it also means more copying of
data and a general lack of elegance. It also means that the datum in...
White space cleanup (can you say "obsessive-compulsive disorder"?)
Extensive work on reliability, notably sharing a datum between threads.
Increases reliability, but still not fully tested. Basic things seem to
work though. Note: this may disrupt the replication code.
Fix a couple of locking problems: one a doublely locked mutex and one a
thread that is spawned while holding a mutex.
Implement gdp_gcl_read_async. This also fixes some obscure problems
with other asynchronous operations, and tweaks debugging flags to make
it easier to pick out the operations you want to see.
Fix problem that might occur if an initial response PDU to a command
such as MULTIREAD is delayed; follow-on data was treated as a response to
the initial command rather than as asynchronous events.
Put mutex around GDP library initialization; in some cases threaded
programs (who don't call gdp_lib_init before spawning threads) can hit a
race condition without this.
Fix resource leak and locking problem in the code to handle NOROUTE
responses to a FWD_APPEND command.
Try to match a NOROUTE error to a GCL in the case of FWD_APPEND. This
requires a complete scan of the channel work list. Also, back out an
"efficiency" change with buffering that broke FWD_APPEND.
Improved error debugging output.
Tweak debugging output.
Finish putting gdp_buf abstraction in code (it was previously mixed with
libevent evbuffer calls).
Fix problem with inconsistent signatures. Might this be better done by
just eliminating the datum->siglen field? It's implied by the size of
the datum->sig buffer.
Fix setting of uid/gid for swarm.xxx.runasuser parameter.
Add some debugging hooks in GDP library.
Fix likely race condition in GCL req list handling; improved debugging.