Author: arkurth
Date: Mon Dec 14 15:12:42 2009
New Revision: 890365

URL: http://svn.apache.org/viewvc?rev=890365&view=rev
Log:
VCL-279
Removed command line argument parsing from vcld. This now resides in utils.pm. 
Added checks for $SETUP_MODE and $DAEMON_MODE variables which are set in 
utils.pm.

Moved call to rename_vcld_process to earlier in the code, before daemonize is 
called and commented out line in daemonize which renamed the process. daemonize 
was unnecessarily renaming the process because it later got renamed by 
rename_vcld_process.

Added setup_management_node sub to vcld. This gets a list of the modules in the 
module table, checks each one for the implementation of a setup sub, and calls 
setup as needed.

Modified:
    incubator/vcl/trunk/managementnode/bin/vcld

Modified: incubator/vcl/trunk/managementnode/bin/vcld
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/bin/vcld?rev=890365&r1=890364&r2=890365&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/bin/vcld (original)
+++ incubator/vcl/trunk/managementnode/bin/vcld Mon Dec 14 15:12:42 2009
@@ -64,14 +64,16 @@
 # Turn on autoflush
 $| = 1;
 
-# Get the command line options
-our $opt_d = '';
-Getopt::Long::Configure('bundling', 'no_ignore_case');
-GetOptions('d|debug' => \$opt_d,
-                         'h|help'  => \&help);
+# Rename this process
+rename_vcld_process();
+
+# Check if -setup argument was specified
+if ($SETUP_MODE) {
+       &setup_management_node();
+};
 
 # Call daemonize if -d (debug) wasn't specified
-if (!$opt_d) {
+if ($DAEMON_MODE) {
        &daemonize;
 }
 
@@ -115,9 +117,6 @@
        $ENV{vcld} = 1;
        notify($ERRORS{'DEBUG'}, $LOGFILE, "vcld environment variable set to 
$ENV{vcld} for this process");
 
-       # Rename this process
-       rename_vcld_process();
-
        # Create a hash to store all of the program state information
        my %info;
 
@@ -779,8 +778,8 @@
        #$0 = "vcldev";
        #production
        #$0 = "vcld";
-       $0 = $PROCESSNAME;
-       print "Created process $$ renamed to $0 ...\n";
+       #$0 = $PROCESSNAME;
+       print "Created process $$ \"$0\"\n";
        setsid or die "Can't start a new session: $!";
        open STDIN,  '/dev/null'  or die "Can't read /dev/null $!";
        open STDOUT, ">>$LOGFILE" or die "Can't write $LOGFILE $!";
@@ -794,24 +793,87 @@
 
 #/////////////////////////////////////////////////////////////////////////////
 
-=head2 help
+=head2 setup_management_node
 
- Parameters  : 
+ Parameters  : None.
  Returns     : 
- Description :
+ Description : Checks each module in the module table for
+                                       the existance of a subroutine named 
"setup". Calls the setup
+                                       subroutine for each module which 
contains one.
+                                       
+                                       The program terminates if a module's 
setup subroutine returns
+                                       false. The program continues if a 
module's setup subroutine
+                                       returns true.
+                                       
+                                       STDOUT "print" statements are printed 
to the screen. Messages
+                                       sent to the "notify" subroutine are 
printed to the logfile.
 
 =cut
 
-sub help {
-       my $message = <<"END";
---------------------------------------------
-
-vcld is intented to run in daemon mode.
-
-Please read the INSTALLATION file in the source directory.
-END
-
-       print $message;
+sub setup_management_node {
+       print "VCL Management Node Setup\n\n";
+       
+       # Always use verbose mode when running in setup mode
+       $VERBOSE = 1;
+       
+       # Create a DataStructure object which will be passed to modules when 
they are instantiated
+       # The creation of this DataStructure object collects the management 
node information
+       my $data_structure = new VCL::DataStructure();
+       if (!$data_structure) {
+               die "unable to create DataStructure object";
+       }
+       notify($ERRORS{'DEBUG'}, 0, "created DataStructure object to be used 
for vcld setup");
+       
+       # Get the information from the module table
+       my $module_info = get_module_info();
+       #print "retrieved module table info:\n" . format_data($module_info) . 
"\n";
+       
+       # Loop through the entries in the data from the module table
+       for my $module_id (keys %$module_info) {
+               # Get the module's Perl package and name
+               my $module_name = $module_info->{$module_id}{name};
+               my $module_perl_package = 
$module_info->{$module_id}{perlpackage};
+               notify($ERRORS{'DEBUG'}, 0, "checking if setup() subroutine has 
been implemented by '$module_name' module");
+               
+               # Attempt to load the module
+               eval "use $module_perl_package";
+               if ($EVAL_ERROR) {
+                       notify($ERRORS{'WARNING'}, 0, "$module_name module (" . 
$module_perl_package . ") could not be loaded, error message:\n$EVAL_ERROR");
+                       print "ERROR: '$module_name' module could not be 
loaded, see log file\n";
+                       next;
+               }
+               
+               # Create a new VCL state object, passing it the reservation data
+               my $module_object;
+               unless ($module_object = 
($module_perl_package)->new({data_structure => $data_structure})) {
+                       notify($ERRORS{'WARNING'}, 0, "$module_name module (" . 
$module_perl_package . ") object could not be created, error message:\n$!");
+                       print "ERROR: '$module_name' object could not be 
created, see log file";
+                       next;
+               }
+               
+               # Check if module has implemented a "setup" subroutine
+               if ($module_object->can('setup')) {
+                       notify($ERRORS{'DEBUG'}, 0, "setup subroutine has been 
implemented by '$module_name'");
+                       
+                       print 
"----------------------------------------------------------------------\n";
+                       print "Beginning setup for '$module_name' 
module...\n\n";
+                       
+                       # Call the setup subroutine and check it's return value
+                       my $setup_status = $module_object->setup();
+                       notify($ERRORS{'DEBUG'}, 0, "module '$module_name' 
setup() returned $setup_status");
+                       if ($setup_status) {
+                               print "\nSetup for '$module_name' module 
complete\n";
+                       }
+                       else {
+                               die "\nERROR: Setup did not complete 
successfully for '$module_name' module";
+                       }
+               }
+               else {
+                       notify($ERRORS{'DEBUG'}, 0, "setup subroutine has NOT 
been implemented by '$module_name' module");
+               }
+       }
+       
+       print 
"======================================================================\n";
        exit;
 } ## end sub help
 


Reply via email to