History | View | Annotate | Download (11.5 KB)
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 tested.
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 descriptors).
Subscriptions work again.
More work on locking issues.
Compiler glitches.
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 cases.
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
See #75
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 debugging.
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 checked.
Cleanup for code walkthrough: * comments * 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.