You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by ar...@apache.org on 2009/01/13 17:42:54 UTC
svn commit: r734175 - in /incubator/vcl/trunk/managementnode/lib/VCL:
inuse.pm utils.pm
Author: arkurth
Date: Tue Jan 13 08:42:37 2009
New Revision: 734175
URL: http://svn.apache.org/viewvc?rev=734175&view=rev
Log:
VCL-49
Fixed a bug which could cause multiple state processes to be running at the same time for a reservation. This should never happen. inuse.pm was clearing all computerloadlog rows for the reservation when it began processing, including the entry matching computerloadstate = 'begin'. This entry is used by vcld to determine if any other reservation processes are running before forking a new one. This caused vcld to fork an image process when a user initiates imaging while an inuse process is running.
Extended utils.pm::delete_computerloadlog_reservation to allow you to specify the load state names which shouldn't be deleted by prepending a '!' to the load state name argument.
Modified the call to delete_computerloadlog_reservation in inuse.pm to specify that 'begin' entries should not be deleted.
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm
incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm?rev=734175&r1=734174&r2=734175&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/inuse.pm Tue Jan 13 08:42:37 2009
@@ -134,8 +134,8 @@
# Check if this is an imaging request, causes process to exit if state or laststate = image
$request_forimaging = $self->_check_imaging_request();
- # Remove rows from computerloadlog for this reservation
- if (delete_computerloadlog_reservation($reservation_id)) {
+ # Remove rows from computerloadlog for this reservation, don't remove the loadstate=begin row
+ if (delete_computerloadlog_reservation($reservation_id, '!begin')) {
notify($ERRORS{'OK'}, 0, "rows removed from computerloadlog table for reservation $reservation_id");
}
else {
Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=734175&r1=734174&r2=734175&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Tue Jan 13 08:42:37 2009
@@ -8124,7 +8124,11 @@
Parameters : $reservation_id, optional loadstatename
Returns : 0 failed or 1 success
- Description : Deletes rows from the computerloadlog table
+ Description : Deletes rows from the computerloadlog table. A loadstatename
+ argument can be specified to limit the rows removed to a
+ certain loadstatename. To delete all rows except those
+ matching a certain loadstatename, begin the loadstatename
+ with a !.
=cut
@@ -8142,7 +8146,9 @@
my $sql_statement;
# Check if loadstateid was specified
# If so, only delete rows matching the loadstateid
- if ($loadstatename) {
+ if ($loadstatename && $loadstatename !~ /^!/) {
+ notify($ERRORS{'DEBUG'}, 0, "removing computerloadlog entries matching loadstate = $loadstatename");
+
$sql_statement = "
DELETE
computerloadlog
@@ -8155,7 +8161,26 @@
AND computerloadstate.loadstatename = \'$loadstatename\'
";
}
+ elsif ($loadstatename) {
+ # Remove the first character of loadstatename, it is !
+ $loadstatename = substr($loadstatename, 1);
+ notify($ERRORS{'DEBUG'}, 0, "removing computerloadlog entries NOT matching loadstate = $loadstatename");
+
+ $sql_statement = "
+ DELETE
+ computerloadlog
+ FROM
+ computerloadlog,
+ computerloadstate
+ WHERE
+ computerloadlog.reservationid = $reservation_id
+ AND computerloadlog.loadstateid = computerloadstate.id
+ AND computerloadstate.loadstatename != \'$loadstatename\'
+ ";
+ }
else {
+ notify($ERRORS{'DEBUG'}, 0, "removing all computerloadlog entries for reservation");
+
$loadstatename = 'all';
$sql_statement = "
DELETE
@@ -8169,11 +8194,11 @@
# Call the database execute subroutine
if (database_execute($sql_statement)) {
- notify($ERRORS{'OK'}, 0, "deleted rows from computerloadlog table where reservation id=$reservation_id, loadstatename=$loadstatename");
+ notify($ERRORS{'OK'}, 0, "deleted rows from computerloadlog for reservation id=$reservation_id");
return 1;
}
else {
- notify($ERRORS{'WARNING'}, 0, "unable to delete from computerloadlog table where reservation id=$reservation_id, loadstatename=$loadstatename");
+ notify($ERRORS{'WARNING'}, 0, "unable to delete from computerloadlog table for reservation id=$reservation_id");
return 0;
}
} ## end sub delete_computerloadlog_reservation