A Functional Specification for "Locking"

This document describes the features of a new locking system for
Subversion.  It attempts to avoid specific design and implementation
choices wherever possible.

A separate document will outline a proposed implementation for this
specification.

I. Introduction

   A. Goals

      1. Provide a mechanism to ensure that a user has exclusive
         rights to commit changes to a file from a particular working
         copy.

      2. Provide a communication mechanism to decrease the chances of
         a user wasting time working on a file locked by someone else.

   B. Summary

      We recommend implementing a lightweight locking mechanism.
      Teach the server to track and enforce exclusive write locks.
      Provide means for repository administrators to manipulate locks
      and enforce locking policies.  Provide a series of client
      commands for creating, removing, breaking, and stealing locks.
      Lastly, create a new property to communicate that a path must be
      locked before committing.

      Note that Subversion is still an inherently concurrent system.
      The ability to lock paths is optional, and can even be prevented
      by the repository administrator.


II. New Client Behaviors

   A. Overview

      1. Definition of "lock"

         A lock grants one user the exclusive right to change a
         certain file from a specific working copy.

      2. Lock restrictions

         If a file is locked, the owner of the lock has the exclusive
         right to change the file's text and properties, to delete the
         file, and to move the file.

         The restriction on moving or deleting a locked file is a
         restriction on changing its full path name in any way,
         including by moving or renaming or deleting any of its
         parent directories.

         (A locked file can still be read and copied, and any copy of it
         will not automatically be locked.)

   B. Client requirements for locking

      1. Enforcement system

         It must be possible to declare that certain files absolutely
         require locks before committing.

      2. Communication system

         There must be a system in place that tells users when locking
         is necessary;  ideally, it would prevent a user from
         beginning work in the first place.  If a lock already exists,
         a user should be able to see who created it, when, and why.
 
   C. Lock manipulation via client

      1. Lock Representations in the Working Copy

         In order to associate a lock with a particular working copy,
         the working copy must store some representation of the lock,
         and occasionally synchronize this with the repository's
         master list of locks.

         Because locks can be broken or stolen, it is possible for a
         working copy's lock representation to become "defunct".  A
         defunct lock cannot be used or released--it is useless and is
         cleaned up when the client next synchronizes with the server.

      2. Actions

         This section defines specific terminology to describe the
         kind of lock-related actions that a Subversion client can
         perform.

         a. Creating a lock

            To lock a file:

               - A user must be authenticated to the server
               - The file must not already be locked.  

            Upon successfully locking a file, the working copy retains
            a representation of the lock.

         b. Using a lock

            To make use of a lock, two forms of authentication must be
            provided to the server:

               - The authenticated username that owns the lock
               - A non-defunct lock representation

            If either of these forms of authentication are missing or
            incorrect, the lock cannot be used.

            1. Using a lock to Commit

               Upon successful commit, a locked file is released by
               default.  The Subversion client provides an option to
               retain the lock after commit.

            2. Releasing a lock

               After successful release, the representation of the lock
               is removed from both the working copy and the server.

         c. Breaking a lock

            "Breaking" a lock is a means of releasing a lock when:

               - The authenticated username is not the same as the
                 lock owner, or
               - The working-copy lock representation is unavailable.

            (e.g. Harry locks file foo and is suddenly laid off.
            Sally decides to clean up his mess and breaks the lock on
            foo, without using Harry's username or lock
            representation.)

         d. Stealing a lock

            "Stealing" a lock is a means of creating a lock when:

               - The file is locked by you, but you don't have a
                 representation of the lock in your current working
                 copy, or
               - The file is locked by someone else.

            In order to steal a lock, a user must be authenticated to
            the server.

            (e.g. Harry locks file foo and goes on vacation.  Sally
            needs to make changes to foo and obtains a lock on foo by
            stealing Harry's lock, without using Harry's username or
            lock representation.)

         e. Discovering/examining locks
         
            The Subversion client provides interfaces to answer the
            following questions:

            - Ask working copy to display all lock representations

            - Examine a particular lock representation

            - Ask server to list all locks underneath a given path,
              optionally displaying all attributes of the locks
              (Possibly able to restrict this query to a single user)

            - Ask server whether a given file is locked


III. New Server Behaviors

   A. Overview

      1. Definition of a lock

         As noted in section II.A.1, a lock grants one user the
         exclusive right to change a certain file from a specific
         working copy.  

      2. Attributes of a lock

         A lock is an immutable data object.  It must contain: a
         unique identifier, the path being locked, the username that
         owns the lock, and a creation timestamp.  A lock comment is
         optional.

      3. Lock Restrictions

         See II.A.2 for details.  The server will enforce these
         behaviors.

   B. Tracking locks

      The Subversion server holds the master list of all locks for a
      repository.  It responds to client requests to create, release,
      break and steal locks.  

      When a client asks about a lock, the server reports whether the
      lock is valid or is defunct (i.e. the server no longer has a
      lock corresponding to the lock representation in question).
      When a client creates or steals a lock, the server returns a
      lock representation. 

   C. Enforcement

      During a commit, the server checks for locks the same way that
      it checks for out-of-dateness.  

      As each changed path arrives, the server checks to see if the
      path is locked.  If the path is locked, the server makes certain
      that the correct username and lock representation have been
      presented by the client.  If not, the entire commit is rejected
      immediately.

      In addition, the server re-checks and enforces locks during
      commit finalization.

   D. Configurable Mechanisms
   
      The server provides mechanisms to enable diverse administrative
      locking policies, including:

      1. Allow or disallow creating, breaking, and stealing of locks
         based on specific criteria (e.g. username, path, etc.)

      2. Perform tasks after creating, breaking, and stealing a lock
         (e.g. sending email, collecting stats, etc.)

   E. Lock manipulation with svnadmin

      1. Discovering locks

         svnadmin provides interfaces to answer the following
         questions:

         - List all locks in a repository underneath a given path
           (Possibly able to restrict this query to a single user)

         - Ask whether a given repository file is locked

      2. Unconditional release of locks

         svnadmin provides an interface to unconditionally release a
         specific lock.

