anchor.diff:  % allow before deleting extra replicas.
   -define(NUM_EXTRA_REPLICAS, 1).
   
  -% Permissions for blobs and tags
  +% Permissions for files backing blobs and tags.
   -define(FILE_MODE, 8#00400).
   
  -% Interval for checking available disk space in ddfs_node
  +% How often to check available disk space in ddfs_node.
   -define(DISKSPACE_INTERVAL, 10 * ?SECOND).
   
  -% /dfs/tag/ requests can be ?MAX_TAG_BODY_SIZE bytes at most
  +% The maximum size of payloads of HTTP requests to the /ddfs/tag/
  +% prefix.
   -define(MAX_TAG_BODY_SIZE, (512 * ?MB)).
   
   % Tag attribute names and values have a limited size, and there
  
positive.code: % Maximum length of tag/blob prefix
  -define(NAME_MAX, 511).
  
  % How long ddfs node startup can take
  -define(NODE_STARTUP, 1 * ?MINUTE).
  
  % How long to wait for replies from nodes
  -define(NODE_TIMEOUT, 10 * ?SECOND).
  
  % How long to wait for a reply from and operation that accesses nodes
  % (>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
  -define(MIN_FREE_SPACE, 1024 * ?MB).
  
  % How many HTTP connections are kept in queue if the system is busy
  -define(HTTP_QUEUE_LENGTH, 100).
  
  % 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
  -define(PUT_WAIT_TIMEOUT, 1 * ?MINUTE).
  
  % 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
  -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).
  -define(TAG_CACHE_INTERVAL, 10 * ?MINUTE).
  
  % Tag cache expires in this many milliseconds if tag can't be fetched
  -define(TAG_EXPIRES_ONERROR, 1 * ?SECOND).
  
  % How often 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.
  -define(DELAYED_FLUSH_INTERVAL, 1 * ?SECOND).
  
  % Time 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.
  -define(GC_DEFAULT_INITIAL_WAIT, 5 * ?MINUTE).
  
  % Maximum number of times we try to bring up a node that failed during
  
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).
  