[LON-CAPA-cvs] cvs: loncom / LONCAPA.pm

foxr foxr at source.lon-capa.org
Mon Jul 4 05:25:53 EDT 2011


foxr		Mon Jul  4 09:25:53 2011 EDT

  Modified files:              
    /loncom	LONCAPA.pm 
  Log:
  Centralize knowledge of where the tmp dir is within LONCAPA.pm
  
  
  
Index: loncom/LONCAPA.pm
diff -u loncom/LONCAPA.pm:1.31 loncom/LONCAPA.pm:1.32
--- loncom/LONCAPA.pm:1.31	Sat May 14 16:12:53 2011
+++ loncom/LONCAPA.pm	Mon Jul  4 09:25:53 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Base routines
 #
-# $Id: LONCAPA.pm,v 1.31 2011/05/14 16:12:53 raeburn Exp $
+# $Id: LONCAPA.pm,v 1.32 2011/07/04 09:25:53 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -37,10 +37,27 @@
 use Fcntl qw(:flock);
 use GDBM_File;
 use POSIX;
+#use Apache::lonnet;
 
 my $loncapa_max_wait_time = 13;
 
 
+#--------------------------------------------------------------------------
+#
+#   The  constant definnitions below probably should really be in 
+#   a configuration file somewhere (loncapa.conf?) and loaded so that they can be 
+#   modified without requring source code changes:
+#
+#   COURSE_CACHE_TIME - Number of minutes after which an unaccessed
+#                       course.db or course_param.db file is considered
+#                       to be a stale cache of this info.
+#
+#   LONCAPA_TEMPDIR   - Place loncapa puts temporary files
+#
+
+my  $COURSE_CACHE_TIME =  60;	# minutes course cache file is considered valid. 
+my  $LONCAPA_TEMPDIR   =  '/tmp/'; # relative to configuration{'lonTabDir'}.
+
 use vars qw($match_domain   $match_not_domain
 	    $match_username $match_not_username
 	    $match_courseid $match_not_courseid
@@ -53,14 +70,14 @@
 our @ISA = qw (Exporter);
 our @EXPORT = qw(&add_get_param    &escape            &unescape       
 		 &tie_domain_hash  &untie_domain_hash &tie_user_hash
-		 &untie_user_hash  &propath);
+		 &untie_user_hash  &propath &tie_course);
 our @EXPORT_OK = qw($match_domain   $match_not_domain
 		    $match_username $match_not_username
 		    $match_courseid $match_not_courseid
                     $match_community
 		    $match_name
 		    $match_lonid
-		    $match_handle   $match_not_handle);
+		    $match_handle   $match_not_handle &tie_course);
 our %EXPORT_TAGS = ( 'match' =>[qw($match_domain   $match_not_domain
 				   $match_username $match_not_username
 				   $match_courseid $match_not_courseid
@@ -71,6 +88,61 @@
 my %perlvar;
 
 
+#
+# If necessary fetch and tie a user's image of the course hash 
+# to the specified hash
+# Parameters:
+#   domain   - User's domain
+#   user     - Name of user.
+#   course   - Course number.
+#   cdom     - Domain that is home to the course
+#   hash     - reference to the has to tie.
+#
+# Side effects:
+#   a gdbm file and it's associated lock file will be created in the 
+#   tmp directory tree.
+#
+# Returns:
+#   0 - failure.
+#   1 - success.
+#
+#  Note:
+#     It's possible the required user's db file is already present in the tempdir.
+#     in that case a decision must be made about whether or not to just tie to it
+#     or to fetch it again. Remember this sub could be called in the context of a user
+#     other than the one whose data are being fetched.  We don't know if that user already
+#     has a live session on this server.  What we'll do is only re-fetch if the hash atime.
+#     is older than COURSE_CACHE_TIME...that is if it's been accessed relatively recently
+#     where COURSE_CACHE_TIME defines the caching time.
+#
+#     The database files this function creates are of the form:
+#     $user@$domain_$course@$cdom.{db,lock}
+#     This differs from the prior filenames.  Therefore if a module does its own
+#     caching (That's a coding no-no) and does not use this centralized sub,
+#     multiple cache files for the same course/user will be created. 
+#  
+sub tie_course {
+    my ($domain, $user, $course, $cdom, $hash) = @_;
+
+    #
+    #  See if we need to re-fetch the course data
+    #
+
+    
+}
+
+# Return a string that is the path in which loncapa puts temp files:
+
+sub tempdir {
+    my $result =  $perlvar{'lonDaemons'}.$LONCAPA_TEMPDIR; # to allow debugging.
+    return $result;
+}
+
+
+#----------------------------------------------------------------------
+#
+#  some of these subs need a bit of documentation
+
 sub add_get_param {
     my ($url,$form_data) = @_;
     my $needs_question_mark = ($url !~ /\?/);
@@ -407,6 +479,7 @@
     }
 }
 
+
 BEGIN {
     %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')};
 }
@@ -497,6 +570,37 @@
   hash to which the database is tied.  It's up to the caller to untie.
   undef if the has could not be tied.
 
+=item tie_course
+
+Caches the course database into the temp directory in the context of a specific
+user and ties it to a hash.
+Parameters:
+   domain    - Domain the user is in.
+   user      - Username of the user.
+   course    - Course specification
+   cdom      - The course domain.
+   hash      - Reference to the hash to tie.
+
+Returns:
+    1        - Success
+    0        - Failure.
+
+=item tie_course_params
+
+Caches the course parameter database into the temp directory in the context
+of a specific user and ties it to a hash.
+Parameters:
+   domain   - Domain the user is in.
+   user     - Username of the user.
+   course   - course specification.
+   cdom     - The course domain.
+   hash     - reference to the hash to tie.
+
+Returns:
+   1        - Success.
+   0        - Failure./
+
+
 =item locking_hash_tie()
 
 routines if you just have a filename return tied hashref or undef
@@ -505,8 +609,17 @@
 
 =item db_filename_parts()
 
+=back
+
+=item tempdir()
+
+Returns the file system path to the place loncapa temporary files should be placed/found.
+
+
 =head1 INTERNAL SUBROUTINES
 
+=over 
+
 =item _do_hash_tie()
 
 =item _do_hash_untie()




More information about the LON-CAPA-cvs mailing list