Annotation of doc/homework/storage.html, revision 1.3

1.1       albertel    1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                      2: <html>
                      3:   <head>
                      4:     <title>Store / Restore</title>
                      5:   </head>
                      6: 
                      7:   <body>
                      8:     <h1>Store / Restore</h1>
                      9: 
                     10:     <p>
                     11:       2 important functions in lonnet.pm are
                     12:       <tt>&Apache::lonnet::store()</tt> and
                     13:       <tt>&Apache::lonnet:restore()</tt>. These functions are for
                     14:       handlers to store a perl hash to a users permanent data space in
                     15:       an easy manner, and to retrieve it again on another call.  It is
                     16:       expected that a handler would use this once at the begining to
                     17:       retrieve data. And then once at the end to send only the new
                     18:       data back.
                     19:     </p>
                     20:     <p>
                     21:       The hash that is returned by <tt>restore</tt> will have all of
                     22:       the previous value for all of the elments of the hash.
                     23:     </p>
                     24:     <p>
                     25:       Example: 
                     26:     </p>
                     27:     <pre>
                     28: #creating a hash
                     29: my %hash;
                     30: $hash{'foo'}='bar';
                     31: #storing it
                     32: &Apache::lonnet::store(\%hash);
                     33: #changing a value 
                     34: $hash{'foo'}='notbar';
                     35: #adding a new value
                     36: $hash{'bar'}='foo';
                     37: &Apache::lonnet::store(\%hash);
                     38: #retrieving the hash
                     39: my %history=&Apache::lonnet::restore();
                     40: #print the hash
                     41: foreach my $key (sort(keys(%history))) {
                     42:     print("\%history{$key} = $history{$key}");
                     43: }
                     44:     </pre>
                     45:     Will print out:
                     46:     <pre>
                     47: %history{1:foo} = bar
                     48: %history{1:keys} = foo:timestamp
                     49: %history{1:timestamp} = 990455579
                     50: %history{2:bar} = foo
                     51: %history{2:foo} = notbar
                     52: %history{2:keys} = foo:bar:timestamp
                     53: %history{2:timestamp} = 990455580
                     54: %history{bar} = foo
                     55: %history{foo} = notbar
                     56: %history{timestamp} = 990455580
                     57: %history{version} = 2
                     58:     </pre>
                     59:     <p>
                     60:       Note that the special hash entries <i>keys</i>, <i>version</i>
                     61:       and <i>timestamp</i> were added to the hash. <i>version</i> will
                     62:       be equal to the total number of versions of the data that have
                     63:       been stored. The <i>timestamp</i> attribute will be the UNIX
                     64:       time the hash was stored. <i>keys</i> is available in every
                     65:       historical section to list which keys were added or changed
                     66:       at a specific historical revision of a hash.
                     67:     </p>
                     68:     <p>
                     69:       <b>Warning</b> do not store the hash that restore returns
                     70:       directly. This will cause a mess since it will restore the
                     71:       historical keys as if the were new keys. I.E. <tt>1:foo</tt>
                     72:       will become <tt>1:1:foo</tt> etc.
                     73:     </p>
                     74:     <h3>
                     75:       Calling convention:
                     76:     </h3>
                     77:     <pre>
1.2       albertel   78:   my %record=&Apache::lonnet::restore($symb,$courseid,$domain,$uname);
                     79:   &Apache::lonnet::store(\%newrecord,$symb,$courseid,$domain,$uname);
1.1       albertel   80:     </pre>
                     81:     <h4>
                     82:       Arguments (only %newrecord is required the rest are somewhat
                     83:       optional, read the details):
                     84:     </h4>
                     85:     <ul>
                     86:       <li>
                     87: 	<i>$symb</i> - a string containing the internal name of the
                     88: 	specific instance of a resource. Usually this value can be
                     89: 	gotten from
                     90: 	<tt>&Apache::lonnet::symbread($filename)</tt>. If the
                     91: 	argument is blank, it will attempt to use <tt>symbread()</tt>
                     92: 	for it. If the result is ambiguous store/restore will fail.
                     93:       </li>
                     94:       <li>
                     95: 	<i>$courseid</i> - the internal name for a course, usually
1.3     ! albertel   96: 	found in <tt>$env{'request.course.id'}</tt> which is what will
1.1       albertel   97: 	be looked at if no value is passed to the functions.
                     98:       </li>
                     99:       <li>
                    100: 	<i>$domain</i> - the domain that the user belongs to, usually
1.3     ! albertel  101: 	found in <tt>$env{'user.domain'}</tt> which is what will be
1.1       albertel  102: 	looked at if no value is passed to the functions.
                    103:       </li>
                    104:       <li>
                    105: 	<i>$uname</i> - the login name for the user, usually
1.3     ! albertel  106: 	found in <tt>$env{'user.name'}</tt> which is what will
1.1       albertel  107: 	be looked at if no value is passed to the functions.
                    108:       </li>
                    109:       <li>
                    110: 	<i>\%newrecord</i> - the hash to store being passed by reference
                    111:       </li>
                    112:     </ul>
                    113:     <h4>
                    114:       Return values:
                    115:     </h4>
                    116:     <ul>
                    117:       <li>
                    118: 	<i>an empty string</i> - the function was unable to determine
                    119: 	exactly where to store or restore from. At least one of the
                    120: 	"optional" arguments was unable to be determined. 
                    121:       </li>
                    122:       <li>
                    123: 	<i>a hash</i> - restore successfully read a old hash for this
                    124: 	specific user / resource instance.
                    125:       </li>
                    126:       <li>
1.2       albertel  127: 	<i>no_such_host</i> - the homeserver dosen't exist
1.1       albertel  128: 	in the network.
                    129:       </li>
                    130:       <li>
1.2       albertel  131: 	<i>con_delayed</i> - the homeserver was uncontactable at
1.1       albertel  132: 	this time. The store will be delayed until it is again
                    133: 	available.
                    134:       </li>
                    135:       <li>
1.2       albertel  136: 	<i>con_failed</i> - the homeserver was uncontactable at this
1.1       albertel  137: 	time and store was unable to delay the store until a later
                    138: 	time. The store failed.
                    139:       </li>
                    140:       <li>
                    141: 	<i>ok</i> - the store completed succesfully
                    142:       </li>
                    143:       <li>
                    144: 	<i>error:</i> - remote server failied to store or restore the
                    145: 	reason follows the :
                    146:       </li>
                    147:     </ul>
                    148:     <hr>
                    149:     <address><a href="mailto:albertel@marvin.lite.msu.edu">Guy Albertelli</a></address>
                    150: <!-- Created: Mon May 21 09:58:20 EDT 2001 -->
                    151: <!-- hhmts start -->
1.2       albertel  152: Last modified: Wed May 30 10:52:16 EDT 2001
1.1       albertel  153: <!-- hhmts end -->
                    154:   </body>
                    155: </html>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>