[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