|
|
1.1 root 1: \chapter {Overview}
2:
3: \section {Introduction}
4:
5:
6:
7: This part of the manual describes aspects of the design of QUIPU which are not
8: needed to be known by the administrator or user of QUIPU.
9: However, it documents important design decisions and protocol, which are of
10: interest to understand how QUIPU works, and in some specific circumstances
11: (e.g., solving interoperability problems). A summary of the main features
12: of QUIPU is also given.
13:
14:
15: QUIPU fully implements both of the OSI Directory Protocols, and a number of
16: extensions.
17: The highlights of the QUIPU Directory Service
18: Implementation are:
19:
20: \begin{itemize}
21: \item
22: Use of memory structures to provide fast access, without use of
23: complex keying techniques.
24: \item
25: Activity scheduling within the DSA to allow for multiple accesses.
26: \item
27: General and flexible searching capabilities.
28: \item
29: A mechanism to provide non-local access control.
30: \item
31: A mechanism to provide external schema management.
32: \item
33: A sophisticated approach for management of distributed operations and
34: replication.
35: \end{itemize}
36:
37: The current implementation provides a DSA, and a procedural interface to the
38: Directory Abstract Service and the associated Directory Access Protocol
39: (DAP), which will enable other applications to use the Directory.
40:
41: \section {General Aims}
42:
43: To understand the rationale behind some of the decisions, it is
44: useful to consider the original aims of the QUIPU project.
45: These
46: can then be mapped onto a number
47: of more technical considerations:
48:
49: \begin{itemize}
50: \item To produce an implementation which followed the
51: emerging standards. This is an aim in itself.
52:
53: \item Flexibility, to enable the system to be used
54: for experimentation and research into problems relating to directory
55: services.
56:
57: \item To provide a vehicle for experimentation in the area of
58: distribution and replication.
59:
60: \item To provide some level of real usage.
61: This sort of work is useless if entirely confined to the laboratory.
62: It is important that it is capable of use for some level of experimental
63: service. However, it is not consciously designed to evolve into a full
64: fledged product.
65: \end{itemize}
66:
67: As the work has evolved, the following goals have emerged as
68: additional to the original ones listed above:
69:
70: \begin{itemize}
71: \item To provide a public domain the OSI Directory implementation as a part of
72: the ISODE package.
73:
74: \item To provide integrated support for the ISODE Applications.
75:
76: \item To be used as a part of the initial pilot Directory Service in
77: the UK Academic Community and in other pilots.
78: \end{itemize}
79:
80:
81: \section {Technical Goals}
82:
83: The major goals of the QUIPU Directory Service are:
84:
85: \begin{itemize}
86: \item Full support of the Directory Access Protocol and Directory System
87: Protocols \cite{CCITT.Directory}.
88: \item
89: Support of the majority of the service elements specified in the OSI Directory.
90: \item
91: Full interworking with other OSI Directory implementations.
92: \item
93: Very full searching and matching capabilities, beyond the minimum
94: required by the OSI Directory.
95: \item
96: Provision of a system which has potential for very high distribution.
97:
98: \item Support of distributed operations in a manner which is full
99: conformant with respect to non-QUIPU systems, and provides additional
100: functionality for QUIPU systems.
101:
102: \end{itemize}
103:
104: The following areas were not intended as goals in the initial system.
105: Some discussion is given as to how these areas might be tackled in
106: future versions.
107:
108: \begin{itemize}
109: \item
110: The QUIPU Directory is not intended for very large scale
111: systems (i.e., Millions and tens of Millions of entries per DSA or hundreds
112: of megabytes of data per DSA).
113:
114: \item
115: Substantial data robustness is not required: there is no need to employ
116: complex data backup techniques, such as replicated hardware.
117: \item
118: The security aspects of the OSI Directory were initially omitted, as not
119: required by the general aims.
120: At this point, there is no reason why this aspect should not be
121: integrated.
122:
123: \end{itemize}
124:
125: \section {Further QUIPU documents}
126:
127:
128: The following documents are available, in addition to this manual:
129:
130: \begin{itemize}
131: \item A paper on the original design, which is mainly of historical interest
132: \cite{inca-paper}.
133:
134: \item A paper presented at the 1988 IFIP 6.5 conference, which gives a
135: general overview \cite{QUIPU.IFIP}.
136:
137: \item A paper presented at Esprit Conference Week 1988, which describes the
138: distributed operations \cite{QUIPU.Distributed}.
139:
140: \item A paper presented to the Dutch \unix/ User Group in November 1989, which
141: describes how Quipu DSAs navigate the DIT \cite{QUIPU.Navigate}.
142:
143: \end{itemize}
144:
145: These papers, except the first, are distributed online with QUIPU.
146:
147: \chapter {General Design}
148:
149: \section {Overview}
150:
151: This chapter describes general decisions.
152: In particular, issues relating to use of
153: the OSI Directory are covered,
154: rather than
155: system implementation decisions.
156: However, the two are somewhat bound up.
157: Attention is drawn to the protocol extensions defined in section
158: \ref{edb-ros}. Note that this does {\em not} affect interactions with
159: non-QUIPU DSAs (or DUAs).
160: The following aspects of the OSI Directory are not handled in QUIPU 6.0.
161:
162: \begin{itemize}
163: \item The protocol elements for support of directory use of authentication
164: are handled in a conformant manner, but the associated services are not
165: available to the end user.
166:
167: \item
168: Search is always supported by multicasting. This does
169: {\em not} affect the basic service offered to the user, but means that
170: prohibition of chaining is not possible in all cases.
171:
172: \item Partial Outcome Qualifier is not supported for List.
173:
174: \item There are some aspects of distributed operation, where interaction
175: with another conforming system would not be fully general. In particular,
176: QUIPU might not be able to be configured with references to point at a
177: complex configuration where not all sibling entries are held.
178: \end{itemize}
179:
180: Otherwise, QUIPU 6.0 is believed to conform to the standard.
181:
182: \section {Service Controls}
183:
184: QUIPU use of service controls conforms to the OSI Directory.
185: Comments are made on those
186: controls where QUIPU makes a choice with respect to some option
187: given by the OSI Directory.
188:
189: \begin{description}
190: \item [preferChaining]
191: Chaining will be done.
192:
193: \item [chainingProhibited]
194: Chaining will not be done.
195: For some cases of the search operation, this means that the QUIPU Directory
196: Service will not be able to provide the service, and will return a
197: ``chaining required'' error.
198:
199:
200: \item [localScope]
201: The scope will be restricted to the DSA concerned (i.e., no chaining will be
202: done).
203:
204: \item [dontUseCopy] If this is set, the master data will be used. This may
205: have a significant impact on performance for operations on entries which are
206: high up the tree and for the DSAs which master this information. These issues
207: need study.
208:
209:
210: \item [dontDereferenceAliases]
211: Followed as per the OSI Directory.
212:
213: \item [priority]
214: This is used to help control scheduling within the DSA. High priority
215: tasks are dealt with before low priority tasks (Note: there are no checks
216: here, so this is open to mis-use !)
217:
218: \item [timeLimit]
219: Followed as per the OSI Directory.
220:
221: \item [sizeLimit]
222: Followed as per the OSI Directory.
223:
224: \item [scopeOfReferral]
225: The OSI Directory is followed, although QUIPU does not make use of this control.
226: \end{description}
227:
228:
229: \chapter {Distributed Operation}
230: \label {dist-op}
231:
232: \section {Overview}
233:
234:
235: Distributed Operation is a major aspect of the QUIPU
236: Directory Service
237: Sadly, the OSI Directory specifications in this area are, in the author's
238: opinion, rather unsatisfactory.
239: Therefore, the QUIPU distributed operations are described in a slightly
240: different manner. The concept of ``Naming Context'' is not used, and the
241: significance of ``Knowledge'' is de-emphasised. The external view of this
242: functionality is fully in line with the standard.
243:
244: Some of the concepts
245: defined in this chapter do {\em not} correspond to the
246: ISO/CCITT terms, and so new terminology is introduced.
247: Standard terminology is used in the standard way.
248:
249:
250: \section {DSA/DUA Interaction Model}
251:
252: There are some interesting choices to be made between DSA Referral and
253: Chaining. A DUA will start by contacting a local DSA, specifying that
254: chaining is preferred (i.e., DSA referrals should not be passed back to the
255: DUA). After that, the first DSA will proceed by use of DSA Referral, except
256: for operations where this is not possible in the QUIPU framework (some cases
257: of search). The advantages of this approach are:
258:
259: \begin{itemize}
260: \item
261: The DUA code can be kept to a minimum, as there is no need to handle
262: referrals.
263: This does mean that the DUA must always interact with the Directory
264: Service through a DSA which supports chaining (which might exclude
265: some implementations).
266: \item
267: Always going thorough a local DSA allows a ``per system'' cache to
268: be maintained in a coherent manner.
269: \item
270: The overhead of maintaining chained connections is not passed
271: on too far.
272: \end{itemize}
273:
274: Note that whilst the DUA procedural does not handle referrals transparently,
275: they are defined in the service interface, so that an application can
276: choose to handle the referrals directly if it wishes to do so.
277:
278: \section {Model of Data Distribution}
279: \label {model-dist}
280:
281: This is a critical section of the design. It is essential to understand it
282: before studying distributed operation.
283:
284: \subsection {Entry Data Blocks}
285:
286: For the root and every non-leaf vertex, there will be an
287: {\em Entry Data Block} (EDB)
288: which contains
289: {\em all}
290: information pertaining
291: to the next level down in the DIT.
292: Figure~\ref{edbf} gives and ASN.1 description of
293: the Entry Data Block format.
294:
295: \tagrind [htbp] {edb}{Entry Data Block Format}{edbf}
296:
297:
298: It should be noted and remembered that
299: the Entry Data Block associated with an entry and described as ``the Entry
300: Data Block of the entry'' contains the entries children (i.e., their
301: attributes and RDNs)
302: and not the attributes of the entry itself.
303: This is {\em not} necessarily intuitive.
304:
305:
306:
307: \subsection {Masters and Slaves}
308:
309: Every Entry Data Block has {\em Master} and {\em Slave} copies.
310: There will typically be only one master (although there may be
311: multiple master copies, where data is maintained ``out of band'').
312: Slave copies are automatically replicated from a Master EDB.
313: This may be direct or indirect. The full propagation path must be acyclic
314: (loop free).
315:
316: A DSA has either all or none of an Entry Data Block
317: as a Master or Slave
318: (viz: Entry Data Blocks are atomic).
319: Any other DIT information it contains is treated as cached
320: data.
321: A DSA does not need to have any Master or Slave data.
322:
323:
324: DSAs are named, and represented in the DIT.
325: One of the reasons for this, is to enable use of the
326: Directory to identify the OSI location of DSAs.
327: This OSI location can then be adjusted transparent to the
328: logical mapping of the DIT onto DSAs.
329: This can be seen as treating a DSA in the same manner as any other
330: Application Entity.
331: This simplifies the implementation, as there does not need to be
332: specific storage of additional configuration information (knowledge).
333:
334: An important piece of information stored in the entry of each DSA is the
335: list of EDBs and how they are replicated. This information is the basis for
336: automatic replication.
337:
338: \subsection {QUIPU Subordinate References}
339:
340: An entry has associated with it, attributes which indicate the
341: DSAs which have Master or Slave Entry Data Blocks for the entry
342: in question.
343: These pointers are known as {\em Quipu Subordinate References} (QSR).
344: For every QSR, the DSA must have a Master or Slave copy of the EDB, as
345: implied by the QSR.
346: The converse it not true: DSAs may have copies of EDBs without there being
347: QSRs.
348: The DSAs with QSRs have the information {\em and} are
349: prepared to answer public queries about the Entry Data Block in
350: question.
351: DSAs with EDBs (typically slave copies) and no QSRs usually have copies for
352: performance or robustness reasons.
353:
354: Quipu Subordinate References are similar to the standardised Non-Specific
355: Subordinate References (NSSR). There are the following differences:
356:
357: \begin{itemize}
358: \item QSRs admit to replication, and therefore there are Master QSRs and
359: Slave QSRs.
360:
361: \item A QSR always points to all of the relevant information, whereas an NSSR
362: may only point to a part of it and must be used in ``and'' conjunction with
363: other NSSRs.
364: \end{itemize}
365:
366:
367: \subsection {Access to the root EDB}
368:
369: There is no requirement for a given DSA to hold a copy of the
370: root Entry Data Block.
371: However, to be able to systematically process all queries, there
372: must be direct or indirect access to the root Entry Data Block.
373: Therefore, every DSA which does not have a copy of the root
374: Entry Data Block must know the name and address of one or more
375: DSA which either has a copy of the root Entry Data Block, or is
376: closer (in terms of these references) to a DSA which has a
377: copy. This approach is similar to, but not the same as, use of superior
378: references defined in the standard.
379:
380: \section {Standard Knowledge References}
381:
382:
383: In addition, to the QUIPU specific QSRs, an entry might also contain
384: standard Knowledge References, as defined in the OSI Directory. This is
385: used to point to data not contained in a QUIPU DSA. There are three types
386: of reference defined in the standard:
387:
388: \begin{description}
389: \item[Subordinate Reference] Pointer to an Entry
390:
391: \item[Cross Reference] From the QUIPU standpoint, the same as a subordinate
392: reference
393:
394: \item[Non Specific Subordinate Reference] Pointer to multiple subordinates
395: which must be queried for the next level down. QSRs are similar to this
396: (see previous section).
397:
398: \end{description}
399:
400: In the first two cases, the entry in the Entry Data
401: Block is considered to be ``Knowledge only'' (although other entry
402: information may be cached).
403: In the third case the entry will also have full information on itself.
404: If any of these are present, there will be no QUIPU master or slave pointers.
405: These three types of pointer are mutually exclusive\footnote{Thought(SEK) ---
406: does the standard let you have a subordinate reference plus a cached NSSR?}.
407:
408: These attributes are not supported in QUIPU 6.0.
409:
410: \section {Navigation}
411:
412: Given this data model, a straightforward navigation algorithm
413: can now be specified.
414: The requirement is to locate the entry associated with a
415: specified Distinguished Name.
416: When the entry is arrived at, the operations will behave
417: as proscribed.
418:
419: The basis of the navigation strategy is that the first DSA (i.e., the one
420: accessed by the DAP) does all of the hard work. Other DSAs, accessed by DSA
421: Referral, either answer the question or return an error. This is important,
422: as it is the basic strategy by which the system ensures completion of
423: queries.
424: There are times when the DSA may depart from this model, these are discussed
425: in Section~\ref{DSA:select} and \cite{QUIPU.Navigate}.
426:
427: First consider the behaviour of a DSA accessed by the Directory
428: System Protocol (DSP):
429:
430: \begin{enumerate}
431: \item
432: Look up the Distinguished Name.
433: \item
434: If the Distinguished Name is found, go to step 6.
435: \item
436: If there is a local copy of
437: the Entry Data Block of the parent,
438: return a nameError.
439: The ``matched'' parameter should be set to the Distinguished Name
440: of the Entry Data Block (i.e., the level above the offered name).
441: This is an authoritative NO.
442: \item
443: Strip the lowest component off the Distinguished Name, and go
444: to step 1.
445: If there are no more components, go to step 5.
446: This process checks for authoritative NO.
447: \item
448: At this point, the name has not been found, and no relevant
449: Entry Data Block has been found.
450: This implies that the DSA does not hold the root Entry Data
451: Block.
452: Therefore the DSA should return a DSA Referral.
453: The DSA Referral should be the list of DSAs (names and
454: addresses) which are known
455: to be closer to the root.
456: \item
457: We now have an entry which matches some or all of the original
458: Distinguished Name.
459: Consider this entry.
460: \item
461: If the entry contains an Alias attribute, dereference, and goto step 1.
462: Note that if a referral is returned, that the appropriate parameters should
463: be set to indicate all dereferences.
464: \item
465: If the entry is the one specified in the query, return the
466: answer to the query, or the appropriate (authoritative) error.
467: \item
468: If the entry is of object class ``QuipuNonLeafObject'', return a Referral.
469: This is simply a redirect to a DSA which can take the query at least one
470: step further. The names for the DSA Referral should be taken from the
471: master and slave Quipu Subordinate References. Where the calling DSA is a
472: non-QUIPU DSA, the Presentation address of the Master DSA must be looked up,
473: and only this one returned.
474: \item
475: If the entry contains a reference, the appropriate referral should be
476: returned.
477: \item
478: The query refers to an entry below the bottom of the DIT.
479: An authoritative nameError can be returned.
480: \end{enumerate}
481:
482: Now consider the slightly more complex case of the initial
483: DSA (doing the DSA Referral).
484: Steps 1-4 are followed as above
485: as above, to determine authoritative NO.
486:
487: \begin{enumerate}
488: \setcounter{enumi}{4}
489: \item
490: At this point, the name has not been found, and no relevant
491: Entry Data Block has been found.
492: This implies that the DSA does not hold the root Entry Data
493: Block.
494: The list of DSAs which are known
495: to be closer to the root, are the starting point for the
496: iterative query.
497: Go to step \ref{step-iter}.
498: \item
499: We now have an entry which matches some or all of the original
500: Distinguished Name.
501: Consider this entry.
502: \item
503: If the entry contains an Alias attribute, apply the relevant
504: dereference to the original query, and go back to the start.
505: \item
506: If the entry is the one specified in the query, return the
507: answer to the query, or the appropriate (authoritative) error.
508: \item
509: If the entry is of object class ``QuipuNonLeafObject'',
510: this gives a list of QSRs to start the iterative query.
511: Go to step \ref{step-iter}.
512: \item
513: If the entry contains a standard knowledge reference, then
514: go to step \ref{step-iter}. Note that for non-specific subordinate
515: references, {\em all} of the references must
516: be followed before giving up.
517: \item
518: The query refers to an entry below the bottom of the DIT.
519: An authoritative nameError can be returned,
520: \item
521: \label{step-iter}
522: Select one of the DSAs from the referral list.
523: The order to try the DSAs is arbitrary.
524: However, it is attempted to select ones with the
525: topologically closest name first (e.g., a UK DSA will prefer to
526: query another UK DSA before asking a French one).
527: Try DSAs in turn until one gives an answer or you get bored.
528: Consider the answer.
529: Authoritative answers (yes or no) should be passed back to the
530: DUA.
531: If a Referral is received, recurse to step, watching
532: carefully for loops.
533: \end{enumerate}
534:
535: It can be seen that this navigation is relying on data being
536: distributed correctly, and DSAs other than the one doing the
537: work behaving in a correct manner.
538: Information provided in the referral should be used to ensure that the
539: iteration is progressing, and thus detect livelock situations.
540:
541:
542:
543: \section {List}
544:
545: The Entry Data Block concept allows the list operation to fall out in a
546: straightforward manner.
547: Navigation to the Entry Data Block belonging to the name provided, will
548: give access to the full result for the list operation.
549:
550: Note that where cross/subordinate references are involved, it will be
551: assumed that these are not alias entries (reasonable in practice).
552: This will allow list to be performed in a single DSA in all cases.
553:
554: \section {Search}
555:
556: This section describes how the OSI Directory search is supported. This is
557: one of the hardest parts of the implementation, and care must be taken.
558: Note that the DAP argument in DSP is always that provided by the
559: DUA\footnote {Whilst this is in principle one of the key aspects of the way
560: the DSP works, the recommendations for distributed operations violate this
561: principle when dealing with aliases during search.}. This means that the
562: work done by a given DSA must be in relation to the target object. With
563: other operations, this is (fairly) straightforward, as the target object
564: always references the base object of the operation. For searching, care
565: must be taken to correctly verify whether the base object has been reached.
566: This is done by use of the operation progress information, setting the name
567: resolution phase to completed.
568:
569: The search operation functions by searching the part of the tree implied
570: by the ``subset'' specification.
571: Rather than returning all of the information, the queried DSA will apply
572: the associated filter to the entries in question, and return the
573: filtered result, along with appropriate continuation pointers.
574: This should minimise network traffic.
575:
576:
577: The case of ``subset = baseObject'' is handled by navigating to the Entry
578: Data Block of the object's parent, and applying the given filter.
579: If the entry is a cross reference or subordinate reference, the reference
580: should be followed (using the same query).
581:
582: The case of ``subset = oneLevel'' is handled by navigating to the object's
583: own Entry Data Block.
584: There the filter is applied to each of its children.
585: If any of the children are alias entries, the alias should be
586: de-referenced, and a baseObject search applied to the new entry.
587: For each child which is a cross references or subordinate references,
588: the references should be followed, setting the target object to be the child.
589:
590: The case of ``subset = wholeSubtree'' is handled by navigating to the
591: object's own Entry Data Block.
592: There, the filter is applied to the object and to each of its
593: children.
594: If any of the children are alias entries, the alias should be
595: de-referenced, and a wholeSubtree search applied to the new entry.
596: For each child which has QUIPU children (determined
597: by the prescence of a masterDSA attribute), the search should be applied to
598: the master or one of the slave DSAs, with target object set to the child.
599: For each child which is a cross reference or subordinate reference,
600: the references should be followed, setting the target object to the child.
601: For each child which has non-specific subordinate references, the search
602: should be applied to {\em all} of the referenced DSAs, with the target
603: object set to the child.
604:
605: There are three procedures for operating:
606:
607: \begin{enumerate}
608: \item Everything handled by the first DSA, with other DSAs returning a
609: mixture of results and partial outcome qualifiers.
610:
611:
612: \item Proceed by referral until a DSA is reached which has a copy of the
613: base object. Then this DSA proceeds by referral, and returns the full
614: result to the first DSA. This is how QUIPU 6.0 works. It has the advantage
615: of often accumulating search results in a local environment, and so is
616: selectable (possibly in a complex manner).
617:
618: \item Proceed by referral until a DSA is reached which has a copy of the
619: base object. Then proceed entirely by chaining. This is not done.
620:
621: \end{enumerate}
622:
623:
624: There is potential for looping in this procedure.
625: This will be detected and broken by noting loops in the DSA trace
626: information.
627: This takes account of the fact that some distribution will allow
628: for a query to re-enter the same DSA a number of times.
629:
630:
631: The Search and list operations make use of the ``partial results''
632: functionality to return information if a time or size limit is reached.
633: Thus, setting a low size limit will allow a user to easily examine
634: sample information (either by list or search).
635:
636: \section {Selecting a DSA}
637: \label{DSA:select}
638:
639: In Quipu-5.0 the
640: chain/refer choice was very ad hoc. For a DSA, the best
641: choice is usually to give a referral, except where this will not work.
642: To make this calculation, it is necessary to determine if two DSAs can
643: communicate directly. This is done by deriving from
644: the presentation address of a DSA, a list of connected networks. This can
645: then be used to determine if a pair of DSAs can communicate directly, and is
646: the basis for the chaining/referral choice. This will need the extension
647: of the network address, to allow encoding of private networks other than the
648: three well known ones.
649:
650: There is an analogous problem when a DSA needs to access a DSA which cannot
651: be accessed directly. Each DSA which does not have full connectivity, will
652: have an attribute which indicates network/DSA pairs. This indicates a DSA
653: which may be used (bilateral agreement) to access a given network by
654: application relay.
655:
656: The following Sections discuss briefly how these choices are made,
657: \cite{QUIPU.Navigate} describes the process more fully.
658:
659: \subsection {DSA Quality}
660:
661: Replication gives a choice of DSA to ask a given query to. The following
662: criteria are relevant:
663:
664: \begin{itemize}
665: \item Use an existing association if possible
666: \item Prefer a QUIPU DSA
667: \item Prefer a reliable DSA
668: \item Prefer a ``local'' DSA
669: \end{itemize}
670:
671: The first two are straightforward.
672: A local DSA can be selected using the following\ldots
673:
674: \begin{enumerate}
675: \item
676: Prefer to use networks in the order
677: specified by ts\_communities. This will encourage access over a local
678: ether/preferred net.
679:
680: \item Pick a DSA with a close name (e.g., prefer one in the same country)
681:
682: \item Pick a DSA in the same DMD. This would need to add a DMD attribute to
683: the DSA entry (encoded as DN) [Not yet implemented].
684: \end{enumerate}
685:
686: Picking a reliable DSA is achieved using the following information
687: \begin{verbatim}
688: DSAInfo ::= SEQUENCE {
689: dsa DistinguishedName,
690: lastAttempt UTCTime,
691: lastSuccess UTCTime OPTIONAL,
692: failures-since-last-success INTEGER }
693: \end{verbatim}
694: Thus a DSA will be able to check if it knows about the DSAs in question, and
695: can make a choice based on past results. This should operate dynamically,
696: without operator interference. Info on DSAs not contacted for a given period
697: should be expunged.
698: It is hoped to store this as an attribute of a DSA in future versions of
699: Quipu.
700:
701:
702: \subsection {Unavailable DSAs}
703:
704: In the case where a DSA is unavailable, and chaining is preferred, a reference
705: will be returned by a QUIPU DSA.
706: A QUIPU DUA, which knows it is talking to a QUIPU DSA
707: can rely on this behaviour, and simply use the referral as a diagnostic to
708: the user. It is hoped that the next version of the standard will add an
709: obvious extra parameter.
710:
711:
712: \subsection {Operating When DSAs are not Fully Interconnected}
713: \label {tcp-only}
714:
715: Whilst global interconnection of all application entities is an OSI ideal,
716: it will not be achievable in the short or medium term. Application relaying
717: by DSAs will be needed to achieve full directory connectivity.
718:
719:
720: In general, it is not desirable for DSAs to proceed by chaining - it wastes
721: unnecessary application level resources. Later, there may be policy reasons
722: to prefer chaining, but these are ignored for now. The internal structure
723: of network addresses allows a DSA to determine if two DSAs can communicate
724: directly.
725:
726:
727:
728: \section {The External View of QUIPU}
729:
730: To a non-QUIPU system, QUIPU will appear to work exactly according to the
731: standard.
732:
733: When a QUIPU DSA interacts with another DSA, it will look up its object
734: classes (and probably other information). This will allow it to determine if
735: the other DSA is a QUIPU DSA. When interacting with another QUIPU DSA, the
736: following deviations from the standard are possible. These are primarily
737: concerned with the introduction of replication:
738:
739: \begin{itemize}
740: \item Presentation Address might be omitted from Access Point (always
741: present in QUIPU 6.0, for consideration in QUIPU 7.0).
742: \item Cross References and Subordinate References have multiple values
743: (although QUIPU will probably never send these to itself).
744: \item Multiple values of Non Specific Subordinate Reference are assumed to
745: have OR conjunction (i.e., they are really QSRs).
746: \item Use of QUIPU Access control as described in Section~\ref{dsp-acl}
747: \end{itemize}
748:
749: When a QUIPU DSA returns references which are derived from reference
750: attributes, it will return them as specified. If it returns information
751: derived from QUIPU internal pointers, it will return a non-specific
752: subordinate reference. If the DSA being communicated with is not a QUIPU
753: DSA, it will return only a reference to the a selected DSA (as replication is
754: not admitted within the protocol).
755:
756: \section {Cached Data}
757: \label {cache-all}
758:
759: Cached data is not mentioned in the basic algorithm.
760: However, the algorithm can utilise cached
761: data in some circumstances.
762: This is because of the manner in which identification of copy data has been
763: introduced in the final stage of the OSI Directory specification.
764: Cached data may be used whenever this is not prohibited by the service
765: controls.
766: The standard does not clearly define what ``copy'' data is. In general,
767: QUIPU treats master and slave data as authoritative.
768: Both slave and cached data are returned to the user as
769: ``copy'' data. For this reason, the distinction between slave and copy data
770: can only be internal to QUIPU.
771:
772: There is no time to live or age information in the OSI Directory Protocols.
773: Care must be taken when caching, that spurious information is not passed
774: around indefinitely between DSAs.
775:
776: When QUIPU holds cached data, it will notes how long it has had it, and will
777: ``time out'' the data after a tailorable period.
778:
779: This section is open ended.
780: The exact approaches to caching, and determining suitable timeout values
781: will be the subject of experiment.
782:
783:
784: The important thing about managing cached data is to handle timeouts
785: sensibly.
786: Data cached from a cache may have an indeterminate age.
787: It is important that this data is given a relatively short timeout, to
788: prevent it being circulated indefinitely amongst a set of DSAs.
789: However, {\em if} the data can be verified by usage (e.g., correctly
790: connecting to a DSA verifies a presentation address), it should then be
791: treated as if cached from a master/slave.
792: Non-verified data should be treated in the same manner as user data, which
793: is described in the next section.
794: Data cached from master/slave information should be given a longer timeout.
795: Data is discarded, rather than refreshed automatically. A timeout of some
796: number of days seems appropriate for most data.
797:
798: \section {Configuration and Slave Update}
799:
800: A given DSA will have copies of zero or more Entry Data Blocks.
801: A DSA may either be a master for a given Entry Data Block, or a
802: slave.
803: If there are multiple master copies, it is assumed that these
804: are kept coherent by some out of band mechanism.
805: For example, one of them is the ``real'' master, and the others
806: are updated by file transfer when modifications occur.
807: This discussion will proceed for the single master case.
808:
809: There are three distinct types of DSA:
810:
811: \begin{enumerate}
812: \item
813: A DSA with a master copy of the root Entry Data Block.
814: \item
815: A DSA with a slave copy of the root Entry Data Block.
816: \item
817: A DSA with no copy of the root Entry Data Block.
818: \end{enumerate}
819:
820: As noted in Section~\ref{model-dist}, DSAs of type 2 and 3 will have pointer(s) to
821: a DSA which is ``closer'' to the master copy of the root Entry
822: Data Block.
823: Specifying this hierarchical distribution, as opposed to requiring
824: direct access to the master (as in earlier versions of the OSI Directory)
825: means that there can be many copies of information which needs to be highly
826: replicated, without excessive
827: redundant copying across the Wide Area Network.
828: This will be particularly important for the root Entry Data Block.
829:
830: DSAs of type 2 will only need the pointer information for initial
831: startup or recovery after catastrophic corruption.
832: When the slave copy of the root Entry Data Block has been
833: obtained for the first time, this will supercede the pointers.
834: DSAs of type 3 will usually use cached information in preference to
835: these pointers, and will only need the pointers if cached information is
836: (or appears to be) invalid.
837:
838: The only information which a DSA has to obtain locally at initial boot time,
839: other than the DSA pointers, is its own name. All other information may be
840: obtained from the Directory.
841: Beyond this, the Directory Service manages its own
842: configuration.
843: There is little point in having a Directory Service providing
844: general high speed access to global information, and then
845: requiring an additional system (knowledge) to deal with its own
846: configuration.
847:
848: Associated with the DSA's entry in the DIT is a specification of
849: the entries for which the DSA is a master, and for which it is
850: a slave.
851: A DSA will be able to derive the location of an Entry Data
852: Block for which it is master from this information.
853: Thus at initial boot, a DSA will utilise its initial DSA pointers
854: to read its own entry.
855: The location of master Entry Data Blocks will be derivable from
856: their name, and so their existence can then be verified by the
857: DSA in question.
858: A DSA which is a master for the root Entry Data Block will have
859: no pointers.
860: However, it can go straight to the master root Entry Data
861: Block, read the information about itself, and proceed as for
862: other DSAs.
863:
864:
865: It is believed that for early pilots, a high level of copying configuration
866: data will be desirable to achieve robustness. The root and national EDBs
867: will be very highly replicated, even though QUIPU can operate with a rather
868: low level of replication.
869:
870: \section {DSA Naming}
871: \label {dsa-naming}
872:
873: \subsection {Choice of Names to Prevent Loops}
874:
875: Care must be taken to prevent the situation where the location
876: of a DSA is only known through itself (and other more complex
877: variants).
878: A simple rule for naming DSAs will ensure that this cannot
879: happen.
880: The master DSA for a given entry (i.e., the DSA controlling the Entry Data Block of
881: containing
882: the entry's children) should have its
883: name in the Entry Data Block of the entry's parent or at a
884: level higher in the DIT.
885: For example, the master DSA of
886: \begin{quote}\small\begin{verbatim}
887: Country=UK, Org=University College London, OU=Computer Science
888: \end{verbatim}\end{quote}
889: which contains information on entries below Computer Science, may be labelled
890: \begin{quote}\small\begin{verbatim}
891: Country=UK, Org=University College London, DSA=Three Toed Sloth
892: \end{verbatim}\end{quote}
893: or
894: \begin{quote}\small\begin{verbatim}
895: Country=France, DSA=Capybara
896: \end{verbatim}\end{quote}
897: It may not be labelled
898: \begin{quote}\small\begin{verbatim}
899: Country=UK, Org=University College London, OU=Computer Science,
900: DSA=Alpaca
901: \end{verbatim}\end{quote}
902: or
903: \begin{quote}\small\begin{verbatim}
904: Country=France, Org=Inria, DSA=Llama
905: \end{verbatim}\end{quote}
906:
907:
908: A little more flexibility could be allowed;
909: However, this rule is simple, it prevents deadlock, and allows
910: for reasonable labelling practices.
911: The restriction may be relaxed somewhat, when the concept of Directory
912: Management Domains is introduced more formally.
913:
914: \chapter{Access Control and Authentication}
915:
916: \input{q-secdes}
917:
918: \chapter {Replicating Updates}
919: \label {des-first}
920: \label {dist-update}
921:
922:
923: \section {Basic Update Approach}
924: \label {edb-ros}
925:
926: QUIPU supports a simple automatic update
927: mechanism.
928: This allows for copying of Entry Data Blocks,
929: but with a simple check to ensure that only new information is copied.
930: Slave copies are obtained by use of a new remote operation.
931: The argument to the operation is the name of the Entry, and the
932: version number of the copy of the Entry Data Block held
933: locally.
934: A FULL copy of the Entry Data Block is returned if this version
935: is out of date.
936: In the DSA's entry, there is a list of Entry Data Blocks for which the DSA
937: has master or slave copies, and the DSA which it gets updates from.
938: For each Entry Data Block, there is the list of DSAs which pull the Entry
939: Data Block, and for slave copies, which DSA the update should come from.
940: It is assumed that this operation will be invoked sufficiently
941: often for it to be acceptable to consider the slave data as
942: ``official''.
943: For the type of usage being considered, this probably means several
944: times per day.
945: Within QUIPU, this operation is in a new protocol (QUIPU DSP), which will
946: also contains the DSP ASEs.
947: The operation is specified in Figure~\ref{getedb-py}.
948:
949: \tagrind {getedb}{EDB Access Operation}{getedb-py}
950: \clearpage
951:
952: Note that a DSA receiving a GetEDB operation, should check the associated
953: EDBInfo, to ensure that the DSA in question is allowed to pull a copy of
954: this EDB.
955:
956: The operation may be used to determine which version of the EDB is currently
957: master. This might be used when a query with dontUseCopy arrives, in order
958: to determine whether slave information is accurate. This would be a big
959: performance win for search and list operations, due to potnetila reduction
960: in information transferred.
961:
962: \chapter {Implementation Choices}
963:
964: \section {DSA Structure}
965:
966: Whilst the operation of a QUIPU DSA is fast, its
967: startup procedure is not, due to reading all of its data from a text file on
968: disk.
969: This long startup means that applications must be able to use
970: multiple DSAs, to prevent lockout whilst the local DSA starts up.
971: Also, the process structure of DSAs must be static.
972: To provide a system with reasonable availability, particularly in view of
973: the system's ability to perform extravagant searching, the basic
974: DSA must be able to handle multiple calls.
975: For this reason, apart from conformance issues, the DSA will be inherently
976: asynchronous, and will need to have its own internal scheduling.
977: Initially, this can be simple minded.
978: However, we are providing a framework for a system which is very
979: sophisticated in this area.
980:
981: The basic approach of the DSA is to have two (conceptually) co-routined modules, which are
982: interfaced by in-core C structures.
983: The first module is the DSA engine, which resolves inbound queries either
984: by looking them up in its in-core data structures or by generating further
985: queries.
986: The second module is the protocol engine.
987: This is responsible for opening and closing calls, and for mapping between
988: OPDUs on the network and C structures to be handled by the DSA engine.
989: The interface provided to the DSA is largely independent of DAP vs DSP.
990:
991: \subsection {Memory Structures}
992:
993: There are a number of structures which are of particular importance.
994: They are summarised here:
995:
996: \begin{itemize}
997: \item
998: The Entry is as the basic component of the in-core tree, which is linked
999: upwards and downwards between parents and children.
1000: The tree always starts at the root, even if there is no information beyond
1001: the RDN present.
1002: Where an entry corresponds to the base of an Entry Data Block, the parameters
1003: of the Entry Data Block are present.
1004: Siblings are linked in a chain.
1005: Each entry is represented by a `C' structure, which contains:
1006:
1007: \begin{itemize}
1008: \item
1009: Information on the linkage (hierarchical, and between siblings).
1010:
1011: \item
1012: How Entry Data Blocks are managed.
1013:
1014: \item
1015: How the ``special'' attributes (ACL, Schema, Alias, Password, DSA location
1016: info) are held.
1017: \end{itemize}
1018:
1019: \item
1020: There is a structure associated with each connection.
1021: This is used to represent actual and desired connections.
1022: These structures are linked into a list, and are the key point for the
1023: protocol module.
1024: They indicate a list of operations and tasks associated with each connection.
1025: When the DSA engine needs a connection, it will see if one is already
1026: open to the DSA in question. If it is not, a connection structure will be
1027: created, which the protocol engine will act on in due course.
1028: Similarly, the protocol engine will close down unneeded connections, possibly
1029: after some (intentional) delay.
1030:
1031: \item
1032: There is a Task structure associated with each query which arrives.
1033: This holds the {\em full} state of the task, so the the DSA can switch between
1034: tasks at intervals (typically when a network connection blocks).
1035: This points to the list of operations which have been generated by the task.
1036: This is the key structure for the DSA Engine.
1037:
1038: \item
1039: There is an Operation structure, associated with each pending operation.
1040: These structures are in mesh structure, arranged both by Task and Connection.
1041: \end{itemize}
1042:
1043: Multi-level priorities are associated with tasks and operations, which are
1044: used by both engines to control scheduling.
1045: This will be done in QUIPU 6.0 on two bases:
1046:
1047: \begin{itemize}
1048: \item The user specified priority
1049:
1050: \item The progress of the operation (long searches are downgraded in
1051: priority).
1052: \end{itemize}
1053:
1054: \subsection {Malloc}
1055:
1056: The above is optimised by careful use of malloc. \index{malloc}
1057: A purpose built malloc is used, this knows about the memory intensive DSA,
1058: and tries to ensure that data accessed at similar times during the DSA
1059: operation, will be stored in the same page of core memory.
1060: This has the effect that the number of page faults generated is
1061: significantly reduced (early results indicate a twenty percent improvement
1062: over the standard malloc supplied with SunOS4).
1063:
1064: \subsection {Disk Structures}
1065:
1066: All of
1067: the data for a given QUIPU DSA
1068: will be
1069: contained under a single (UNIX) directory. There will be a directory for
1070: each RDN, where the DSA in question has an Entry Data Block (which may be
1071: master, slave, or cached).
1072: The name of directory being that of the QUIPU text encoded RDN.
1073: Thus there will be a UNIX directory structure which corresponds to the
1074: portion of the DIT held in the DSA.
1075: There will be file in each RDN directory called ``EDB'', which has the
1076: authoritative version of the data, and one called ``EDB.bak'', which has the
1077: previous version.
1078: This might be extended to provide more comprehensive backup.
1079:
1080:
1081: When the system is booted, the following will occur:
1082:
1083: \begin{enumerate}
1084: \item
1085: Read tailoring information.
1086: \item
1087: Look for sequence of Entry Data Blocks implied by the DSAs name.
1088: These will usually be cached. for later reuse.
1089: If not, the default addresses must be used.
1090: \item
1091: With the DSA's own info available, read in the other master and slave Entry
1092: Data Blocks.
1093: \item
1094: Read in other Entry Data Blocks, checking for consistency.
1095: \end{enumerate}
1096:
1097: \section {OSI Choices}
1098:
1099: ROS (1988) and the implied protocols (ACSE and Presentation) will be used.
1100: Other combinations (e.g., TP0 over TCP or TP4 over CLNS may be used by
1101: bilateral agreement between DUA and DSA or DSA and DSA).
1102:
1103: To ensure full connectivity of the QUIPU Directory Service, one of the
1104: following conditions must be met:
1105:
1106: \begin{enumerate}
1107: \item Support of transport class 0 over international X.25(80) (This condition
1108: will be changed to support of CONS with access to the international X.25
1109: subnetwork, when such a statement is realistic).
1110:
1111: \item Access to a DSA which will perform application relaying in line with
1112: the procedures of Section~\ref {tcp-only}.
1113: This will need a bilateral agreement. It is hoped to establish ``well
1114: known'' DSAs which can serve this function for the following well known
1115: networks:
1116: \begin{itemize}
1117: \item Janet
1118: \item The DARPA/NSF Internet
1119: \end{itemize}
1120: \end{enumerate}
1121:
1122:
1123:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.