Author: julianfoad
Date: Thu Mar 10 10:46:02 2022
New Revision: 1898819

URL: http://svn.apache.org/viewvc?rev=1898819&view=rev
Log:
On the 'pristines-on-demand-on-mwf': add a user guide.

Added:
    subversion/branches/pristines-on-demand-on-mwf/notes/i525/
    
subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md   
(with props)

Added: 
subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md
URL: 
http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md?rev=1898819&view=auto
==============================================================================
--- 
subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md 
(added)
+++ 
subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md 
Thu Mar 10 10:46:02 2022
@@ -0,0 +1,320 @@
+
+This is a detailed user guide to the "i525pod" feature.
+
+
+# Terminology
+
+Place-holders:
+
+  - "i525pod" stands for the name of the feature documented here, that is
+    as implemented on branch 'pristines-on-demand-on-mwf' on 2022-03-08.
+    (Not any other interpretation of what Issue #525 discusses.)
+  - "bare" stands for the state of a WC in which the feature "i525pod" is
+    enabled, and so contains only some of the pristine copies.
+
+Terminology:
+
+  - "pristine copy" or "pristine" or "text base": a copy of a file's content
+    matching the corresponding base revision in the repository. For any file
+    type, not necessarily text format. Enables e.g. local diff and revert,
+    and delta update and commit. Stored in the WC metadata area. The term
+    herein refers only to file content, although Subversion also stores the
+    pristine copy of properties and of tree structure.
+  - "hydrate" a pristine copy: to fetch the pristine copy from the
+    repository and store it in the WC metadata area.
+  - "dehydrate" a pristine copy: to remove the pristine copy from the WC
+    metadata area, while remembering that it may be needed again.
+  - "sync scope": the set of WC paths in which a Subversion operation will
+    check for pristines that need to be hydrated or dehydrated. This is a
+    superset of the pristines that the operation will actually need.
+  - "operation": a high level Subversion operation, such as "diff" or
+    "merge" or "update"; e.g. a subcommand of the 'svn' program.
+
+
+# "i525pod" User Guide
+
+## Functional and Timing Differences
+
+This section details the functional and timing differences when the
+"i525pod" feature is used.
+
+In a WC where "i525pod" is enabled (see other sections for how), basic usage
+differs from that found in previous versions of Subversion (1.14 in case of
+doubt) in the following ways.
+
+Each of the following operations, that previously were *offline* operations,
+will now contact the repository to "hydrate" pristine copies before
+beginning its function, if (and only if) any pristines within the "sync scope"
+are found to be locally modified and currently "dehydrated".
+
+  - `svn cat` (default case: base version)
+  - `svn diff` (default case: base against working)
+  - `svn resolve` (also conflicts resolver in `merge`, `update`)
+  - `svn revert`
+
+Notes on previously *offline* operations,:
+
+  - Contacting the repository may require authentication.
+  - If contact or authorization fails, the operation will error out and not
+    be available.
+  - This contact may be needed as a result of a file being modified that is
+    not of interest in the current operation, as the "sync scope" is a
+    superset of the pristines that this operation will actually need.
+  - The "hydrating" phase may take a long time, and (currently) gives no
+    progress feedback, before the operation begins its usual (previous)
+    behaviour.
+
+[TODO: update that if we add progress feedback]
+
+Each of the following operations, that previously were *online* operations,
+also will now require the same.
+
+  - `svn switch`
+  - `svn update`
+
+Additional notes on previously *online* operations:
+
+  - The "hydrating" phase requires its own connection and authentication to
+    the repository, which is not [currently] shared with the main part of
+    the operation. This may mean a password would have to be entered an
+    additional time, for example, depending on the configuration.
+  - In some edge cases, there may be some difference in the outcome of the
+    operation. A possible example is if repository path authorization has
+    been withdrawn from a path that now needs to be hydrated; this
+    particular case is still under discussion in issue #????.
+
+[TODO: check/eliminate the additional authentication? Issue filed?]
+
+## Disk Space Usage Differences
+
+This section details the disk space usage differences when the feature is
+used.
+
+Summary:
+
+  - Without "i525pod" feature, a Subversion WC typically occupies
+    approximately twice the size of the working files, because there is a
+    pristine copy of every unique working file, plus some other metadata.
+  - The "i525pod" feature enables a WC to occupy a disk space little greater
+    than the size of the working files, in cases where only a small
+    proportion (size wise) of the files are locally modified at any one
+    time.
+  - Cases where the feature will not provide much disk space benefit
+    include:
+    - where a large proportion of WC files are duplicates (because there was
+      only one pristine copy in the first place for each set of duplicates);
+    - where the WC is arranged to contain only (predominantly) the files
+      that are to be modified in a given work flow.
+
+Initial WC size, from checkout/upgrade:
+
+  - on a fresh checkout, no pristines are stored;
+  - on enabling the feature in an existing WC (by WC upgrade), pristines are
+    removed for unmodified files;
+  - [TODO] check: are pristines removed in fact for all files not just
+    unmodified files?
+
+Size increase and decrease:
+
+  - the operations listed in the 'Functional differences' section may grow
+    and/or shrink the disk space used, as detailed there;
+  - operations such as editing a file (without Subversion's control), and
+    editing its Subversion properties, will not cause any change to the
+    pristine storage;
+  - 'commit' will remove the pristines for files it commits that had locally
+    modified content;
+
+Disk Full:
+
+Failure modes when disk becomes full during an operation...
+
+  - [TODO] Investigate.
+
+
+## Support, Compatibility, Enabling
+
+In brief:
+
+"i525pod" is an optional feature in Subversion 1.15. It can be enabled
+separately for each WC. By default "i525pod" is not enabled and WCs remain
+compatible with Subversion 1.8 through 1.14. To enable "i525pod" for a given
+WC, check out or upgrade the WC to 1.15-compatible format. A WC in
+1.15-compatible format is no longer compatible with older Subversion
+clients.
+
+For details: see "Working Copy Format Upgrade and Compatibility" section.
+
+[TODO: update if/when we use a specific feature-enable flag.]
+
+## User Guide: Principle Of Operation
+
+Quoting the original 'BRANCH-README':
+
+  "The core idea is that we start to maintain the following invariant: only
+  the modified files have their pristine text-base files available on the
+  disk."
+
+When "i525pod" is enabled in a given WC, Subversion stores pristine copies
+according to the following principle:
+
+  - It stores the pristine copy of each file that is currently in a locally
+    modified state.
+  - It does not store the pristine copy of each file that is not currently
+    in a locally modified state.
+  - At certain points in its operations, Subversion checks the modified
+    state of certain files, and fetches (from the repository) or removes
+    their pristine copy accordingly if the state has changed.
+
+Subversion updates the pristine storage to match this principle at certain
+times.
+  - To get into the appropriate state at the beginning of the operation, we
+    walk through the current text-base info in the db and check if the
+    corresponding working files are modified.  The missing text-bases are
+    fetched using the 'svn_ra' layer.  The operations also include a final
+    step during which the no longer required text-bases are removed from
+    disk.
+
+  - The operations that don't need to access the text-bases (such as "svn
+    ls" or the updated "svn st") do not perform this walk and do not
+    synchronize the text-base state.
+
+
+Subversion updates the pristine storage to match this principle at certain
+times.
+
+  - At the beginning of any high level operation that may need to access
+    pristine copies [1], Subversion first checks for files [1] that are now
+    locally modified and whose pristine copies are not already present, and
+    connects to the repository and fetches them.
+  - At the beginning and/or the end of those operations, Subversion checks
+    for files that are now unmodified, and removes their pristine copies.
+    That includes files that became unmodified before the operation, and,
+    for some operations (such as commit) also files that became unmodified
+    because of the action of the operation.
+  - It does not matter how a file became modified or unmodified: whether a
+    Subversion operation caused that to be the case, or whether the user had
+    externally edited the file into that state some time before.
+  - [1] See "Which operations?"
+  - [2] See "Which files?" about the "sync scope".
+
+The pristine storage state does not immediately change to match the
+principle:
+
+  - NOT whenever the user edits a file outside of Subversion's control,
+  - NOR for files outside the "sync scope" of a given operation,
+  - NOR during any Subversion operation other than those listed.
+
+The definition of "locally modified" takes into account Subversion's local
+"translation" options such as "keywords" and "eol-style". A working file
+that differs from the repository copy only in keywords and/or EOL-style is
+not regarded as locally modified. When Subversion needs to access a pristine
+copy of such a file, Subversion makes a temporary pristine copy by
+"detranslating" the working file. It may store this in temporary disk space
+for the duration of the operation, but does not keep this indefinitely.
+
+### Which operations will "hydrate" or "dehydrate" pristines?
+
+The operations deemed to need the pristine copies of locally modified files,
+and which therefore "hydrate" (and "dehydrate") the pristine copies of
+locally modified files, are:
+
+  - `H` `D` `svn cat` (default case: base version)
+  - `-` `D` `svn commit` (dehydrate only)
+  - `H` `D` `svn diff` (default case: base against working)
+  - `H` `D` `svn resolve` (also conflicts resolver in `merge`, `update`)
+  - `H` `D` `svn revert`
+  - `H` `D` `svn switch`
+  - `H` `D` `svn update`
+  - `-` `D` `svn upgrade` (upgrade to 1.15-compatible WC format)
+
+### Which files does Subversion "hydrate" or "dehydrate" ("sync scope")?
+
+Which files does Subversion "hydrate" or "dehydrate", whenever an eligible
+operation has the chance to do so?
+
+The files that a given operation "hydrates" and/or "dehydrates" are neither
+all possible files in the working copy, nor the minimal subset necessary for
+the particular operation.
+
+Not maximal:
+
+  - It considers files to "hydrate" or "dehydrate" within one or more
+    sub-trees that encompass all the target paths passed to the operation.
+    Depending on the operation, this sub-tree may span anything from the
+    whole WC (typical for "update", for example), right down to one specific
+    file of interest, or even a directory containing no files at all.
+
+Not minimal:
+
+  - The operation in the end may not look at all the files in "sync scope":
+    for example, because of filtering options (such as `--depth`,
+    `--changelists`), or because the operation terminated early (for
+    example, `svn resolve`... and choose `quit`).
+  - The operation in the end may not read the pristine copy of every file it
+    processes: for example, `svn diff --properties-only`.
+
+
+
+# Working Copy Format Upgrade and Compatibility
+
+## Summary
+
+  - "i525pod" is active when a given WC is in 1.15-compatible format.
+  - To use "i525pod", use `svn checkout --compatible-version=1.15`
+    or `svn upgrade --compatible-version=1.15`.
+  - Subversion 1.15 by default uses 1.8-compatible WC format, with "i525pod"
+    inactive in those WCs, the same as Subversion 1.8 through 1.14.
+  - Subversion 1.14 and older cannot read or write a 1.15-compatible WC.
+
+## Details
+
+To use "i525pod" in a given working copy (WC), that WC's metadata needs to be 
in a new 1.15-compatible format (also called WC format 32). You need a 
Subversion 1.15 client to create or use a WC in this format.
+
+You can either check out a working copy in this format:
+
+    svn checkout --compatible-version=1.15
+
+or upgrade an existing working copy from a 1.8-compatible or older format to 
this format:
+
+    svn upgrade --compatible-version=1.15
+
+That working copy:
+
+  - becomes "bare" right away;
+  - is no longer accessible by Subversion clients below version 1.15;
+  - cannot be converted back to 1.8-compatible format.
+
+[TODO] We might change this so that upgrading to 1.15-compatible format and 
enabling "i525pod" are separate steps and the latter is optional.
+
+Subversion 1.15 also supports, and uses by default, the working copy format 
that has been in use since Subversion 1.8 (format 31). A working copy in that 
format does not support "i525pod" and is never "bare".
+
+    svn checkout --compatible-version=1.8
+    svn checkout  # the same, as 1.8 is the default
+
+You do not need to use the new format for all your working copies. Subversion 
1.15 can work with some working copies in 1.8-compatible format and others in 
1.15-compatible format.
+
+## Upgrade / Downgrade
+
+You can upgrade to 1.15-compatible format (WC format 32) with:
+
+    svn upgrade --compatible-version=1.15
+
+from either
+
+  - 1.8-compatible format, which Subversion 1.15 can use; or
+  - 1.7-compatible or older format, which Subversion 1.15 cannot use but can 
upgrade.
+
+By default "svn upgrade" upgrades a working copy to 1.8-compatible format. 
This is useful for upgrading a WC from the 1.7 and older formats so Subversion 
1.8 and newer can use it.
+
+    svn upgrade
+    svn upgrade --compatible-version=1.8  # the same
+
+You CANNOT downgrade any working copy to an older format.
+
+(If you need a working copy in an older format than your current Subversion 
client supports, you would have to check out a working copy using an older 
Subversion client that supports the format you want to use.)
+
+## [TODO] Enable/disable "i525pod" in a 1.15-compatible WC
+
+[TODO] Not yet implemented (2022-03-08).
+
+

Propchange: 
subversion/branches/pristines-on-demand-on-mwf/notes/i525/i525-user-guide.md
------------------------------------------------------------------------------
    svn:mime-type = text/markdown


Reply via email to