version 1.56, 2003/07/25 17:07:06
|
version 1.61, 2004/05/20 14:15:29
|
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 251 unless ($dbh = DBI->connect("DBI:mysql:l
|
Line 216 unless ($dbh = DBI->connect("DBI:mysql:l
|
my $subj="LON: $perlvar{'lonHostID'} Cannot connect to database!"; |
my $subj="LON: $perlvar{'lonHostID'} Cannot connect to database!"; |
system("echo 'Cannot connect to MySQL database!' |". |
system("echo 'Cannot connect to MySQL database!' |". |
" mailto $emailto -s '$subj' > /dev/null"); |
" mailto $emailto -s '$subj' > /dev/null"); |
|
|
|
open(SMP,'>/home/httpd/html/lon-status/mysql.txt'); |
|
print SMP 'time='.time.'&mysql=defunct'."\n"; |
|
close(SMP); |
|
|
exit 1; |
exit 1; |
} else { |
} else { |
$dbh->disconnect; |
$dbh->disconnect; |
Line 312 my $execdir=$perlvar{'lonDaemons'};
|
Line 282 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 383 sub make_new_child {
|
Line 353 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 411 sub make_new_child {
|
Line 381 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 443 sub make_new_child {
|
Line 413 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 506 sub do_sql_query {
|
Line 474 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 939 sub HUNTSMAN { # si
|
Line 908 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 950 sub HUPSMAN { # sig
|
Line 919 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 960 sub HUPSMAN { # sig
|
Line 929 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 |