From ed59575e36f4ba287dd54f9f4f5af23baee5cb78 Mon Sep 17 00:00:00 2001 From: jbjohnso Date: Sat, 14 Mar 2009 15:45:07 +0000 Subject: [PATCH] -Reduce memory consumption through not moving modules into shorter lifetime places git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2898 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/blade.pm | 10 +++++++-- xCAT-server/lib/xcat/plugins/kvm.pm | 30 +++++++++++++-------------- xCAT-server/lib/xcat/plugins/xen.pm | 22 ++++++++------------ 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/blade.pm b/xCAT-server/lib/xcat/plugins/blade.pm index 224d3c659..9d68a2c47 100644 --- a/xCAT-server/lib/xcat/plugins/blade.pm +++ b/xCAT-server/lib/xcat/plugins/blade.pm @@ -12,7 +12,6 @@ use Thread qw(yield); use xCAT::Utils; use xCAT::Usage; use IO::Socket; -use SNMP; use xCAT::GlobalDef; use xCAT_monitoring::monitorctrl; use strict; @@ -2033,9 +2032,16 @@ sub process_request { } exit 0; }; - my $request = shift; my $callback = shift; + eval { + require SNMP; + } + if ($@) { + $callback->{error=>['Missing SNMP perl support'],errorcode=>[1]}; + return; + } + my $doreq = shift; my $level = shift; my $noderange = $request->{node}; diff --git a/xCAT-server/lib/xcat/plugins/kvm.pm b/xCAT-server/lib/xcat/plugins/kvm.pm index b1abd3fda..c9db6153d 100644 --- a/xCAT-server/lib/xcat/plugins/kvm.pm +++ b/xCAT-server/lib/xcat/plugins/kvm.pm @@ -1,8 +1,6 @@ #!/usr/bin/env perl # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html package xCAT_plugin::kvm; -my $libvirtsupport; -$libvirtsupport = eval { require Sys::Virt; }; BEGIN { $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat'; @@ -12,18 +10,17 @@ use xCAT::GlobalDef; use xCAT::NodeRange; use xCAT_monitoring::monitorctrl; -#use Net::SNMP qw(:snmp INTEGER); use xCAT::Table; use XML::Simple qw(XMLout); use Thread qw(yield); use IO::Socket; use IO::Select; -use SNMP; use strict; #use warnings; my %vm_comm_pids; my @destblacklist; my $vmhash; +my $nthash; #to store nodetype data my $hmhash; use XML::Simple; @@ -74,7 +71,6 @@ my $hyp; my $doreq; my %hyphash; my $node; -my $hmtab; my $vmtab; sub waitforack { @@ -579,15 +575,6 @@ sub preprocess_request { my $request = shift; if ($request->{_xcatdest}) { return [$request]; } #exit if preprocessed my $callback=shift; - unless ($libvirtsupport) { #Try to see if conditions changed since last check (no xCATd restart for it to take effect) - $libvirtsupport = eval { require Sys::Virt; }; - } - unless ($libvirtsupport) { #Still no Sys::Virt module - $callback->({error=>"Sys::Virt perl module missing, unable to fulfill Xen plugin requirements",errorcode=>[42]}); - return []; - } - require Sys::Virt::Domain; - %runningstates = (&Sys::Virt::Domain::STATE_NOSTATE=>1,&Sys::Virt::Domain::STATE_RUNNING=>1,&Sys::Virt::Domain::STATE_BLOCKED=>1); my @requests; my $noderange = $request->{node}; #Should be arrayref @@ -642,10 +629,14 @@ sub grab_table_data{ #grab table data relevent to VM guest nodes my $noderange=shift; my $callback=shift; $vmtab = xCAT::Table->new("vm"); - $hmtab = xCAT::Table->new("nodehm"); + my $hmtab = xCAT::Table->new("nodehm"); + my $nttab = xCAT::Table->new("nodetype"); if ($hmtab) { $hmhash = $hmtab->getNodesAttribs($noderange,['serialspeed']); } + if ($nttab) { + $hmhash = $hmtab->getNodesAttribs($noderange,['serialspeed']); + } unless ($vmtab) { $callback->({data=>["Cannot open vm table"]}); return; @@ -663,9 +654,16 @@ sub process_request { } exit 0; }; - my $request = shift; my $callback = shift; + my $libvirtsupport = eval { require Sys::Virt; }; + unless ($libvirtsupport) { #Still no Sys::Virt module + $callback->({error=>"Sys::Virt perl module missing, unable to fulfill KVM plugin requirements",errorcode=>[42]}); + return []; + } + require Sys::Virt::Domain; + %runningstates = (&Sys::Virt::Domain::STATE_NOSTATE=>1,&Sys::Virt::Domain::STATE_RUNNING=>1,&Sys::Virt::Domain::STATE_BLOCKED=>1); + $doreq = shift; my $level = shift; my $noderange = $request->{node}; diff --git a/xCAT-server/lib/xcat/plugins/xen.pm b/xCAT-server/lib/xcat/plugins/xen.pm index 5dee1d3df..04542b61b 100644 --- a/xCAT-server/lib/xcat/plugins/xen.pm +++ b/xCAT-server/lib/xcat/plugins/xen.pm @@ -1,8 +1,6 @@ #!/usr/bin/env perl # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html package xCAT_plugin::xen; -my $libvirtsupport; -$libvirtsupport = eval { require Sys::Virt; }; BEGIN { $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat'; @@ -12,13 +10,11 @@ use xCAT::GlobalDef; use xCAT::NodeRange; use xCAT_monitoring::monitorctrl; -#use Net::SNMP qw(:snmp INTEGER); use xCAT::Table; use XML::Simple qw(XMLout); use Thread qw(yield); use IO::Socket; use IO::Select; -use SNMP; use strict; #use warnings; my %vm_comm_pids; @@ -573,15 +569,6 @@ sub preprocess_request { my $request = shift; if ($request->{_xcatdest}) { return [$request]; } #exit if preprocessed my $callback=shift; - unless ($libvirtsupport) { #Try to see if conditions changed since last check (no xCATd restart for it to take effect) - $libvirtsupport = eval { require Sys::Virt; }; - } - unless ($libvirtsupport) { #Still no Sys::Virt module - $callback->({error=>"Sys::Virt perl module missing, unable to fulfill Xen plugin requirements",errorcode=>[42]}); - return []; - } - require Sys::Virt::Domain; - %runningstates = (&Sys::Virt::Domain::STATE_NOSTATE=>1,&Sys::Virt::Domain::STATE_RUNNING=>1,&Sys::Virt::Domain::STATE_BLOCKED=>1); my @requests; my $noderange = $request->{node}; #Should be arrayref @@ -657,6 +644,15 @@ sub process_request { } exit 0; }; + #makes sense to check it here anyway, this way we avoid the main process + #sucking up ram with Sys::Virt + my $libvirtsupport = eval { require Sys::Virt; }; + unless ($libvirtsupport) { #Still no Sys::Virt module + $callback->({error=>"Sys::Virt perl module missing, unable to fulfill Xen plugin requirements",errorcode=>[42]}); + return []; + } + require Sys::Virt::Domain; + %runningstates = (&Sys::Virt::Domain::STATE_NOSTATE=>1,&Sys::Virt::Domain::STATE_RUNNING=>1,&Sys::Virt::Domain::STATE_BLOCKED=>1); my $request = shift; my $callback = shift;