Diff for /loncom/lonsql between versions 1.57 and 1.62

version 1.57, 2003/07/30 16:49:27 version 1.62, 2004/06/08 22:09:44
Line 41  Note that a lonsql.pid file contains the Line 41  Note that a lonsql.pid file contains the
   
 =head1 OVERVIEW  =head1 OVERVIEW
   
 The SQL database in LON-CAPA is used for catalog searches against  
 resource metadata only. The authoritative version of the resource  
 metadata is an XML-file on the normal file system (same file name as  
 resource plus ".meta"). The SQL-database is a cache of these files,  
 and can be reconstructed from the XML files at any time.  
   
 The current database is implemented assuming a non-adjustable  
 architecture involving these data fields (specific to each version of  
 a resource).  
   
 =over 4  
   
 =item * title  
   
 =item * author  
   
 =item * subject  
   
 =item * notes  
   
 =item * abstract  
   
 =item * mime  
   
 =item * language  
   
 =item * creationdate  
   
 =item * lastrevisiondate  
   
 =item * owner  
   
 =item * copyright   
   
 =back   
   
 =head2 Purpose within LON-CAPA  =head2 Purpose within LON-CAPA
   
 LON-CAPA is meant to distribute A LOT of educational content to A LOT  LON-CAPA is meant to distribute A LOT of educational content to A LOT
Line 139  use strict; Line 103  use strict;
   
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA::Configuration;  use LONCAPA::Configuration;
   use LONCAPA::lonmetadata();
   
 use IO::Socket;  use IO::Socket;
 use Symbol;  use Symbol;
Line 150  use Fcntl; Line 115  use Fcntl;
 use Tie::RefHash;  use Tie::RefHash;
 use DBI;  use DBI;
 use File::Find;  use File::Find;
   use localenroll;
   
 ########################################################  ########################################################
 ########################################################  ########################################################
Line 317  my $execdir=$perlvar{'lonDaemons'}; Line 283  my $execdir=$perlvar{'lonDaemons'};
 open (PIDSAVE,">$execdir/logs/lonsql.pid");  open (PIDSAVE,">$execdir/logs/lonsql.pid");
 print PIDSAVE "$$\n";  print PIDSAVE "$$\n";
 close(PIDSAVE);  close(PIDSAVE);
 &logthis("<font color=red>CRITICAL: ---------- Starting ----------</font>");  &logthis("<font color='red'>CRITICAL: ---------- Starting ----------</font>");
   
 #  #
 # Ignore signals generated during initial startup  # Ignore signals generated during initial startup
