glenda.party
term% ls -F
term% cat index.txt
REPLICA(8)                  System Manager's Manual                 REPLICA(8)



NAME
       applychanges,  applylog,  compactdb,  updatedb  -  simple client-server
       replica management

SYNOPSIS
       replica/compactdb db
       replica/updatedb [ -cl ] [ -p proto ] [ -r root ] [ -t now n ] [ -u uid
       ] [ -x path ] ...  db
       replica/applylog  [  -nuv  ]  [  -c name ]...  [ -s name ]...  clientdb
       clientroot serverroot [ path ...  ]
       replica/applychanges [ -nuv ] [ -p proto ] [ -x path  ]  ...   clientdb
       clientroot serverroot [ path ...  ]

DESCRIPTION
       These  four  tools  collectively provide simple log-based client-server
       replica management.  The shell scripts described in replica(1)  provide
       a more polished interface.

       Both  client and server maintain textual databases of file system meta‐
       data.  Each line is of the form    path mode uid gid mtime length Later
       entries for a path supersede previous ones.  A line with the string RE‐
       MOVED in the mode field annuls all previous entries for that path.  The
       entries  in  a  file are typically kept sorted by path but need not be.
       These properties facilitate updating the database atomically by append‐
       ing  to it.  Compactdb reads in a database and writes out an equivalent
       one, sorted by path and without outdated or annulled records.

       A replica is further described on the server by a textual  log  listing
       creation  and  deletion of files and changes to file contents and meta‐
       data.  Each line is of the form:    time gen verb path serverpath  mode
       uid  gid mtime length The time and gen fields are both decimal numbers,
       providing an ordering for log entries so that  incremental  tools  need
       not  process  the whole log each time they are run.  The verb, a single
       character, describes the event: addition of a file (a), deletion  of  a
       file  (d),  a  change to a file's contents (c), or a change to a file's
       metadata (m).  Path is the file path on the client; serverpath the path
       on  the  server (these are different when the optional fifth field in a
       proto file line is given; see proto(2)).  Mode, uid, gid, and mtime are
       the files metadata as in the Dir structure (see stat(5)).  For deletion
       events, the metadata is that of the deleted file.   For  other  events,
       the metadata is that after the event.

       Updatedb  scans  the file system rooted at root for changes not present
       in db, noting them by appending new entries  to  the  database  and  by
       writing  log  events to standard output.  The -c option causes updatedb
       to consider only file and metadata changes, ignoring file additions and
       deletions.   By  default,  the  log events have time set to the current
       system time and use incrementing gen numbers starting at 0.  The -t op‐
       tion  can  be used to specify a different time and starting number.  If
       the -u option is given, all database entries and log  events  will  use
       uid rather than the actual uids.  The -x option (which may be specified
       multiple times) excludes the named path and all its children  from  the
       scan.   If  the -l option is given, the database is not changed and the
       time and gen fields are omitted from the log events; the resulting out‐
       put  is intended to be a human-readable summary of file system activity
       since the last scan.

       Applylog is used to propagate changes from server to  client.   It  ap‐
       plies  the  changes  listed  in a log (read from standard input) to the
       file system rooted at clientroot, copying files when necessary from the
       file  system  rooted  at serverroot.  By default, applylog does not at‐
       tempt to set the uid on files; the -u flag enables this.  Applylog will
       not  overwrite local changes made to replicated files.  When it detects
       such conflicts, by default it prints an error describing  the  conflict
       and  takes no action.  If the -c flag is given, applylog still takes no
       action for files beginning with the given names, but does  so  silently
       and  will not report the conflicts in the future.  (The conflict is re‐
       solved in favor of the client.)  The -s is similar but causes  applylog
       to  overwrite the local changes.  (The conflict is resolved in favor of
       the server.)

       Applychanges is, in some sense, the opposite of applylog; it scans  the
       client file system for changes, and applies those changes to the server
       file system.  Applychanges will not overwrite remote  changes  made  to
       replicated  files.   For  example,  if  a file is copied from server to
       client and subsequently changed on both server and client, applychanges
       will  not  copy  the  client's  new  version to the server, because the
       server also has a new version.  Applychanges and  applylog  detect  the
       same  conflicts;  to resolve conflicts reported by applychanges, invoke
       applylog with the -c or -s flags.

EXAMPLE
       One might keep a client kfs file system  up-to-date  against  a  server
       file  system  using these tools.  First, connect to a CPU server with a
       high-speed network connection to the file server and  scan  the  server
       file system, updating the server database and log:
           repl=$home/lib/replica
           proto=/sys/lib/sysconfig/proto/portproto
           db=$repl/srv.portproto.db
           log=$repl/srv.portproto.log

           9fs $fs
           replica/updatedb -p $proto -r /n/$fs -x $repl $db >>$log
           replica/compactdb $db >/tmp/a && mv /tmp/a $db

       Then, update the client file system:
           repl=$home/lib/replica
           db=$repl/cli.portproto.db
           log=$repl/srv.portproto.log

           9fs $fs
           9fs kfs
           replica/applylog $db /n/kfs /n/$fs <$log
           replica/compactdb $db >/tmp/a && mv /tmp/a $db

       The  $repl directory is excluded from the sync so that multiple clients
       can  each  have  their  own  local  database.   The  shell  scripts  in
       /rc/bin/replica are essentially a further development of this example.

       The  Plan  9  distribution update program operates similarly, but omits
       the first scan; it is assumed that the Plan 9 developers run scans man‐
       ually  when  the  distribution  file  system  changes.  The manual page
       replica(1) describes this in full.

SEE ALSO
       replica(1)

BUGS
       These tools assume that mtime combined with length is a good  indicator
       of changes to a file's contents.



                                                                    REPLICA(8)