applied Daniel's patch to bring rawdisk support to the branch
authorMarc Fiuczynski <mef@cs.princeton.edu>
Wed, 24 Dec 2008 15:02:50 +0000 (15:02 +0000)
committerMarc Fiuczynski <mef@cs.princeton.edu>
Wed, 24 Dec 2008 15:02:50 +0000 (15:02 +0000)
source/ModelOptions.py
source/configuration
source/steps/CheckForNewDisks.py
source/steps/InstallPartitionDisks.py

index 697b701..78adad0 100644 (file)
@@ -18,6 +18,7 @@ NUMA    = 0x020
 GEODE   = 0x040
 BADHD   = 0x080
 LAST    = 0x100
+RAWDISK = 0x200
 
 modeloptions = {'smp':SMP,
                 'x64':X86_64,
@@ -28,7 +29,8 @@ modeloptions = {'smp':SMP,
                 'numa':NUMA,
                 'geode':GEODE,
                 'badhd':BADHD,
-                'minhw':MINHW}
+                'minhw':MINHW,
+                'rawdisk':RAWDISK}
 
 def Get(model):
     modelinfo = string.split(model,'/')
index 5d98812..152cc75 100644 (file)
@@ -51,6 +51,11 @@ ROOT_SIZE=7G
 SWAP_SIZE=1G
 
 
+# in raw disk mode, the size of /vservers
+# if unset or -1, use the entire first disk
+VSERVERS_SIZE=-1
+
+
 # whether or not to skip hardware requirement check
 SKIP_HARDWARE_REQUIREMENT_CHECK=0
 
index a952b09..2a31d73 100644 (file)
@@ -15,6 +15,8 @@ import compatibility
 import utils
 import os
 
+import ModelOptions
+
 
 def Run( vars, log ):
     """
@@ -24,6 +26,7 @@ def Run( vars, log ):
     SYSIMG_PATH          the path where the system image will be mounted
     BOOT_CD_VERSION          A tuple of the current bootcd version
     MINIMUM_DISK_SIZE       any disks smaller than this size, in GB, are not used
+    NODE_MODEL_OPTIONS   the node's model options
     
     Set the following variables upon successfully running:
     ROOT_MOUNTED             the node root file system is mounted
@@ -47,6 +50,7 @@ def Run( vars, log ):
         if PARTITIONS == None:
             raise ValueError, "PARTITIONS"
         
+        NODE_MODEL_OPTIONS= vars["NODE_MODEL_OPTIONS"]
     except KeyError, var:
         raise BootManagerException, "Missing variable in vars: %s\n" % var
     except ValueError, var:
@@ -107,16 +111,21 @@ def Run( vars, log ):
                 log.write("To paranoid to add %s to vservers lvm.\n" % device)
                 continue
         
-        log.write( "Attempting to add %s to the volume group\n" % device )
-
         if not InstallPartitionDisks.single_partition_device( device, vars, log ):
             log.write( "Unable to partition %s, not using it.\n" % device )
             continue
 
-        log.write( "Successfully initialized %s\n" % device )
+        log.write( "Successfully partitioned %s\n" % device )
+
+        if NODE_MODEL_OPTIONS & ModelOptions.RAWDISK:
+            log.write( "Running on a raw disk node, not using it.\n" )
+            continue
 
         part_path= InstallPartitionDisks.get_partition_path_from_device( device,
                                                                          vars, log )
+
+        log.write( "Attempting to add %s to the volume group\n" % device )
+
         if not InstallPartitionDisks.create_lvm_physical_volume( part_path,
                                                                  vars, log ):
             log.write( "Unable to create lvm physical volume %s, not using it.\n" %
index e49f0f9..01c0683 100644 (file)
@@ -61,6 +61,13 @@ def Run( vars, log ):
         if PARTITIONS == None:
             raise ValueError, "PARTITIONS"
 
+        if NODE_MODEL_OPTIONS & ModelOptions.RAWDISK:
+            VSERVERS_SIZE= "-1"
+            if "VSERVER_SIZE" in vars:
+                VSERVERS_SIZE= vars["VSERVERS_SIZE"]
+                if VSERVERS_SIZE == "" or VSERVERS_SIZE == 0:
+                    raise ValueError, "VSERVERS_SIZE"
+
     except KeyError, var:
         raise BootManagerException, "Missing variable in vars: %s\n" % var
     except ValueError, var:
@@ -90,11 +97,15 @@ def Run( vars, log ):
     
     used_devices= []
 
-    for device in INSTALL_BLOCK_DEVICES:
+    for device in sorted(INSTALL_BLOCK_DEVICES):
 
         if single_partition_device( device, vars, log ):
-            used_devices.append( device )
-            log.write( "Successfully initialized %s\n" % device )
+            if (len(used_devices) > 0 and
+                (vars['NODE_MODEL_OPTIONS'] & ModelOptions.RAWDISK)):
+                log.write( "Running in raw disk mode, not using %s.\n" % device )
+            else:
+                used_devices.append( device )
+                log.write( "Successfully initialized %s\n" % device )
         else:
             log.write( "Unable to partition %s, not using it.\n" % device )
             continue
@@ -122,11 +133,16 @@ def Run( vars, log ):
     # create root logical volume
     utils.sysexec( "lvcreate -L%s -nroot planetlab" % ROOT_SIZE, log )
 
-    # create vservers logical volume with all remaining space
-    # first, we need to get the number of remaining extents we can use
-    remaining_extents= get_remaining_extents_on_vg( vars, log )
-    
-    utils.sysexec( "lvcreate -l%s -nvservers planetlab" % remaining_extents, log )
+    if vars['NODE_MODEL_OPTIONS'] & ModelOptions.RAWDISK and VSERVERS_SIZE != "-1":
+        utils.sysexec( "lvcreate -L%s -nvservers planetlab" % VSERVERS_SIZE, log )
+        remaining_extents= get_remaining_extents_on_vg( vars, log )
+        utils.sysexec( "lvcreate -l%s -nrawdisk planetlab" % remaining_extents, log )
+    else:
+        # create vservers logical volume with all remaining space
+        # first, we need to get the number of remaining extents we can use
+        remaining_extents= get_remaining_extents_on_vg( vars, log )
+        
+        utils.sysexec( "lvcreate -l%s -nvservers planetlab" % remaining_extents, log )
 
     # activate volume group (should already be active)
     #utils.sysexec( TEMP_PATH + "vgchange -ay planetlab", log )