Skip to content

Add save/load state mechanism - #38

Closed
fonic wants to merge 2 commits into
jech:masterfrom
fonic:save-load-state
Closed

Add save/load state mechanism#38
fonic wants to merge 2 commits into
jech:masterfrom
fonic:save-load-state

Conversation

@fonic

@fonic fonic commented May 4, 2018

Copy link
Copy Markdown
Contributor

This adds a mechnism to save the current state and load a previously saved state.

Additions/changes:

  • introduces binary format to represent saved states
  • adds dht_save_state() to save state
  • adds dht_load_state() to load state
  • adds several initializers (buckets/buckets6, storage, searches, ...->next)
  • adds additional parameter checks to dht_init()
  • updates dht-example to make use of this feature

Saved states include:

  • magic to identify binary format
  • id (myid)
  • buckets with all data
  • nodes with all data

Binary format:
<magic><myid><bucket-1><nodes-of-bucket-1>..\<bucket-n><nodes-of-bucket-n>
with <nodes-of-bucket-1> = <node-1-of-bucket-1>...<node-n-of-bucket-1>

Both save and load functions work on buffers (much like asprintf), thus the application may decide what to do with the binary data (e.g. write/read to/from binary file, database, XML, ...).

Buckets and nodes are saved/loaded with all their data, thus an application can continue right where it stopped when exiting. I figured saving/loading searches and storage doesn't make much sense, therefore those are not saved.

NOTE:
This is based on my PR #37 to make use of the enhanced debug output features.

Screenshots:
screenshot_20180524_090105
screenshot_20180524_090202

@fonic fonic mentioned this pull request May 4, 2018
@fonic fonic changed the title Save and load state Add save/load state mechanism May 15, 2018
fonic added 2 commits May 25, 2018 14:54
Extend debug message logging / debug output:
- add support for message types (debug, info, warning, error)
- introduce logging macros to easily log messages (debugf, infof,
  warnf, errorf)
- log messages to user-defined callback instead of file so that
  application may be decide how to handle debug output
- add string conversion functions that may be used in printf-style
  function calls (address family, IP protocol version, bucket/node
  ID, socket address, etc.)
- add DHT_LOG_ defines to control certain features
- add function to retrieve statistics (buckets, good nodes,
  dubious nodes, total nodes)
- modify dump_bucket() and dht_dump_tables() to output tables
- migrate all debugf calls to make use of the new capabilities
- add additional debug output
- modify dht-example to make use of the new capabilities
Add mechanism to save/load state:
- add initializers (buckets/buckets6, storage, searches, ...->next)
  to make sure state is well defined
- add functions dht_save_state() and dht_load_state() which save/
  load state encoded in binary format to/from buffer
- modify dht-example to make use of the new feature (change command
  line parameter 'i' to 's' to specify state file, load state from
  file at startup, save state to file at shutdown)
@jech

jech commented Jun 30, 2018

Copy link
Copy Markdown
Owner

Rejected. Serialisation/deserialisation doesn't belong in the library.

@jech jech closed this Jun 30, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants