Annotation of 43BSDReno/contrib/isode-beta/doc/quipu/distribution.tex, revision 1.1

1.1     ! root        1: 
        !             2: \chapter {Distributed Operation}
        !             3: \label {dist-op}
        !             4: 
        !             5: \section {Overview}
        !             6: 
        !             7: 
        !             8: Distributed Operation is a major aspect of the QUIPU
        !             9: Directory Service
        !            10: Sadly, the OSI Directory specifications in this area are, in the author's
        !            11: opinion, rather unsatisfactory.   
        !            12: Therefore, the QUIPU distributed operations are described in a slightly
        !            13: different manner.  The concept of ``Naming Context'' is not used, and the
        !            14: significance of ``Knowledge'' is de-emphasised.  The external view of this
        !            15: functionality is fully in line with the standard.   
        !            16: 
        !            17: Some of the concepts 
        !            18: defined in this chapter  do {\em not} correspond to the
        !            19: ISO/CCITT terms, and so new terminology is introduced. 
        !            20: Standard terminology is used in the standard way.
        !            21: 
        !            22: 
        !            23: \section {DSA/DUA Interaction Model}
        !            24: 
        !            25: There are some interesting choices to be made between DSA Referral and
        !            26: Chaining.  A DUA will start by contacting a local DSA, specifying that
        !            27: chaining is preferred (i.e., DSA referrals should not be passed back to the
        !            28: DUA).  After that, the first DSA will proceed by use of DSA Referral, except
        !            29: for operations where this is not possible in the QUIPU framework (some cases
        !            30: of search).  The advantages of this approach are:
        !            31: 
        !            32: \begin {itemize}
        !            33: \item
        !            34: The DUA code can be kept to a minimum, as there is no need to handle
        !            35: referrals.
        !            36: This does mean that the DUA must always interact with the Directory
        !            37: Service through a DSA which supports chaining (which might exclude
        !            38: some implementations).
        !            39: \item
        !            40: Always going thorough a local DSA allows a ``per system'' cache to
        !            41: be maintained in a coherent manner.
        !            42: \item
        !            43: The overhead of maintaining chained connections is not passed
        !            44: on too far.
        !            45: \end {itemize}
        !            46: 
        !            47: Note that whilst the DUA procedural does not handle referrals transparently,
        !            48: they are defined in the service interface, so that an application can
        !            49: choose to handle the referrals directly if it wishes to do so.
        !            50: 
        !            51: \section {Model of Data Distribution}
        !            52: \label {model-dist}
        !            53: 
        !            54: This is a critical section of the design.   It is essential to understand it
        !            55: before studying distributed operation.
        !            56: 
        !            57: \subsection {Entry Data Blocks}
        !            58: 
        !            59: For the root and every non-leaf vertex, there will be an
        !            60: {\em Entry Data Block} (EDB)
        !            61: which contains
        !            62: {\em all}
        !            63: information pertaining
        !            64: to the next level down in the DIT.
        !            65: Figure~\ref{edbf} gives and ASN.1 description of
        !            66: the Entry Data Block format.
        !            67: 
        !            68: \tagrind [htbp] {edb}{Entry Data Block Format}{edbf}
        !            69: 
        !            70: 
        !            71: It should be noted and remembered that 
        !            72: the Entry Data Block associated with an entry and described as ``the Entry
        !            73: Data Block of the entry'' contains the entries children (i.e., their
        !            74: attributes and RDNs)
        !            75: and not the attributes of the entry itself.
        !            76: This is {\em not} necessarily intuitive.
        !            77: 
        !            78: 
        !            79: 
        !            80: \subsection {Masters and Slaves}
        !            81: 
        !            82: Every Entry Data Block has {\em Master}  and {\em Slave} copies.
        !            83: There will typically be only one master (although there may be
        !            84: multiple master copies, where data is maintained ``out of band'').
        !            85: Slave copies are automatically replicated from a Master EDB.
        !            86: This may be direct or indirect.  The full propagation path must be acyclic
        !            87: (loop free).
        !            88: 
        !            89: A DSA has either all or none of an Entry Data Block 
        !            90: as a Master or Slave
        !            91: (viz: Entry Data Blocks are atomic).
        !            92: Any other DIT information it contains is treated as cached
        !            93: data.
        !            94: A DSA does not need to have any Master or Slave data.
        !            95: 
        !            96: 
        !            97: DSAs are named, and represented in the DIT.
        !            98: One of the reasons for this, is to enable use of the
        !            99: Directory to identify the OSI location of DSAs.
        !           100: This OSI location can then be adjusted transparent to the
        !           101: logical mapping of the DIT onto DSAs.
        !           102: This can be seen as treating a DSA in the same manner as any other
        !           103: Application Entity.
        !           104: This simplifies the implementation, as there does not need  to be
        !           105: specific storage of additional configuration information (knowledge).
        !           106: 
        !           107: An important piece of information stored in the entry of each DSA is the
        !           108: list of EDBs and how they are replicated.  This information is the basis for
        !           109: automatic replication.   
        !           110: 
        !           111: \subsection {QUIPU Subordinate References}
        !           112: 
        !           113: An entry has associated with it, attributes which indicate  the
        !           114: DSAs which have Master or Slave Entry Data Blocks for the entry
        !           115: in question.
        !           116: These pointers are known as {\em Quipu Subordinate References} (QSR).
        !           117: For every QSR, the DSA must have a Master or Slave copy of the EDB, as
        !           118: implied  by the QSR.
        !           119: The converse it not true:  DSAs may have copies of EDBs without there being
        !           120: QSRs.
        !           121: The  DSAs with QSRs have the information {\em and} are
        !           122: prepared to answer public queries about the Entry Data Block in
        !           123: question.
        !           124: DSAa with EDBs (typically slave copies) and no QSRs usually have copies for
        !           125: performance or robustness reasons.  
        !           126: 
        !           127: Quipu Subordinate References are similar to the standardised Non-Specific
        !           128: Subordinate References (NSSR).  There are the following differences:
        !           129: 
        !           130: \begin {itemize}
        !           131: \item QSRs admit to replication, and therefore there are Master QSRs and
        !           132: Slave QSRs.
        !           133: 
        !           134: \item A QSR always points to all of the relevant information, whereas an NSSR
        !           135: may only point to a part of it and must be used in ``and'' conjunction with
        !           136: other NSSRs.
        !           137: \end {itemize}
        !           138: 
        !           139: 
        !           140: \subsection {Access to the root EDB}
        !           141: 
        !           142: There is no requirement for a given DSA to hold a copy of the
        !           143: root Entry Data Block.
        !           144: However, to be able to systematically process all queries, there
        !           145: must be direct or indirect access to the root Entry Data Block.
        !           146: Therefore, every DSA which does not have a copy of the root
        !           147: Entry Data Block must know the name and address of one or more
        !           148: DSA which either has a copy of the root Entry Data Block, or is
        !           149: closer (in terms of these references) to a DSA which has a
        !           150: copy.  This approach is similar to, but not the same as, use of superior
        !           151: references defined in the standard.
        !           152: 
        !           153: \section {Standard Knowledge References}
        !           154: 
        !           155: 
        !           156: In addition, to the QUIPU specific QSRs, an entry might also contain
        !           157: standard Knowledge References, as defined in the OSI Directory.  This is
        !           158: used to point to data not contained in a QUIPU DSA.  There are three types
        !           159: of reference defined in the standard:
        !           160: 
        !           161: \begin {description}
        !           162: \item[Subordinate Reference]  Pointer to an Entry
        !           163: 
        !           164: \item[Cross Reference] From the QUIPU standpoint, the same as a subordinate
        !           165: reference
        !           166: 
        !           167: \item[Non Specific Subordinate Reference] Pointer to multiple subordinates
        !           168: which must be queried for the next level down.  QSRs are similar to this
        !           169: (see previous section).
        !           170: 
        !           171: \end {description}
        !           172: 
        !           173: In the first two cases, the entry in the Entry Data
        !           174: Block is considered to be ``Knowledge only'' (although other entry
        !           175: information may be cached). 
        !           176: In the third case the entry will also have full information on itself.  
        !           177: If any of these are present, there will be no QUIPU master or slave pointers.
        !           178: These three types of pointer are mutually exclusive\footnote{Thought(SEK) ---
        !           179: does the standard let you have a subordinate reference plus a cached NSSR?}.
        !           180: 
        !           181: These attributes are not supported in QUIPU 5.0.
        !           182: 
        !           183: \section {Navigation}
        !           184: 
        !           185: Given this data model, a straightforward navigation algorithm
        !           186: can now be specified.
        !           187: The requirement is to locate the entry associated with a
        !           188: specified Distinguished Name.
        !           189: When the entry is arrived at, the operations will behave
        !           190: as proscribed.
        !           191: 
        !           192: The basis of the navigation strategy is that the first DSA (i.e., the one
        !           193: accessed by the DAP) does all of the hard work.  Other DSAs, accessed by DSA
        !           194: Referral, either answer the question or return an error.  This is important,
        !           195: as it is the basic strategy by which the system ensures completion of
        !           196: queries.
        !           197: 
        !           198: First consider the behaviour of a DSA accessed by the Directory
        !           199: System Protocol (DSP):
        !           200: 
        !           201: \begin {enumerate}
        !           202: \item 
        !           203: Look up the Distinguished Name.
        !           204: \item 
        !           205: If the Distinguished Name is found, go to step 6.
        !           206: \item 
        !           207: If there is a local copy of
        !           208: the Entry Data Block of the parent,
        !           209: return a nameError.
        !           210: The ``matched'' parameter should be set to the Distinguished Name
        !           211: of the Entry Data Block (i.e., the level above the offered name).
        !           212: This is an authoritative NO.
        !           213: \item 
        !           214: Strip the lowest component off the Distinguished Name, and go
        !           215: to step 1.
        !           216: If there are no more components, go to step 5.
        !           217: This process checks for authoritative NO.
        !           218: \item 
        !           219: At this point, the name has not been found, and no relevant
        !           220: Entry Data Block has been found.
        !           221: This implies that the DSA does not hold the root Entry Data
        !           222: Block.
        !           223: Therefore the DSA should return a DSA Referral.
        !           224: The DSA Referral should be the list of DSAs (names and
        !           225: addresses) which are known
        !           226: to be closer to the root.
        !           227: \item 
        !           228: We now have an entry which matches some or all of the original
        !           229: Distinguished Name.
        !           230: Consider this entry.
        !           231: \item 
        !           232: If the entry contains an Alias attribute, dereference, and goto step 1.
        !           233: Note that if a referral is returned, that the appropriate parameters should
        !           234: be set to indicate all dereferences.
        !           235: \item 
        !           236: If the entry is the one specified in the query, return the
        !           237: answer to the query, or the appropriate (authoritative) error.
        !           238: \item 
        !           239: If the entry is of object class ``QuipuNonLeafObject'', return a Referral.
        !           240: This is simply a redirect to a DSA which can take the query at least one
        !           241: step further.  The names for the DSA Referral should be taken from the
        !           242: master and slave Quipu Subordinate References.  Where the calling DSA is a
        !           243: non-QUIPU DSA, the Presentation address of the Master DSA must be looked up,
        !           244: and only this one returned.
        !           245: \item
        !           246: If the entry contains a reference, the appropriate referral should be
        !           247: returned.
        !           248: \item 
        !           249: The query refers to an entry below the bottom of the DIT.
        !           250: An authoritative nameError can be returned.
        !           251: \end {enumerate}
        !           252: 
        !           253: Now consider the slightly more complex case of the initial
        !           254: DSA (doing the DSA Referral).
        !           255: Steps 1-4 are followed as above
        !           256: as above, to determine authoritative NO.
        !           257: 
        !           258: \begin {enumerate}
        !           259: \setcounter{enumi}{4}
        !           260: \item
        !           261: At this point, the name has not been found, and no relevant
        !           262: Entry Data Block has been found.
        !           263: This implies that the DSA does not hold the root Entry Data
        !           264: Block.
        !           265: The list of DSAs which are known
        !           266: to be closer to the root, are the starting point for the
        !           267: iterative query.
        !           268: Go to step \ref{step-iter}.
        !           269: \item 
        !           270: We now have an entry which matches some or all of the original
        !           271: Distinguished Name.
        !           272: Consider this entry.
        !           273: \item 
        !           274: If the entry contains an Alias attribute, apply the relevant
        !           275: dereference to the original query, and go back to the start.
        !           276: \item 
        !           277: If the entry is the one specified in the query, return the
        !           278: answer to the query, or the appropriate (authoritative) error.
        !           279: \item 
        !           280: If the entry is of object class ``QuipuNonLeafObject'', 
        !           281: this gives a list of QSRs to start the iterative query.
        !           282: Go to step \ref{step-iter}.
        !           283: \item
        !           284: If the entry contains a standard knowledge reference, then
        !           285: go to step \ref{step-iter}.  Note that for non-specific subordinate
        !           286: references, {\em all} of the references must
        !           287: be followed before giving up.
        !           288: \item 
        !           289: The query refers to an entry below the bottom of the DIT.
        !           290: An authoritative nameError can be returned,
        !           291: \item 
        !           292: \label{step-iter}
        !           293: Select one of the DSAs from the referral list.
        !           294: The order to try the DSAs is arbitrary.
        !           295: However, it is attempted to  select ones with the
        !           296: topologically closest name first (e.g., a UK DSA will prefer to
        !           297: query another UK DSA before asking a French one).
        !           298: Try DSAs in turn until one gives an answer or you get bored.
        !           299: Consider the answer.
        !           300: Authoritative answers (yes or no) should be passed back to the
        !           301: DUA.
        !           302: If a Referral is received, recurse to step, watching
        !           303: carefully for loops.
        !           304: \end {enumerate}
        !           305: 
        !           306: It can be seen that this navigation is relying on data being
        !           307: distributed correctly, and DSAs other than the one doing the
        !           308: work behaving in a correct manner.
        !           309: Information provided in the referral should be used to ensure that the
        !           310: iteration is progressing, and thus detect livelock situations.
        !           311: 
        !           312: 
        !           313: 
        !           314: \section {List}
        !           315: 
        !           316: The Entry Data Block concept allows the list operation to fall out in a
        !           317: straightforward manner.
        !           318: Navigation to the Entry Data Block belonging to the name provided, will
        !           319: give access to the full result for the list operation.
        !           320: 
        !           321: Note that where cross/subordinate references are involved, it will be
        !           322: assumed that these are not alias entries (reasonable in practice).
        !           323: This will allow list to be performed in a single DSA in all cases.
        !           324: 
        !           325: \section {Search}
        !           326: 
        !           327: This section describes how the OSI Directory search is supported.  This is
        !           328: one of the hardest parts of the implementation, and care must be taken.
        !           329: Note that the DAP argument in DSP is always that provided by the
        !           330: DUA\footnote {Whilst this is in principle one of the key aspects of the way
        !           331: the DSP works, the recommendations for distributed operations violate this
        !           332: principle when dealing with aliases during search.}.  This means that the
        !           333: work done by a given DSA must be in relation to the target object.  With
        !           334: other operations, this is (fairly) straightforward, as the target object
        !           335: always references the base object of the operation.  For searching, care
        !           336: must be taken to correctly verify whether the base object has been reached.
        !           337: This is done by use of the operation progress information, setting the name
        !           338: resolution phase to completed.
        !           339: 
        !           340: The search operation functions by searching the part of the tree implied
        !           341: by the ``subset'' specification.
        !           342: Rather than returning all of the information, the queried DSA will apply
        !           343: the associated filter to the entries in question, and return the
        !           344: filtered result, along with appropriate continuation pointers.
        !           345: This should minimise network traffic.
        !           346: 
        !           347: 
        !           348: The case of ``subset = baseObject'' is handled by navigating to the Entry
        !           349: Data Block of the object's parent, and applying the given filter.
        !           350: If the entry is a cross reference or subordinate reference, the reference
        !           351: should be followed (using the same query).
        !           352: 
        !           353: The case of ``subset = oneLevel'' is handled by navigating to the object's
        !           354: own Entry Data Block.
        !           355: There the filter is applied to each of its children.
        !           356: If any of the children are alias entries, the alias should be
        !           357: de-referenced, and a baseObject search applied to the new entry.
        !           358: For each child which is a cross references or subordinate references, 
        !           359: the references should be followed, setting the target object to be the child.
        !           360: 
        !           361: The case of ``subset = wholeSubtree'' is handled by navigating to the
        !           362: object's own Entry Data Block.
        !           363: There, the filter is applied to the object and to each of its
        !           364: children\footnote{QUIPU 5.0 gets this wrong, and does not apply the filter
        !           365: to the base object.}.
        !           366: If any of the children are alias entries, the alias should be
        !           367: de-referenced, and a wholeSubtree search applied to the new entry.
        !           368: For each child which has QUIPU children (determined
        !           369: by the prescence of a masterDSA attribute), the search should be applied to
        !           370: the master or one of the slave DSAs, with target object set to the child.
        !           371: For each child which is a cross reference or subordinate reference, 
        !           372: the references should be followed, setting the target object to the child.
        !           373: For each child which has non-specific subordinate references, the search
        !           374: should be applied to {\em all} of the referenced DSAs, with the target
        !           375: object set to the child.
        !           376: 
        !           377: There are three procedures for operating:
        !           378: 
        !           379: \begin {enumerate}
        !           380: \item Everything handled by the first DSA, with other DSAs returning a
        !           381: mixture of results and partial outcome qualifiers.  This is not currently
        !           382: supported due to some awkward implications of holding state, but will be the
        !           383: default in QUIPU 6.0.
        !           384: 
        !           385: \item Proceed by referral until a DSA is reached which has a copy of the
        !           386: base object.  Then this DSA proceeds by referral, and returns the full
        !           387: result to the first DSA.  This is how QUIPU 5.0 works.  It has the advantage
        !           388: of often accumulating search results in a local environment, and so will be
        !           389: selectable in QUIPU 6.0 (possibly in a complex manner).
        !           390: 
        !           391: \item Proceed by referral until a DSA is reached which has a copy of the
        !           392: base object.  Then proceed entirely by chaining.  This is not done.
        !           393: 
        !           394: \end {enumerate}
        !           395: 
        !           396: 
        !           397: There is potential for looping in this procedure.
        !           398: This will be detected and broken by noting loops in the DSA trace
        !           399: information.
        !           400: This takes account of the fact that some distribution will allow
        !           401: for a query to re-enter the same DSA a number of times.
        !           402: 
        !           403: 
        !           404: The Search and list operations make use of the ``partial results''
        !           405: functionality to return information if a time or size limit is reached.
        !           406: Thus, setting a low size limit will allow a user to easily examine 
        !           407: sample information (either by list or search).
        !           408: 
        !           409: \section {Unavailable DSAs}
        !           410: 
        !           411: In the case where a DSA is unavailable, and chaining is preferred, a reference
        !           412: will be returned by a QUIPU DSA.  
        !           413: A QUIPU DUA, which knows it is talking to a QUIPU DSA
        !           414: can rely on this behaviour, and simply use the referral as a diagnostic to
        !           415: the user.  It is hoped that the next version of the standard will add an
        !           416: obvious extra parameter.
        !           417: 
        !           418: 
        !           419: 
        !           420: \section {Presentation Addresses}
        !           421: 
        !           422: In terms of the directory, presentation addresses are handled according to
        !           423: the standard.  Presentation addresses are stored in text form according to 
        !           424: \cite {PSAP.String}.   The network encoding follows \cite {NSAP.Approach}.
        !           425: 
        !           426: \section {Operating When DSAs are not fully interconnected}
        !           427: \label {tcp-only}
        !           428: 
        !           429: Whilst global interconnection of all application entities is an OSI ideal,
        !           430: it will not be achievable in the short or medium term.  Application relaying
        !           431: by DSAs will be needed to achieve full directory connectivity.  
        !           432: 
        !           433: 
        !           434: In general, it is not desirable for DSAs to proceed by chaining - it wastes
        !           435: unnecessary application level resources.  Later, there may be policy reasons
        !           436: to prefer chaining, but these are ignored for now.  The internal structure
        !           437: of network addresses allows a DSA to determine if two DSAs can communicate
        !           438: directly.  For QUIPU 5.0, referrals will be used if the calling and
        !           439: referenced DSA can communicate directly and chaining otherwise.  For QUIPU
        !           440: 6.0, authorisation will be required for chaining to take place.
        !           441: 
        !           442: 
        !           443: \section {The External view of QUIPU}
        !           444: 
        !           445: To a non-QUIPU system, QUIPU will appear to work exactly according to the
        !           446: standard.  This is not quite true for QUIPU 5.0, but is sufficiently close to
        !           447: allow a high level of interworking with a non-QUIPU system.  This is an
        !           448: optimistic statement, not written in the light of experience with
        !           449: interoperability testing.
        !           450: 
        !           451: When a QUIPU DSA interacts with another DSA, it will look up its object
        !           452: classes (and probably other information).  This will allow it to determine if
        !           453: the other DSA is a QUIPU DSA.  When interacting with another QUIPU DSA, the
        !           454: following deviations from the standard are possible.  These are primarily
        !           455: concerned with the introduction of replication:
        !           456: 
        !           457: \begin {itemize}
        !           458: \item Presentation Address might be omitted from Access Point (always
        !           459: present in QUIPU 5.0, for consideration in QUIPU 6.0).
        !           460: \item Cross References and Subordinate References have multiple values
        !           461: (although QUIPU will probably never send these to itself).
        !           462: \item Multiple values of Non Specific Subordinate Reference are assumed to
        !           463: have OR conjunction (i.e., they are really QSRs).
        !           464: \item Use of QUIPU Access control as describe in Section~\ref{dsp-acl}
        !           465: \end {itemize}
        !           466: 
        !           467: When a QUIPU DSA returns references which are derived from reference
        !           468: attributes, it will return them as specified.  If it returns information
        !           469: derived from QUIPU internal pointers, it will return a non-specific
        !           470: subordinate reference.  If the DSA being communicated with is not a QUIPU
        !           471: DSA, it will return only a reference to the master DSA (as replication is
        !           472: not admitted within the protocol).
        !           473: 
        !           474: \section {Use of ACLs in DSP}
        !           475: \label{dsp-acl}
        !           476: 
        !           477: Within the DSP, between a pair of QUIPU DSAs, the ACL
        !           478: attribute becomes special.  It is used as a roadmap of the entry for
        !           479: a DSA which is caching information.  For this reason, the ACL is
        !           480: always asked for in read operations invoked by DSP --- irrespective
        !           481: of whether the corresponding DAP operation asked for it.  The ACL
        !           482: will always be returned to the DSA, even if the DUA in question does
        !           483: not have rights to it.  This will allow the DSA to perform caching
        !           484: ``correctly''.  When an ACL is passed in the DSP, it will be encoded
        !           485: so that ALL of the attributes of the entry are explicitly referred
        !           486: to.  Thus, the caching DSA will be able to determine whether or not
        !           487: it has all the attributes of a given entry.  This should be a useful
        !           488: performance gain.
        !           489: 
        !           490: This will be added in QUIPU 6.0.
        !           491: 
        !           492: \section {Access Control and Authentication}
        !           493: 
        !           494: All operations must take account of access control prior to being performed.
        !           495: Authentication must be done at BIND time, as this is the only point at which
        !           496: the DSA can return an error to the DUA which indicates authentication
        !           497: failure.
        !           498: 
        !           499: If there is public right on the information, then the effort of doing the
        !           500: authentication was wasted.
        !           501: Therefore, if a user is accessing information {\em known} to be publicly
        !           502: readable, it will be optimal {\em not} to supply credentials.
        !           503: 
        !           504: For policy reasons, QUIPU 6.0 may make specification of DUA and the
        !           505: associated simple authentication mandatory.  
        !           506: 
        !           507: \section {Cached Data}
        !           508: \label {cache-all}
        !           509: 
        !           510: Cached data is not mentioned in the basic algorithm.
        !           511: However, the algorithm can utilise cached
        !           512: data in some circumstances.
        !           513: This is because of the manner in which identification of copy data has been
        !           514: introduced in the final stage of the OSI Directory specification.
        !           515: Cached data may be used whenever this is not prohibited by the service
        !           516: controls.
        !           517: The standard does not clearly define what ``copy'' data is.  In general,
        !           518: QUIPU treats master and slave data as authoritative.
        !           519: Both slave and cached data are returned to the user as
        !           520: ``copy'' data.  For this reason, the distinction between slave and copy data
        !           521: can only be internal to QUIPU.
        !           522: 
        !           523: There is no time to live or age information in the OSI Directory Protocols.
        !           524: Care must be taken when caching, that spurious information is not passed
        !           525: around indefinitely between DSAs
        !           526: 
        !           527: When QUIPU holds cached data, it will note:
        !           528: 
        !           529: \begin {itemize}
        !           530: \item How long it has had it
        !           531: \item If it came from a master, slave, or cache.  
        !           532: \item If it is complete (e.g., are all values of an attribute present)
        !           533: \end {itemize}
        !           534: 
        !           535: This section is open ended.
        !           536: The exact approaches to caching, and determining suitable timeout values
        !           537: will be the subject of experiment.
        !           538: 
        !           539: QUIPU 5.0 supports the caching techniques described in section
        !           540: \ref{cache-all}, except:
        !           541: 
        !           542: \begin {itemize}
        !           543: \item Holding age information
        !           544: \item Storage on disk
        !           545: \item Timeouts 
        !           546: \item Negative caching
        !           547: \end {itemize}
        !           548: 
        !           549: 
        !           550: \subsection {Caching Configuration Data}
        !           551: 
        !           552: 
        !           553: When the DSA is using cached data (e.g., the Presentation Address of another
        !           554: DSA), it should be aware of this fact, and should update the information
        !           555: (from non-cache information) if it fails to establish an OSI connection,
        !           556: or some inconsistency appears to occur in the data.  If there is some doubt
        !           557: (e.g., if the error might be due to the DSA being unavailable), the age of
        !           558: the cache should be take into account when determining whether or not to do
        !           559: a refresh.
        !           560: 
        !           561: The important thing about managing cached data is to handle timeouts
        !           562: sensibly.
        !           563: Data cached from a cache may have an indeterminate age.
        !           564: It is important that this data is given a relatively short timeout, to
        !           565: prevent it being circulated indefinitely amongst a set of DSAs.
        !           566: However, {\em if} the data can be verified by usage (e.g., correctly 
        !           567: connecting to a DSA verifies a presentation address), it should then be
        !           568: treated as if cached from a master/slave.  
        !           569: Non-verified data should be treated in the same manner as user data, which
        !           570: is described in the next section.
        !           571: Data cached from master/slave information should be given a longer timeout.
        !           572: Data is discarded, rather than refreshed automatically.  A timeout of some
        !           573: number of days seems appropriate for most data.   
        !           574: 
        !           575: A special case is made for comparing passwords, because it is a user
        !           576: expectation to use the new password immediately.  For this reason, if a
        !           577: password compare fails, a check should be made against the master copy.
        !           578: Note that old passwords will sometimes be valid for a
        !           579: short while beyond their change.  
        !           580: 
        !           581: \subsection {Caching User Data}
        !           582: 
        !           583: User data is cached in a manner similar to configuration data.  Data cached
        !           584: from a cache will only be held for a short period of time (perhaps a few
        !           585: minutes).  This time should be short enough to ensure that spurious cached
        !           586: information will die out, but long enough to give the necessary performance
        !           587: improvements for repeated queries.   
        !           588: 
        !           589: Other data may be cached for longer.  If ever a query is made asking for
        !           590: authoritative data, any cached values should be flushed immediately ---
        !           591: irrespective of whether the query succeeds.  A query for authoritative data
        !           592: is a strong hint about the inaccuracy of cached data, or that a recent
        !           593: change might have occurred.
        !           594: 
        !           595: \subsection {Negative Data}
        !           596: 
        !           597: Usage of directories has shown that incorrect queries are often repeated,
        !           598: particularly when the user is a mail system.  For this reason, negative
        !           599: answers will be cached for a short period of time (QUIPU 6.0).
        !           600: 
        !           601: \subsection {Writing Caches to disk}
        !           602: \label {disk-cache}
        !           603: 
        !           604: This is beyond the scope of QUIPU 5.0, but essential for QUIPU 6.0 for
        !           605: improved performance. 
        !           606: 
        !           607: The astute will notice that without any cached information, DSA startup for
        !           608: DSAs which do not have copies of a few relevant EDBs, will be an expensive
        !           609: operation.  
        !           610: Data cached from a cache will never be saved on disk.  
        !           611: 
        !           612: Disk caching is important to ensure that this overhead is only be incurred
        !           613: in practice, on the occasion of the initial startup.  This means that QUIPU
        !           614: 5.0 DSAs (without disk caching) should always be given copies of at least
        !           615: their parent EDB.
        !           616: 
        !           617: \section {Configuration and Slave Update}
        !           618: 
        !           619: A given DSA will have copies of zero or more Entry Data Blocks.
        !           620: A DSA may either be a master for a given Entry Data Block, or a
        !           621: slave.
        !           622: If there are multiple master copies, it is assumed that these
        !           623: are kept coherent by some out of band mechanism.
        !           624: For example, one of them is the ``real'' master, and the others
        !           625: are updated by file transfer when modifications occur.
        !           626: This discussion will proceed for the single master case.
        !           627: 
        !           628: There are three distinct types of DSA:
        !           629: 
        !           630: \begin {enumerate}
        !           631: \item 
        !           632: A DSA with a master copy of the root Entry Data Block.
        !           633: \item 
        !           634: A DSA with a slave copy of the root Entry Data Block.
        !           635: \item 
        !           636: A DSA with no copy of the root Entry Data Block.
        !           637: \end {enumerate}
        !           638: 
        !           639: As noted in Section~\ref{model-dist}, DSAs of type 2 and 3 will have pointer(s) to
        !           640: a DSA which is ``closer'' to the master copy of the root Entry
        !           641: Data Block.
        !           642: Specifying this hierarchical distribution, as opposed to requiring
        !           643: direct access to the master (as in earlier versions of the OSI Directory)
        !           644: means that there can be many copies of information which needs to be highly
        !           645: replicated, without excessive
        !           646: redundant copying across the Wide Area Network.   
        !           647: This will be particularly important for the root Entry Data Block.
        !           648: 
        !           649: DSAs of type 2 will only need the pointer information for initial
        !           650: startup or recovery after catastrophic corruption.
        !           651: When the slave copy of the root Entry Data Block has been
        !           652: obtained for the first time, this will supercede the pointers.
        !           653: DSAs of type 3 will usually use cached information in preference to
        !           654: these pointers, and will only need the pointers if cached information is
        !           655: (or appears to be) invalid.
        !           656: 
        !           657: The only information which a DSA has to obtain locally at initial boot time,
        !           658: other than the DSA pointers, is its own name.  All other information may be
        !           659: obtained from the Directory.
        !           660: Beyond this, the Directory Service manages its own
        !           661: configuration.
        !           662: There is little point in having a Directory Service providing
        !           663: general high speed access to global information, and then
        !           664: requiring an additional system (knowledge) to deal with its own
        !           665: configuration.
        !           666: 
        !           667: Associated with the DSA's entry in the DIT is a specification of
        !           668: the entries for which the DSA is a master, and for which it is
        !           669: a slave.
        !           670: A DSA will be able to derive the location of an Entry Data
        !           671: Block for which it is master from this information.
        !           672: Thus at initial boot, a DSA will utilise its initial DSA pointers
        !           673: to read its own entry.
        !           674: The location of master Entry Data Blocks will be derivable from
        !           675: their name, and so their existence can then be verified by the
        !           676: DSA in question.
        !           677: A DSA which is a master for the root Entry Data Block will have
        !           678: no pointers.
        !           679: However, it can go straight to the master root Entry Data
        !           680: Block, read the information about itself, and proceed as for
        !           681: other DSAs.
        !           682: 
        !           683: 
        !           684: It is believed that for early pilots, a high level of copying configuration
        !           685: data will be desirable to achieve robustness.  The root and national EDBs
        !           686: will be very highly replicated, even though QUIPU can operate with a rather
        !           687: low level of replication.
        !           688: 
        !           689: \section {DSA Naming}
        !           690: \label {dsa-naming}
        !           691: 
        !           692: \subsection {Choice of Names to prevent loops}
        !           693: 
        !           694: Care must be taken to prevent the situation where the location
        !           695: of a DSA is only known through itself (and other more complex
        !           696: variants).
        !           697: A simple rule for naming DSAs will ensure that this cannot
        !           698: happen.
        !           699: The master DSA for a given entry (i.e., the DSA controlling the Entry Data Block of
        !           700: containing 
        !           701: the entry's children) should have its
        !           702: name in the Entry Data Block of the entry's parent or at a
        !           703: level higher in the DIT.
        !           704: For example, the master DSA of 
        !           705: \begin{quote}\small\begin{verbatim}
        !           706: Country=UK, Org=University College London, OU=Computer Science
        !           707: \end{verbatim}\end{quote}
        !           708: which contains information on entries below Computer Science, may be labelled
        !           709: \begin{quote}\small\begin{verbatim}
        !           710: Country=UK, Org=University College London, DSA=Three Toed Sloth
        !           711: \end{verbatim}\end{quote}
        !           712: or
        !           713: \begin{quote}\small\begin{verbatim}
        !           714: Country=France, DSA=Capybara
        !           715: \end{verbatim}\end{quote}
        !           716: It may not be labelled
        !           717: \begin{quote}\small\begin{verbatim}
        !           718: Country=UK, Org=University College London, OU=Computer Science, 
        !           719:             DSA=Alpaca
        !           720: \end{verbatim}\end{quote}
        !           721: or
        !           722: \begin{quote}\small\begin{verbatim}
        !           723: Country=France, Org=Inria, DSA=Llama
        !           724: \end{verbatim}\end{quote}
        !           725: 
        !           726: 
        !           727: A little more flexibility could be allowed;
        !           728: However, this rule is simple, it prevents deadlock, and allows
        !           729: for reasonable labelling practices.
        !           730: The restriction may be relaxed somewhat, when the concept of Directory
        !           731: Management Domains is introduced more formally.
        !           732: 
        !           733: \section {Local DSA Information}
        !           734: 
        !           735: 
        !           736: The basic entry for the DSA contains information which must be widely known.
        !           737: Essentially this is the OSI location of the DSA.  There is other information
        !           738: which it is useful to store in the Directory, but which is primarily needed
        !           739: by the DSA itself.  Because of the naming rules in the previous section, the
        !           740: DSA's entry will usually be mastered in a different DSA.  Therefore, we have
        !           741: a second entry for each DSA, which is the child of the prime DSA Entry.
        !           742: This entry will always have common name ``Info'', and be mastered in the DSA
        !           743: itself.  There will usually not be slave copies.  The DSA Address is also
        !           744: stored in this entry.  This duplication (and therefore extra management) is
        !           745: seen as worthwhile, as it allows a DSA to start without access to any other
        !           746: DSA.  This information may be absent (usually only when a DSA is being
        !           747: created).
        !           748: 
        !           749: Initially, the following information will be stored in this entry:
        !           750: 
        !           751: \begin {itemize}
        !           752: \item The EDB management information
        !           753: \item DSA Control (see Section~\ref{dsa-control})
        !           754: \item Software Version --- this attribute is automatically maintained
        !           755: by the DSA.
        !           756: \end {itemize}
        !           757: 
        !           758: For QUIPU 5.0, these entries are supported, but are in the main DSA entry.
        !           759: 
        !           760: The following items will be added for QUIPU 6.0, to allow for more
        !           761: sophisticated remote
        !           762: management:
        !           763: 
        !           764: \begin {itemize}
        !           765: \item Authorisation policy
        !           766: \item Tailoring
        !           767: \item The schema files (OID, Attribute, Object Class)
        !           768: \end {itemize}
        !           769: 
        !           770: Replication will also allow common management of multiple DSAs (e.g., to share
        !           771: a common schema).
        !           772: 
        !           773: 
        !           774: \section {DSA Naming Architecture }
        !           775: 
        !           776: The following Naming Architecture components are needed in order to support
        !           777: the QUIPU Mechanism for distributed operations.
        !           778: These are defined here, as a convenient location.
        !           779: Numbers are assigned in the QUIPU Naming Architecture contained in Volume~5
        !           780: of the User's
        !           781: Manual \cite{QUIPU.Manual}.
        !           782: 
        !           783: \tagrindfile {na}{Naming Architecture}{na}
        !           784: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.