Version 2.2.3: Make failure to read a secret key for a writable log an
error instead of waiting for the first append to fail (this can be
turned off using gdp_open_info_set_no_skey_nonfatal, which causes
gdp_gin_open to return a warning instead of an error). Add a -S flag to...
Fix bug caused when passing a NULL open_info to gdp_gin_open.
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.
Mega-change: new object creation API with updated metadata; internal
name is hash of metadata, not hash of human name; query and maintain
human-oriented name to GDPname directory (HONGD).
Minor fix for GIN flag debug printing.
Add optional signature (proof) checking when reading records. Lightly
tested. Seems to do the right thing if the signature does verify, but
fails incorrectly if it does not. Does not do any hash chain checking
Additional debugging for events and PDU processing for debugging out of
order PDU problems.
Restructure signature verification code to move it from gdplogd into
libgdp in preparation for verifying signatures on reads. Version number
bumped to 2.0.4.
Begin implementation of signature checking by readers.
Avoid problems with the name of gdplogd during upgrades.
Pass GIN through to requests so that events can be properly correlated.
Better take on gdp_gin_read_by_hash_async for multiple records.
Restore semantics leaving datums filled in after an append command.
This requires that apps that re-use datums must use gdp_datum_reset to
clear the old data before adding more.
Snapshot: change physical interface to make more efficient use of SQLite
when retrieving sets. Use this for asynchronous reads.
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.
Snapshot in on-disk format conversion from ad hoc files to SQLite
databases. Compiles but is completely untested.
Break out GDP name utility functions (parse, print, etc.) into a
separate file so Rick can use them in the router without dragging a lot
of cruft along.
First step at adding QoS information to subscriptions.
Fix a minor (but legitimate) bug with reversed arguments to strcpy.
Only happened for certain unusual errors, hence why it hadn't been found
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 signed/unsigned conflicts and other type nits. C++ is much
more picky about these than C, but this is probably justified. Sadly,
some of the changes are pretty ugly.
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 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...
Simplified version of gdp_gcl_append that avoids a temporary copy of the
datum. I can't figure out why that was necessary.
Return datum metadata on append.
Additional debugging during initialization.
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 "delete log" command (lightly tested).
Fix reference counting problem in gdp_gcl_open and gdp_gcl_create.
Better debugging for GDP instances (GINs).
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...
Minor comment cleanup for clarity.
Put some extra checking in to make sure GCLs returned from
gdp_gcl_create are good.
Update iomode handling to avoid insisting on a secret key when you
aren't writing the log; clean up secret lookup to be less convoluted.
Force all GCLs into GDP_MODE_ANY (a.k.a. GDP_MODE_RA) to work around
More work on making helgrind happy. This seems to be pretty close,
maybe worth a try in production.
Snapshot. Basic things still seem OK, create still seems iffy.
Snapshot on reliability work.
SNAPSHOT: still with some locking problems.
SNAPSHOT: fewer race conditions; still need more testing.
Initial implementation of unsubscribe.
Generalize statistics printing on exit (and save gdp-reader and
gdp-writer from using internal interfaces).
Cleanup (and hopefully simplification) of assertion subsystem. Lots of
changes, but nothing particularly obtuse.
Cache freed GCL handles so we can avoid double frees.
Add gdp_gcl_open_info_set_signkey_cb to set a callback to get the secret
key. This is to avoid asking for a decryption password if it isn't
going to be used (e.g., if you are opening a GCL that is already in the
cache). This is particularly important for gdp-rest.
Attempt to allow GCLs to be cached in applications. This is
specifically for gdp-rest, but there may be other cases where it is
Don't dereference null pointer if gdp_gcl_create fails.
Need to unlock GCL after creation.
Significant changes to locking to avoid problems with threaded clients.
Avoid bogus locking errors when gdp_gcl_open fails.
More locking fixes. This actually simplifies some code.
Add order specification for some leaf locks.
Fix some locking issues.
Fairly extensive locking changes to avoid races/deadlocks.
Update licenses to 2017.
Refactor code so "unnamed" GCLs without metadata are still unique.
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...
Make sure datum is completely reset on read (including signature).
Snapshot: basic operations seem to be working (no stress tests yet).
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.
Further attempts to be more forgiving about errors, particularly in
terms of inappropriate values in API calls (which are no longer
Check result of auto-initialization; library cannot continue if
First cut at using kinder, gentler assertions (mostly in gdp library).
Default swarm.gdplogd.sequencing.allowdups to true. Improved debugging.
Fix bogus assertion failures or other errors when gdp_gcl_open can't
find a route to the log.
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.
If a gdp_gcl_open fails, be sure to remove the useless GCL from the
cache so that future attempts will retry rather than incorrectly
return success. The alternative would be to cache the failure, but it
might be useful to try again on a retry in the off chance that the log...
Fix problem raised by issue #16 (threaded applications failed in
unpredicatable ways). The problem was that calls to gdp_gcl_open need to
be single threaded so that there will be a unique name => handle mapping
for GCLs. This puts a mutex around the entire open call; not ideal...
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...
First cut at read-by-timestamp. Adds Berkeley DB as a dependency (two
versions supported). The interface still isn't quite right; in
particular, subscribe and multiread don't take timestamps. This should
be remedied before this code is released.
Rename "extents" to be "segments" because of different potential
semantics and enable them by default.
Change name of GCL in cache after creation so that the log can be used
immediately in the same process that created it. Patch initially
created by Sam Kumar.
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.
Implement ability to create new extents. Currently there is no attempt
made to include authorization.
Improved debug output for gdp_internal_name
Update license. No code changes.
Code cleanup: pull out dead code (#ifdefed out) and old SVN version
Include copyright in all files. There are scripts to do bulk
replacement of the copyright if desired.
Don't mark GDP as initialized until after it succeeds.
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.
Avoid assertion failures if applications forget to call gdp_init().
Improve GCL safety checks (asserts on function entry).
Add new gdp_gcl_open_info interface to allow tweaking of GCL parameters
on open. The only thing included now is the setting of the signing key.
Use the third parameter to gdp_gcl_open for general open information,
not just QoS.
Implement read and append filtering so people can add hooks to do (for
example) encryption and decryption. Adds two new APIs:
EP_STAT (*filter)(gdp_datum_t *datum, void *closure)
gdp_gcl_set_read_filter(gcl, filter, closure)
gdp_gcl_set_append_filter(gcl, filter, closure)
Add log-mirror command for trivial replication. Required also adding
gdp_gcl_getnrecs to API.
Fix GDP_MODE_RA (only half implemented). Also adds a hidden "-A" flag
to reader-test to use this mode; it's only for debugging.
Allow logs to opened for both read and append (GDP_MODE_RA).
Fix some initialization bugs that caused mutex failures.
Fix creation of anonymous (no external name) logs
Signature checking working. No action taken on bad signature yet.
Still considerable cleanup left to be done.