Fix subscription renewal to avoid having gaps. It isn't clear that
req->act_ts is still useful, but we'll keep it around for a bit longer.
Update license date on all files. No functional changes.
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.
Pass Layer 4 network sequence number to higher layers.
Remove vestiges of old signature implementation.
Clean up debug output slightly.
Snapshot: change physical interface to make more efficient use of SQLite
when retrieving sets. Use this for asynchronous reads.
Checkpoint, mostly locking issues.
The grand renaming: GCL is (mostly) gone in favor of GOB and GIN.
Simplify the datum interface back to what it was before. Basic
subscriptions and subscription timeout seems to work now.
Get basic subscriptions working again.
Snapshot of work on getting subscriptions working under Net4. Still
has several problems.
Sanity checks when sending subscription results.
Fix null pointer dereference when closing a writer that is writing to a
log that has a subscription active.
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.
Get basic subscriptions working.
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...
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...
Snapshot. Basic things still seem OK, create still seems iffy.
This seems to work under valgrind --tool=helgrind --track-lockorders=no.
There are still problems with lock ordering to be addressed.
Fix some inappropriate assertions.
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.
Clean up parameters for subscription refreshing/expiry to make it harder
to make stupid mistakes.
Initial implementation of unsubscribe.
Better fix for problem with attempted fix in commit:a2d73fc0.
Remove misleading comment.
Cleanup (and hopefully simplification) of assertion subsystem. Lots of
changes, but nothing particularly obtuse.
Some code cleanup for previous commit.
Significant changes to locking to avoid problems with threaded clients.
Fix errant debugging output.
Try to avoid a deadlock between requests and channels.
Rationalize swarm.gdp.subscr.deadintvl and swarm.gdplogd.subscr.timeout.
Rename deadintvl to be timeout and swarm.gdp.subscr.pokeintvl to
swarm.gdp.subscr.refresh for consistency.
Lock channel request list when cleaning up subscriptions.
Change EP_ASSERT_MUTEX_IS(UN)?LOCKED to EP_THR_MUTEX_ASSERT_IS(UN)LOCKED
for consistency with other routine names.
Reclaim dead subscriptions even if there are no writes to the subscribed
log. This is a very common case.
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.
Move GDP_ASSERT_MUTEX_IS[UN]LOCKED into EP library; this implementation
is much less portable and relies on peeking into the secret mutex data,
but has the advantage that it seems to work. Also improves some of the
lock debugging output to add more information.
Update licenses to 2017.
Avoid double locking in sub_notify_all_subscribers in various error
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...
Snapshot: basic operations seem to be working (no stress tests yet).
Snapshot: get basic reading working again with new lock changes.
Avoid possible use of uninitialized pointer in gdplogd subscriptions.
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.
Minor comment, no code change
Bug-fix for stuck subscriptions after renewal
Cleanup for convenience macros for ep_time_nanosleep.
Add debugging to force parallelism in gdplogd.
Additional debugging for request locking. Change _gdp_req_free API so
it can NULL-out the pointer to the request.
Change _gdp_gcl_decref API to automatically null out the pointer ---
this makes it less prone to error.
Fix a reference counting bug. Improve reference counting and locking
Fix a race condition where _gdp_req_lock could return a pointer to a
free req. This could only happen if thread T1 got a pointer to the req,
then T2 locked the req, then T1 blocked on the lock, T2 freed the req
and unlocked the req, allowing T1 to continue with the now freed req....
Fix a problem that was causing occassional unlocks of unlocked mutexes
(only when a subscription timed out).
Allow clients to open more than one instance of a single GCL. Second
and subsequent opens increment the reference count and return the
already instance of the GCL. gdp_gcl_close just decrements the
reference count unless it has the last reference.
Update license. No code changes.
Include copyright in all files. There are scripts to do bulk
replacement of the copyright if desired.
Allow gdplogd to expire subscriptions that have not been renewed. This
essentialy implements leases.
Implement subscription renewals. This causes clients who have open
subscriptions to re-issue the subscription every
swarm.gdp.subscr.pokeintvl seconds. It's not complete yet: gdplogd
still needs to expire subscriptions after a timeout.
Snapshot adding signing. Signatures are computed but not sent or
Cleanup for code walkthrough:
* some function rearrangement
* make data structure detail printing more consistent
Try to at least reduce the number of compile warnings on gcc. It
compiles clean on the NUC (Debian 7, gcc 4.7.2) but still gives some
errors on Ubuntu 14.04.1 (gcc 4.8.2).
Snapshot: working on timing out subscriptions.
Implement gdplogd shutdown actions: withdraw advertisements, explicitly
terminate all subscriptions.
Unify command and ack/nak processing; unify Associative and LRU GCL
caches; multiple other cleanups.
Rename gdplogd directory so it matches the name of the binary.