Author: fapeeler
Date: Mon Aug 16 20:18:17 2010
New Revision: 986123
URL: http://svn.apache.org/viewvc?rev=986123&view=rev
Log:
VCL-254
removed 4hr and 2hr window checks, now if a block allocation is within 6hrs it
gets processed.
added get_group_name and get_user_info, to get information on sending a
confirmation message to the owner
Modified:
incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm
incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm
incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
Modified: incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm?rev=986123&r1=986122&r2=986123&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/DataStructure.pm Mon Aug 16
20:18:17 2010
@@ -105,6 +105,7 @@ $SUBROUTINE_MAPPINGS{blockrequest_name}
$SUBROUTINE_MAPPINGS{blockrequest_image_id} =
'$self->blockrequest_data->{BLOCKREQUEST_ID}{imageid}';
$SUBROUTINE_MAPPINGS{blockrequest_number_machines} =
'$self->blockrequest_data->{BLOCKREQUEST_ID}{numMachines}';
$SUBROUTINE_MAPPINGS{blockrequest_group_id} =
'$self->blockrequest_data->{BLOCKREQUEST_ID}{groupid}';
+$SUBROUTINE_MAPPINGS{blockrequest_group_name} =
'$self->blockrequest_data->{BLOCKREQUEST_ID}{groupname}';
$SUBROUTINE_MAPPINGS{blockrequest_repeating} =
'$self->blockrequest_data->{BLOCKREQUEST_ID}{repeating}';
$SUBROUTINE_MAPPINGS{blockrequest_owner_id} =
'$self->blockrequest_data->{BLOCKREQUEST_ID}{ownerid}';
$SUBROUTINE_MAPPINGS{blockrequest_admin_group_id} =
'$self->blockrequest_data->{BLOCKREQUEST_ID}{admingroupid}';
Modified: incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm?rev=986123&r1=986122&r2=986123&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm Mon Aug 16
20:18:17 2010
@@ -133,8 +133,21 @@ sub process {
my $blocktime_end = $self->data->get_blocktime_end();
my $blockrequest_name = $self->data->get_blockrequest_name();
my $blockrequest_owner_id =
$self->data->get_blockrequest_owner_id();
+ my $block_group_id =
$self->data->get_blockrequest_group_id();
+ my $block_group_name =
$self->data->get_blockrequest_group_name();
-
+ # Get user info
+ my %info;
+ my $owner_affiliation_sitewwwaddress;
+ my $owner_affiliation_helpaddress;
+ my $owner_email;
+
+ if( %info = get_user_info($blockrequest_owner_id)){
+ $owner_email = $info{email};
+ $owner_affiliation_helpaddress = $info{helpaddress};
+ $owner_affiliation_sitewwwaddress = $info{sitewwwaddress};
+ }
+
#Set local timer
my $localtimer = convert_to_epoch_seconds();
@@ -146,7 +159,9 @@ sub process {
notify($ERRORS{'DEBUG'}, 0, "blocktime id: $blocktime_id");
notify($ERRORS{'DEBUG'}, 0, "blocktime processed:
$blocktime_processed");
notify($ERRORS{'DEBUG'}, 0, "blocktime start: $blocktime_start");
- notify($ERRORS{'DEBUG'}, 0, "blocktime end: $blocktime_end");
+ notify($ERRORS{'DEBUG'}, 0, "owner email: $owner_email");
+ notify($ERRORS{'DEBUG'}, 0, "help address: $owner_email");
+ notify($ERRORS{'DEBUG'}, 0, "owner www addr:
$owner_affiliation_sitewwwaddress");
if ($blockrequest_mode eq "start") {
@@ -217,14 +232,41 @@ sub process {
}
- #pause
- if (pauseprocessing($localtimer)) {
- notify($ERRORS{'OK'}, 0, "past check window for this
request, -- ok to proceed");
+ # Notify block request owner for given time slot has been
processed.
+
+ if($completed){
+
+ my $subject = "VCL Block allocation results for
$blockrequest_name";
+ my $mailstring .= <<"EOF";
+The block allocation for $blockrequest_name was processed with the following
results:
+
+Block allocation name = $blockrequest_name
+Machines allocated = $allocated
+Machines requested = $blockrequest_number_machines
+Block Start time = $blocktime_start
+Block End time = $blocktime_end
+User Group = $block_group_name
+
+The machines for this block allocation will be loaded up to an hour before the
actual start time.
+Once loaded the users listed in the user group $block_group_name will be able
to login up to 15 minutes
+before the start time.
+
+To make changes or to view the status of this block allocation. Please visit,
+$owner_affiliation_sitewwwaddress/scheduling/index.php?mode=blockAllocations
+
+EOF
+ if(defined($owner_email)){
+ mail($owner_email, $subject, $mailstring,
$owner_affiliation_helpaddress);
+ }
+
}
+
+ sleep 10;
if (update_blockrequest_processing($blockrequest_id, 0)) {
notify($ERRORS{'OK'}, 0, "Removed processing flag on
blockrequest_id $blockrequest_id");
}
+
} ## end if ($blockrequest_mode eq "start")
elsif ($blockrequest_mode eq "end") {
@@ -241,7 +283,7 @@ sub process {
if ($status eq "expire") {
#fork start processing
notify($ERRORS{'OK'}, 0, "Block Request
$blockrequest_id has expired");
-
if(udpate_block_request_status($blockrequest_id,"completed"){
+
if(udpate_block_request_status($blockrequest_id,"completed")){
notify($ERRORS{'OK'}, 0, "Updated status of
blockRequest id $blockrequest_id to completed");
}
return 1;
Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=986123&r1=986122&r2=986123&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Mon Aug 16 20:18:17 2010
@@ -115,6 +115,7 @@ our @EXPORT = qw(
get_current_file_name
get_current_package_name
get_current_subroutine_name
+ get_group_name
get_highest_imagerevision_info
get_image_info
get_imagemeta_info
@@ -133,6 +134,7 @@ our @EXPORT = qw(
get_resource_groups
get_managable_resource_groups
get_vmhost_info
+ get_user_info
getdynamicaddress
getimagesize
getnewdbh
@@ -996,15 +998,8 @@ sub check_blockrequest_time {
#notify($ERRORS{'DEBUG'}, 0, "start: $start_datetime, epoch:
$start_time_epoch_seconds, delta: $start_delta_minutes minutes");
#notify($ERRORS{'DEBUG'}, 0, "end: $end_datetime, epoch:
$end_time_epoch_seconds, delta: $end_delta_minutes minutes");
- # 4:00 to 4:15 hours in advance: start assigning resources
- if ($start_delta_minutes >= (4 * 60) && $start_delta_minutes <= (4 * 60
+ 10)) {
- # Block request within start window
- notify($ERRORS{'OK'}, 0, "block request start time is within
start window ($start_delta_minutes minutes from now), returning 'start'");
- return "start";
- }
-
- # 2:00 to 2:15 hours in advance: start assigning resources
- if ($start_delta_minutes >= (2 * 60) && $start_delta_minutes <= (2 * 60
+ 10)) {
+ # if 30min to 6 hrs in advance: start assigning resources
+ if ($start_delta_minutes >= (30) && $start_delta_minutes <= (6 * 60)) {
# Block request within start window
notify($ERRORS{'OK'}, 0, "block request start time is within
start window ($start_delta_minutes minutes from now), returning 'start'");
return "start";
@@ -4877,6 +4872,7 @@ sub get_management_node_requests {
return %requests;
} ## end sub get_management_node_requests
+
#/////////////////////////////////////////////////////////////////////////////
=head2 get_image_info
@@ -7595,6 +7591,7 @@ sub get_management_node_blockrequests {
WHERE
blockRequest.managementnodeid = $managementnode_id AND
blockRequest.status = 'accepted' AND
+ blockTimes.processed = '0' AND
(blockTimes.skip = '0' AND blockTimes.start < (NOW() + INTERVAL 360
MINUTE )) OR
blockTimes.end < NOW()
";
@@ -7631,6 +7628,9 @@ sub get_management_node_blockrequests {
if ($key =~ /blockRequest_/) {
$blockrequests{$blockrequest_id}{$original_key}
= $value;
+ if($key =~ /_groupid/){
+
$blockrequests{$blockrequest_id}{groupname} = get_group_name($value);
+ }
}
elsif ($key =~ /blockTimes_/) {
$blockrequests{$blockrequest_id}{blockTimes}{$blocktimes_id}{$original_key} =
$value;
@@ -7875,6 +7875,115 @@ sub get_computer_grp_members {
#/////////////////////////////////////////////////////////////////////////////
+=head2 get_user_info
+
+ Parameters : $user_id
+ Returns : scalar - group name
+ Description :
+
+=cut
+
+sub get_user_info {
+ my ($user_id) = @_;
+
+
+ if(!defined($user_id)){
+ notify($ERRORS{'WARNING'}, $LOGFILE, "user_id was not
supplied");
+ return 0;
+ }
+
+ my $select_statement = <<EOF;
+SELECT DISTINCT
+user.*,
+affiliation.sitewwwaddress AS sitewwwaddress,
+affiliation.helpaddress AS helpaddress
+FROM
+user,
+affiliation
+WHERE
+user.id = $user_id AND
+affiliation.id = user.affiliationid
+EOF
+
+ # Call the database select subroutine
+ # This will return an array of one or more rows based on the select
statement
+ my @selected_rows = database_select($select_statement);
+
+ # Check to make sure 1 row was returned
+ if (scalar @selected_rows == 0) {
+ notify($ERRORS{'OK'}, 0, "user id $user_id was not found in
the database, 0 rows were returned");
+ return ();
+ }
+ elsif (scalar @selected_rows > 1) {
+ notify($ERRORS{'WARNING'}, 0, "" . scalar @selected_rows . "
rows were returned from database select");
+ return ();
+ }
+
+ # A single row was returned (good)
+ # Return the hash
+ return %{$selected_rows[0]};
+
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 get_group_name
+
+ Parameters : $group_id
+ Returns : scalar - group name
+ Description :
+
+=cut
+
+sub get_group_name {
+ my ($group_id) = @_;
+
+
+ if(!defined($group_id)){
+ notify($ERRORS{'WARNING'}, $LOGFILE, "group_id was not
supplied");
+ return 0;
+ }
+
+ my $select_statement = <<EOF;
+SELECT DISTINCT
+usergroup.name
+FROM
+usergroup
+WHERE
+usergroup.id = $group_id
+EOF
+
+
+ # Call the database select subroutine
+ # This will return an array of one or more rows based on the select
statement
+ my @selected_rows = database_select($select_statement);
+
+ # Check to make sure 1 row was returned
+ if (scalar @selected_rows == 0) {
+ notify($ERRORS{'WARNING'}, 0, "zero rows were returned from
database select");
+ return ();
+ }
+ elsif (scalar @selected_rows > 1) {
+ notify($ERRORS{'WARNING'}, 0, "" . scalar @selected_rows . "
rows were returned from database select");
+ return ();
+ }
+
+ # Get the single returned row
+ # It contains a hash
+ my $end;
+
+ # Make sure we return undef if the column wasn't found
+ if (defined $selected_rows[0]{name}) {
+ my $groupname = $selected_rows[0]{name};
+ return $groupname;
+ }
+ else {
+ return undef;
+ }
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
=head2 get_computer_info
Parameters : $computer_id