anchor.diff:  % Maximum length of tag/blob prefix
   -define(NAME_MAX, 511).
   
  -% How long ddfs node startup can take
  +% How long ddfs node startup can take.  The most time-consuming part
  +% is the scanning of the tag objects in the node's DDFS volumes.
   -define(NODE_STARTUP, 1 * ?MINUTE).
   
  -% How long to wait for replies from nodes
  +% How long to wait on the master for replies from nodes.
   -define(NODE_TIMEOUT, 10 * ?SECOND).
   
  -% How long to wait for a reply from and operation that accesses nodes
  -% (>NODE_TIMEOUT)
  +% How long to wait for a reply from an operation coordinated by the
  +% master that accesses nodes.  This value should be larger than
  +% NODE_TIMEOUT.
   -define(NODEOP_TIMEOUT, 1 * ?MINUTE).
   
  -% How much free space a node must have, to be considered a primary
  -% candidate host for a new blob
  +% The minimum amount of free space a node must have, to be considered
  +% a primary candidate host for a new blob.
   -define(MIN_FREE_SPACE, 1024 * ?MB).
   
  -% How many HTTP connections are kept in queue if the system is busy
  +% The maximum number of HTTP connections to queue up on a busy system.
   -define(HTTP_QUEUE_LENGTH, 100).
   
  -% Maximum number of simultaneous HTTP connections. Note that
  +% The maximum number of simultaneous HTTP connections. Note that
   % HTTP_MAX_CONNS * 2 * 2 + 32 < Maximum number of file descriptors, where
   % 2 = Get and put, 2 = two FDs required for each connection (connection
   % itself + a file it accesses), 32 = a guess how many extra fds is needed.
   -define(HTTP_MAX_CONNS, 128).
   
  -% How long to keep a PUT request in queue if the system is busy
  +% How long to keep a PUT request in queue if the system is busy.
   -define(PUT_WAIT_TIMEOUT, 1 * ?MINUTE).
   
  -% How long to keep a GET request in queue if the system is busy
  +% How long to keep a GET request in queue if the system is busy.
   -define(GET_WAIT_TIMEOUT, 1 * ?MINUTE).
   
  -% Tag cache expires in TAG_EXPIRES milliseconds.
  -% Note that must be TAG_EXPIRES < GC_INTERVAL, otherwise tags never expire
  +% An unused loaded tag expires in TAG_EXPIRES milliseconds.  Note that
  +% if TAG_EXPIRES is not smaller than GC_INTERVAL, tags will never
  +% expire from the memory cache and will always take up memory.
   -define(TAG_EXPIRES, 10 * ?HOUR).
   
  -% Interval for refreshing the list of all available tags
  -% (This is only needed to purge non-existent tags eventually from the tag
  -% cache. It doesn't harm to have a long interval).
  +% How often the master's cache of all known tag names is refreshed.
  +% This refresh is only needed to purge deleted tags eventually from
  +% the tag cache. It doesn't harm to have a long interval.
   -define(TAG_CACHE_INTERVAL, 10 * ?MINUTE).
   
  -% Tag cache expires in this many milliseconds if tag can't be fetched
  +% How soon a tag object initialized in memory expires if it's content
  +% cannot be fetched from the cluster.
   -define(TAG_EXPIRES_ONERROR, 1 * ?SECOND).
   
  -% How often node should refresh its tag cache from disk
  +% How often a DDFS node should refresh its tag cache from disk.
   -define(FIND_TAGS_INTERVAL, ?DAY).
   
  -% How often buffered (delayed) updates need to be flushed. Tradeoff: The
  -% longer the interval, the more updates are bundled in a single commit.
  -% On the other hand, in the worst case the requester has to wait for the
  -% full interval before getting a reply. A long interval also increases
  -% the likelihood that the server crashes before the commit has finished
  -% successfully, making requests more unreliable.
  +% How often buffered (delayed) updates to a tag need to be
  +% flushed. Tradeoff: The longer the interval, the more updates are
  +% bundled in a single commit.  On the other hand, in the worst case
  +% the requester has to wait for the full interval before getting a
  +% reply. A long interval also increases the likelihood that the server
  +% crashes before the commit has finished successfully, making requests
  +% more unreliable.
   -define(DELAYED_FLUSH_INTERVAL, 1 * ?SECOND).
   
  -% Time to wait between garbage collection runs
  +% How long to wait between garbage collection runs.
   -define(GC_INTERVAL, ?DAY).
   
   % Max duration for a GC run.  This should be smaller than
   % min(ORPHANED_{BLOB,TAG}_EXPIRES).
   -define(GC_MAX_DURATION, 3 * ?DAY).
   
  -% Time to wait after startup for cluster to stabilize before running
  -% first GC.
  +% How long to wait after startup for cluster to stabilize before
  +% starting the first GC run.
   -define(GC_DEFAULT_INITIAL_WAIT, 5 * ?MINUTE).
   
   % Maximum number of times we try to bring up a node that failed during
  
positive.code: % allow before deleting extra replicas.
  -define(NUM_EXTRA_REPLICAS, 1).
  
  % Permissions for blobs and tags
  -define(FILE_MODE, 8#00400).
  
  % Interval for checking available disk space in ddfs_node
  -define(DISKSPACE_INTERVAL, 10 * ?SECOND).
  
  % /dfs/tag/ requests can be ?MAX_TAG_BODY_SIZE bytes at most
  -define(MAX_TAG_BODY_SIZE, (512 * ?MB)).
  
  % Tag attribute names and values have a limited size, and there
  
negative.code: % and reactivates can't resurrect deleted tags. You
  % must ensure that all temporarily inactive nodes
  % are reactivated (or cleaned) within the ?DELETED_TAG_EXPIRES
  % time frame.
  %
  % This value _must_ be larger than the other time-related DDFS
  % parameters listed in this file.  In particular, it must be larger
  % than ORPHANED_TAG_EXPIRES.
  -define(DELETED_TAG_EXPIRES, 30 * ?DAY).
  
  % How many times a tag operation should be retried before aborting.
  -define(MAX_TAG_OP_RETRIES, 3).
  
  % How long to wait before timing out a tag retrieval.  This should be
  % large enough to read a large tag object off the disk and send it
  % over the network.
  -define(GET_TAG_TIMEOUT, 5 * ?MINUTE).
  