|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.