Version 2.1.18 --- fix problem with subscription renewals; be more
aggressive about printing non-default parameter settings to make it
easier to see a customer configuration.
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.
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.
First step at adding QoS information to subscriptions.
pdu->msg might be null in gdp_pdufree()
Reference counting on subscriptions is still off, but the code does
Get rid of unnecessary double initialization of cpdu->src and cpdu->dst
in subscriptions --- gdp_req_new has already done this.
Other fixes necessary to compile with a C++ compiler:
* Subtlety different semantics for extern keyword.
* Inability to do a forward declaration of a static variable.
* Structs must be initialized in the same order as declared.
* Cannot initialize a fixed size character array with a quoted string....
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.
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...
Snapshot. Compiles but doesn't work.
Merge branch 'eric/net4' of repo.eecs.berkeley.edu:projects/swarmlab/gdp into eric/net4
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 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: fewer race conditions; still need more testing.
Avoid an NULL pointer reference that only occurs on a very unlikely
Clean up parameters for subscription refreshing/expiry to make it harder
to make stupid mistakes.
Initial implementation of unsubscribe.
Cleanup (and hopefully simplification) of assertion subsystem. Lots of
changes, but nothing particularly obtuse.
Some code cleanup for previous commit.
Terminate subscriptions to a given client when it closes a GCL.
Significant changes to locking to avoid problems with threaded clients.
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.
Change EP_ASSERT_MUTEX_IS(UN)?LOCKED to EP_THR_MUTEX_ASSERT_IS(UN)LOCKED
for consistency with other routine names.
Subscriptions work again.
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.
Minor tweak to debugging output.
Update licenses to 2017.
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...
Avoid extraneous error messages when renewing subscription. Needs more
work (as noted in code).
Fix for deadlock caused by multiple subscriptions.
Fix a couple of locking problems: one a doublely locked mutex and one a
thread that is spawned while holding a mutex.
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.
Fix some glitches in subscriptions and event handling that break
multiple subscriptions to the same log in different threads. This is
improved, but it still doesn't work.
Fix subscriptions: poker thread was never started.
Next take on read-by-timestamp. This version works for read, multiread,
and subscribe. There are still some glitches (e.g., you can't have a
starting timestamp in the future) but fixing these would require major
code restructuring, and besides, you can't specify a starting record...
Cleanup for convenience macros for ep_time_nanosleep.
Add debugging to force parallelism in gdplogd.
Don't start subscription poking thread for multiread.
First cut on implementing FWD_APPEND command. Still not working for all
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 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....
Decrement reference count when a subscription ends because of reaching
the number of records requested.
Release subscriptions when a log is closed.
Update license. No code changes.
Minor edits to avoid gcc warnings
Include copyright in all files. There are scripts to do bulk
replacement of the copyright if desired.
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.
Work-in-Progress: automatic subscription renewals. Incomplete.
Make callback function naming consistent: use gdp_event_cbfunc_t.
Implement asynchronous writes. Adds new interfaces:
* gdp_gcl_append_async -- initiate an asynchronous write.
* gdp_event_getstat -- get the status code from an event.
Asynchronous reads can be done using multiread.
Note that asynchronous writes do not attempt retransmissions, unlike...
Cleanup prior to code review: chiefly comments, a bit of code reordering
for better flow.
Minor locking fix to as yet unused code (by inspection).
Significant changes to locking and subscriptions:
* Locks on gdp_req_t are now more extensive to avoid data races.
* Care is given to prevent subscription data being processed before
the subscription itself is in place.
* Move channel pointer into gdp_pdu_t purely as a convenience when...
Back out broad request locks since that ended up passing locks between
threads; the request state does this now.
Finish conversion of "packet" to "PDU". Mostly comments.
Significant changes to extend request locking to avoid clashing; this
introduces a state variable into requests to allow passing what amounts
to a locked data structure between threads. I'm not really wild about
keeping reqs locked longer, so I hope to revisit this commit.
Back out changes carrying over req to event --- it's important that they
Snapshot: working on timing out subscriptions.