From: <di...@os...> - 2005-12-29 19:27:20
|
Author: dikim Date: 2005-12-29 14:27:11 -0500 (Thu, 29 Dec 2005) New Revision: 4091 Modified: trunk/lib/OSCAR/Database.pm trunk/scripts/oscar_wizard Log: Fix the bug that Node_Packages and Node_Package_Status tables were not correctly updated for the client nodes Modified: trunk/lib/OSCAR/Database.pm =================================================================== --- trunk/lib/OSCAR/Database.pm 2005-12-29 17:19:05 UTC (rev 4090) +++ trunk/lib/OSCAR/Database.pm 2005-12-29 19:27:11 UTC (rev 4091) @@ -68,6 +68,7 @@ get_packages_related_with_package get_packages_related_with_name get_packages_switcher + get_packages_servicelists get_packages_with_class set_group_packages del_group_packages @@ -1740,6 +1741,18 @@ return do_select($sql,$results_ref,$options_ref,$error_strings_ref); } +sub get_packages_servicelists{ + my ($results_ref, + $name, + $options_ref, + $error_strings_ref) = @_; + my $sql = "SELECT P.package, S.service " . + "FROM Packages P, Packages_servicelists S " . + "WHERE P.id=S.package_id "; + $sql .= ($name?" AND P.package='$name'":""); + return do_select($sql,$results_ref,$options_ref,$error_strings_ref); +} + sub set_group_nodes{ my ($group, $nodes_ref, @@ -1902,10 +1915,20 @@ } elsif ( $requested == 0 ) { print "Updating the status of $opkg to \"should not be installed\".\n"; } - die "$0:Failed to update the status of $opkg" - if(!update_table($options_ref,"Node_Package_Status",\%field_value_hash, $where, $error_strings_ref)); - - my $table = "Node_Packages"; + my @results = (); + my $table = "Node_Package_Status"; + get_node_package_status_with_node_package($node,$opkg,\@results,$options_ref,$error_strings_ref); + if(@results){ + die "$0:Failed to update the status of $opkg" + if(!update_table($options_ref,$table,\%field_value_hash, $where, $error_strings_ref)); + }else{ + %field_value_hash = ("node_id" => $node_id, + "package_id"=>$package_id, + "requested" => $requested); + die "$0:Failed to insert values into table $table" + if(!insert_into_table ($options_ref,$table,\%field_value_hash,$error_strings_ref)); + } + $table = "Node_Packages"; delete_table($options_ref,$table,$where,$error_strings_ref); %field_value_hash = ("node_id" => $node_id, "package_id"=>$package_id); @@ -2006,6 +2029,30 @@ return 1; } +sub get_node_package_status_with_node_package{ + my ($node, + $package, + $results, + $options_ref, + $error_strings_ref, + $requested, + $version) = @_; + my $sql = "SELECT Packages.package, Node_Package_Status.* " . + "From Packages, Node_Package_Status, Nodes ". + "WHERE Node_Package_Status.package_id=Packages.id ". + "AND Node_Package_Status.node_id=Nodes.id ". + "AND Nodes.name='$node' AND Packages.package='$package'"; + if(defined $requested && $requested ne ""){ + $sql .= " AND Node_Package_Status.requested=$requested "; + } + if(defined $version && $version ne ""){ + $sql .= " AND Packages.version=$version "; + } + die "$0:Failed to query values via << $sql >>" + if! do_select($sql,$results, $options_ref, $error_strings_ref); + return 1; +} + sub insert_packages{ my ($passed_ref, $table, $name,$path,$table_fields_ref, Modified: trunk/scripts/oscar_wizard =================================================================== --- trunk/scripts/oscar_wizard 2005-12-29 17:19:05 UTC (rev 4090) +++ trunk/scripts/oscar_wizard 2005-12-29 19:27:11 UTC (rev 4091) @@ -555,7 +555,7 @@ sub populate_client_group_nodes{ my @pkgs = list_selected_packages(); - my @tables = ("Nodes", "Group_Nodes", "Groups"); + my @tables = ("Nodes", "Group_Nodes", "Groups", "Packages", "Node_Package_Status", "Node_Packages"); locking("WRITE", \%options, \@tables, \@errors); my @client_nodes = (); get_client_nodes(\@client_nodes,\%options,\@errors); @@ -568,6 +568,11 @@ my $client_group = "oscar_clients"; set_group_nodes($client_group,\@nodes,\%options,\@errors); + # We assume that all the selected packages should be installed + my $status = 1; + foreach my $node_name (@nodes){ + update_node_package_status(\%options,$node_name,\@pkgs,$status,\@errors); + } unlock(\%options, \@errors); } @@ -600,10 +605,33 @@ }; run_command($window, $step_number, $cmd_vars); + &update_client_node_package_status; oscar_log_subsection('Update Wizard Env (as needed)'); @mod_env = WizardEnv::update_env(); } +sub update_client_node_package_status { + my @pkgs = list_selected_packages(); + my @tables = ("Nodes", "Packages", "Node_Package_Status", "Node_Packages"); + locking("WRITE", \%options, \@tables, \@errors); + my @client_nodes = (); + get_client_nodes(\@client_nodes,\%options,\@errors); + my @nodes = (); + foreach my $client_ref (@client_nodes){ + my $node_id = $$client_ref{id}; + my $node_name = $$client_ref{name}; + push @nodes, $node_name; + } + + # We assume that all the selected packages should be installed + my $status = 7; + foreach my $node_name (@nodes){ + update_node_package_status(\%options,$node_name,\@pkgs,$status,\@errors); + } + + unlock(\%options, \@errors); +} + ########################################################################### sub run_tests { |