Line 388  sub make_new_child { Line 354  sub make_new_child {
                                     $perlvar{'lonSqlAccess'},                                      $perlvar{'lonSqlAccess'},
                                     { RaiseError =>0,PrintError=>0})) {                                       { RaiseError =>0,PrintError=>0})) { 
             sleep(10+int(rand(20)));              sleep(10+int(rand(20)));
             &logthis("<font color=blue>WARNING: Couldn't connect to database".              &logthis("<font color='blue'>WARNING: Couldn't connect to database".
                      ": $@</font>");                       ": $@</font>");
                      #  "($st secs): $@</font>");                       #  "($st secs): $@</font>");
             print "database handle error\n";              print "database handle error\n";
Line 416  sub make_new_child { Line 382  sub make_new_child {
     $queryid .= $run;      $queryid .= $run;
     print $client "$queryid\n";      print $client "$queryid\n";
     #      #
     &logthis("QUERY: $query - $arg1 - $arg2 - $arg3");      # &logthis("QUERY: $query - $arg1 - $arg2 - $arg3");
     sleep 1;      sleep 1;
             #              #
             my $result='';              my $result='';
Line 441  sub make_new_child { Line 407  sub make_new_child {
                     $result='no_such_file';                      $result='no_such_file';
                 }                  }
                 # end of log query                  # end of log query
               } elsif ($query eq 'fetchenrollment') {
                   # retrieve institutional class lists
                   my $dom = &unescape($arg1);
                   my %affiliates = ();
                   my %replies = ();
                   my $locresult = '';
                   my $querystr = &unescape($arg3);
                   foreach (split/%%/,$querystr) {
                       if (/^(\w+)=([^=]+)$/) {
                           @{$affiliates{$1}} = split/,/,$2;
                       }
                   }
                   $locresult = &localenroll::fetch_enrollment($dom,\%affiliates,\%replies);
                   $result = &escape($locresult.':');
                   if ($locresult) {
                       $result .= &escape(join(':',map{$_.'='.$replies{$_}} keys %replies));
                   }
             } else {              } else {
                 # Do an sql query                  # Do an sql query
                 $result = &do_sql_query($query,$arg1,$arg2);                  $result = &do_sql_query($query,$arg1,$arg2);
Line 448  sub make_new_child { Line 431  sub make_new_child {
             # result does not need to be escaped because it has already been              # result does not need to be escaped because it has already been
             # escaped.              # escaped.
             #$result=&escape($result);              #$result=&escape($result);
             # reply with result, append \n unless already there  
     $result.="\n" unless ($result=~/\n$/);  
             &reply("queryreply:$queryid:$result",$conserver);              &reply("queryreply:$queryid:$result",$conserver);
         }          }
         # tidy up gracefully and finish          # tidy up gracefully and finish
         #          #
         # close the database handle          # close the database handle
  $dbh->disconnect   $dbh->disconnect
             or &logthis("<font color=blue>WARNING: Couldn't disconnect".              or &logthis("<font color='blue'>WARNING: Couldn't disconnect".
                         " from database  $DBI::errstr : $@</font>");                          " from database  $DBI::errstr : $@</font>");
         # this exit is VERY important, otherwise the child will become          # this exit is VERY important, otherwise the child will become
         # a producer of more and more children, forking yourself into          # a producer of more and more children, forking yourself into
Line 511  sub do_sql_query { Line 492  sub do_sql_query {
         #prepare and execute the query          #prepare and execute the query
         my $sth = $dbh->prepare($query);          my $sth = $dbh->prepare($query);
         unless ($sth->execute()) {          unless ($sth->execute()) {
             &logthis("<font color=blue>WARNING: ".              &logthis('<font color="blue">'.
                      "Could not retrieve from database: $@</font>");                       'WARNING: Could not retrieve from database:'.
                        $sth->errstr().'</font>');
         } else {          } else {
             my $aref=$sth->fetchall_arrayref;              my $aref=$sth->fetchall_arrayref;
             foreach my $row (@$aref) {              foreach my $row (@$aref) {
Line 944  sub HUNTSMAN {                      # si Line 926  sub HUNTSMAN {                      # si
     kill 'INT' => keys %children;      kill 'INT' => keys %children;
     my $execdir=$perlvar{'lonDaemons'};      my $execdir=$perlvar{'lonDaemons'};
     unlink("$execdir/logs/lonsql.pid");      unlink("$execdir/logs/lonsql.pid");
     &logthis("<font color=red>CRITICAL: Shutting down</font>");      &logthis("<font color='red'>CRITICAL: Shutting down</font>");
     $unixsock = "mysqlsock";      $unixsock = "mysqlsock";
     my $port="$perlvar{'lonSockDir'}/$unixsock";      my $port="$perlvar{'lonSockDir'}/$unixsock";
     unlink($port);      unlink($port);
Line 955  sub HUPSMAN {                      # sig Line 937  sub HUPSMAN {                      # sig
     local($SIG{CHLD}) = 'IGNORE';  # we're going to kill our children      local($SIG{CHLD}) = 'IGNORE';  # we're going to kill our children
     kill 'INT' => keys %children;      kill 'INT' => keys %children;
     close($server);                # free up socket      close($server);                # free up socket
     &logthis("<font color=red>CRITICAL: Restarting</font>");      &logthis("<font color='red'>CRITICAL: Restarting</font>");
     my $execdir=$perlvar{'lonDaemons'};      my $execdir=$perlvar{'lonDaemons'};
     $unixsock = "mysqlsock";      $unixsock = "mysqlsock";
     my $port="$perlvar{'lonSockDir'}/$unixsock";      my $port="$perlvar{'lonSockDir'}/$unixsock";
Line 965  sub HUPSMAN {                      # sig Line 947  sub HUPSMAN {                      # sig
   
 sub DISCONNECT {  sub DISCONNECT {
     $dbh->disconnect or       $dbh->disconnect or 
     &logthis("<font color=blue>WARNING: Couldn't disconnect from database ".      &logthis("<font color='blue'>WARNING: Couldn't disconnect from database ".
              " $DBI::errstr : $@</font>");               " $DBI::errstr : $@</font>");
     exit;      exit;
 }  }
   
   
   
   
   
   
   
   
   
   
   
 # ----------------------------------- POD (plain old documentation, CPAN style)  
   
 =pod  =pod
   
 =back  =back

Removed from v.1.57  
changed lines
  Added in v.1.62


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