diff options
| author | Harshavardhana <harsha@gluster.com> | 2010-04-14 20:20:38 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-04-22 07:05:07 -0700 | 
| commit | bf18a37a1b66ca3ac75713d39e68dde1a116f4cf (patch) | |
| tree | 45ac161136890acf9bfe92acdda39f00f83f531e /extras/volgen/CreateVolfile.py | |
| parent | 7c7bafa3b17dcc0c799b5d42ccb5726e52c4d94f (diff) | |
extras/volgen: Volgen patchset
-- Supports NFS Translator.
-- Consolidated common API's into Common.py.
-- Removed unused CreateBooster.py.
-- Added code for "--add-server" for dynamic volumes.
   Currently its commented out we will use it when needed.
-- No more options hiding in background anymore. All options
   specified for each translator are commented and exposed.
   Only necessary values are  enabled. This is done due to
   necessary cleanup of unwanted options by exposing them.
   PENDING: "replicate" translator
-- Quota is disabled for native NFS on client side.
   Only server side quota can be used as of now.
-- Additional code cleanup.
Signed-off-by: Harshavardhana <harsha@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 822 (Volgen changes supporting NFS)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=822
Diffstat (limited to 'extras/volgen/CreateVolfile.py')
| -rw-r--r-- | extras/volgen/CreateVolfile.py | 219 | 
1 files changed, 117 insertions, 102 deletions
diff --git a/extras/volgen/CreateVolfile.py b/extras/volgen/CreateVolfile.py index 052ed987a..ca5043a8d 100644 --- a/extras/volgen/CreateVolfile.py +++ b/extras/volgen/CreateVolfile.py @@ -16,7 +16,6 @@  #    <http://www.gnu.org/licenses/>.  import os, sys, string -import subprocess  num_replica = 2  num_stripe = 4 @@ -38,33 +37,25 @@ class CreateVolfile:          self.auth_parameters = options.auth_param          self.raid_type = options.raid_type          self.ib_devport = options.ib_dev -        self.num_servers = len (self.host_dict.keys())          self.conf_dir = options.conf_dir          self.host_array = server_array -        self.unused = options.unused -        self.debug = options.debug +        self.enable_safe_mode = options.enable_safe_mode          self.volume_size_server = options.size_server          self.volume_size_client = options.size_client +        self.nfs = options.need_nfs      def create_mount_volfile (self):          raid_type = self.raid_type -        if self.conf_dir: -            mount_fd = file ("%s/%s-%s.vol" % (self.conf_dir, -                                               str(self.volume_name), -                                               str(self.transport)), "w") -        else: -            mount_fd = file ("%s-%s.vol" % (str(self.volume_name), -                                            str(self.transport)), "w") - -        print "Generating client volfiles.. for transport '%s'" % (self.transport) +        mount_volfile = "%s/%s-%s.vol" % (self.conf_dir, str(self.volume_name), str(self.transport)) +        mount_fd = file ("%s" % (mount_volfile), "w") +        print "Generating client volfiles.. '%s'" % mount_volfile          cmdline = string.join (sys.argv, ' ') -        mount_fd.write ("## file auto generated by %s (mount.vol)\n" % -                        sys.argv[0]) +        mount_fd.write ("## file auto generated by %s\n" % sys.argv[0])          mount_fd.write ("# Cmd line:\n")          mount_fd.write ("# $ %s\n\n" % cmdline) @@ -81,7 +72,6 @@ class CreateVolfile:                  mount_fd.write ("    type protocol/client\n")                  mount_fd.write ("    option transport-type %s\n" %                                  self.transport) -                  mount_fd.write ("    option remote-host %s\n" % host)                  if self.transport == 'ib-verbs':                      mount_fd.write ("    option transport.ib-verbs.port %d\n" % @@ -115,9 +105,8 @@ class CreateVolfile:              while index < max_stripe_idx:                  mount_fd.write ("volume stripe-%d\n" % index)                  mount_fd.write ("    type cluster/stripe\n") -                if self.unused: -                    mount_fd.write ("#    option block-size 128k\n") -                    mount_fd.write ("#    option use-xattr no\n") +                mount_fd.write ("#    option block-size 128k\n") +                mount_fd.write ("#    option use-xattr no\n")                  mount_fd.write ("    subvolumes %s %s %s %s\n" %                                  (subvolumes[stripe_idx], @@ -150,6 +139,7 @@ class CreateVolfile:              while flag < index:                  subvolumes.append ("stripe-%d" % flag)                  flag += 1 +          if raid_type is 1:              subvolumes = []              flag = 0 @@ -160,91 +150,111 @@ class CreateVolfile:          if len (subvolumes) > 1:              mount_fd.write ("volume distribute\n")              mount_fd.write ("    type cluster/distribute\n") -            if self.unused: -                mount_fd.write("# option unhashed-sticky-bit yes # Used for migrating data while adding new nodes\n") -                mount_fd.write("# option min-free-disk 5% # Minimum free disk available on the volume\n") - - +            mount_fd.write ("#   option unhashed-sticky-bit yes" +                           "  # Used for migrating data while adding new nodes\n") +            mount_fd.write ("#   option min-free-disk 5%" +                           "  # Minimum free disk available on the volume\n")              mount_fd.write ("    subvolumes %s\n" %                                   string.join (subvolumes,' '))              mount_fd.write ("end-volume\n\n")              subvolumes[0] = "distribute" + +        if self.nfs: +            mount_fd.write ("volume nfsxlator\n") +            mount_fd.write ("    type nfs/server\n") +            mount_fd.write ("    subvolumes %s\n" % subvolumes[0]) +            mount_fd.write ("#   option rpc-auth.auth-unix         off  #Enabled by default\n") +            mount_fd.write ("#   option rpc-auth.auth-null         off  #Enabled by default\n") +            mount_fd.write ("#   By default all addresses are rejected until allowed.\n") +            mount_fd.write ("#   option rpc-auth.addr.reject       127.*\n") +            mount_fd.write ("#   option rpc-auth.addr.allow        localhost\n") +            mount_fd.write ("    option rpc-auth.addr.%s.allow %s\n" % (subvolumes[0], self.auth_parameters)) +            mount_fd.write ("#   By default insecure ports are not allowed.\n") +            mount_fd.write ("#   option rpc-auth.ports.insecure    on\n") +            mount_fd.write ("#   option rpc-auth.ports.<volume>.insecure  on\n") +            mount_fd.write ("#   By default all access is read-write.\n") +            mount_fd.write ("#   option nfs3.<volume>.volume-access       read-only\n") +            mount_fd.write ("#   option nfs3.<volume>.volume-access       read-only\n") +            mount_fd.write ("#   option nfs3.read-size             128Kb\n") +            mount_fd.write ("#   option nfs3.write-size            32Kb\n") +            mount_fd.write ("#   option nfs3.readdir-size          64Kb\n") +            mount_fd.write ("#   option nfs3.<volume>.read-size    64Kb\n") +            mount_fd.write ("#   option nfs3.<volume>.write-size   64Kb\n") +            mount_fd.write ("#   option nfs3.posix1.readdir-size   128Kb\n") +            mount_fd.write ("end-volume\n\n") +            return +          if self.volume_size_client:              mount_fd.write ("volume quota\n")              mount_fd.write ("    type features/quota\n")              mount_fd.write ("    option disk-usage-limit %s\n" % self.volume_size_client) -            if self.unused: -                mount_fd.write ("#  option minimum-free-disk-limit 10GB " -                                "# minimum free disk value (default) 0\n") -                mount_fd.write ("#  option refresh-interval 10\n") +            mount_fd.write ("#   option minimum-free-disk-limit 10GB\n" +                            "#   minimum free disk value (default) 0\n") +            mount_fd.write ("#   option refresh-interval 10\n")              mount_fd.write ("    subvolumes %s\n" % subvolumes[0])              mount_fd.write ("end-volume\n\n") +        if self.enable_safe_mode: +            return -        mount_fd.write ("volume writebehind\n") -        mount_fd.write ("    type performance/write-behind\n") -        mount_fd.write ("    option cache-size 4MB\n") -        if self.unused: -            mount_fd.write ("#   option enable-trickling-writes yes # Flush final write calls when network is free\n") -            mount_fd.write ("#   option enable-O_SYNC yes # Enable O_SYNC for write-behind\n") -            mount_fd.write ("#   option disable-for-first-nbytes 1 # Disable first nbytes with very small initial writes\n") -        if self.volume_size_client: -            mount_fd.write ("    subvolumes quota\n") -        else: -            mount_fd.write ("    subvolumes %s\n" % subvolumes[0]) - -        mount_fd.write ("end-volume\n\n") - -        mount_fd.write ("volume readahead\n") -        mount_fd.write ("    type performance/read-ahead\n") -        mount_fd.write ("    option page-count 4\n") - -        if self.unused: -            mount_fd.write ("#   option force-atime-update yes # force updating atimes, default off\n") -        mount_fd.write ("    subvolumes writebehind\n") -        mount_fd.write ("end-volume\n\n") - -        mount_fd.write ("volume iocache\n") -        mount_fd.write ("    type performance/io-cache\n") -        mount_fd.write ("    option cache-size %sMB\n" % cache_size) -        mount_fd.write ("    option cache-timeout 1\n") -        if self.unused: -            mount_fd.write ("#   option priority *.html:1,abc*:2 # Priority list for iocaching files\n") -        mount_fd.write ("    subvolumes readahead\n") -        mount_fd.write ("end-volume\n\n") +        self.performance_mode (subvolumes[0], mount_fd) -        mount_fd.write ("volume quickread\n") -        mount_fd.write ("    type performance/quick-read\n") -        mount_fd.write ("    option cache-timeout 1\n") -        mount_fd.write ("    option max-file-size 64kB\n") -        mount_fd.write ("    subvolumes iocache\n") -        mount_fd.write ("end-volume\n\n") - -        mount_fd.write ("volume statprefetch\n") -        mount_fd.write ("    type performance/stat-prefetch\n") -        mount_fd.write ("    subvolumes quickread\n") -        mount_fd.write ("end-volume\n\n") +        return +    def performance_mode (self, cluster_subvolume, volfile_fd): +        volfile_fd.write ("volume writebehind\n") +        volfile_fd.write ("    type performance/write-behind\n") +        volfile_fd.write ("    option cache-size 4MB\n") +        volfile_fd.write ("#   option enable-trickling-writes yes # Flush final write calls when network is free\n") +        volfile_fd.write ("#   option enable-O_SYNC yes # Enable O_SYNC for write-behind\n") +        volfile_fd.write ("#   option disable-for-first-nbytes 1 # Disable first nbytes with very small initial writes\n") +        if self.volume_size_client: +            volfile_fd.write ("    subvolumes quota\n") +        else: +            volfile_fd.write ("    subvolumes %s\n" % cluster_subvolume) +            volfile_fd.write ("end-volume\n\n") + +        volfile_fd.write ("volume readahead\n") +        volfile_fd.write ("    type performance/read-ahead\n") +        volfile_fd.write ("    option page-count 4\n") +        volfile_fd.write ("#   option force-atime-update yes # force updating atimes, default off\n") +        volfile_fd.write ("    subvolumes writebehind\n") +        volfile_fd.write ("end-volume\n\n") + +        volfile_fd.write ("volume iocache\n") +        volfile_fd.write ("    type performance/io-cache\n") +        volfile_fd.write ("    option cache-size %sMB\n" % cache_size) +        volfile_fd.write ("    option cache-timeout 1\n") +        volfile_fd.write ("#   option priority *.html:1,abc*:2 # Priority list for iocaching files\n") +        volfile_fd.write ("    subvolumes readahead\n") +        volfile_fd.write ("end-volume\n\n") + +        volfile_fd.write ("volume quickread\n") +        volfile_fd.write ("    type performance/quick-read\n") +        volfile_fd.write ("    option cache-timeout 1\n") +        volfile_fd.write ("    option max-file-size 64kB\n") +        volfile_fd.write ("    subvolumes iocache\n") +        volfile_fd.write ("end-volume\n\n") + +        volfile_fd.write ("volume statprefetch\n") +        volfile_fd.write ("    type performance/stat-prefetch\n") +        volfile_fd.write ("    subvolumes quickread\n") +        volfile_fd.write ("end-volume\n\n")          return      def create_export_volfile (self):          cmdline = string.join (sys.argv, ' ') +        export_volfile = "%s/%s-export.vol" % (self.conf_dir, str(self.host + '-' + self.volume_name)) +        exp_fd = file ("%s" % (export_volfile),"w") -        if self.conf_dir: -            exp_fd = file ("%s/%s-export.vol" % -                           (self.conf_dir, -                            str(self.host + '-' + self.volume_name)),"w") -        else: -            exp_fd = file ("%s-export.vol" % -                           (str(self.host + '-' + self.volume_name)),"w") - -        print "Generating server volfiles.. for server '%s'" % (self.host) +        print "Generating server volfiles.. for server %s as '%s'" % (self.host, +                                                                      export_volfile) -        exp_fd.write ("## file auto generated by %s (export.vol)\n" % +        exp_fd.write ("## file auto generated by %s\n" %                        sys.argv[0])          exp_fd.write ("# Cmd line:\n")          exp_fd.write ("# $ %s\n\n" % cmdline) @@ -252,33 +262,39 @@ class CreateVolfile:          i=1          for export in self.host_dict[self.host]:              exp_fd.write ("volume posix%d\n" % i) -            exp_fd.write ("  type storage/posix\n") -            if self.unused: -                exp_fd.write("# option o-direct enable # (default: disable) boolean type only\n") -                exp_fd.write("# option export-statfs-size no # (default: yes) boolean type only\n") -                exp_fd.write("# option mandate-attribute off # (default: on) boolean type only\n") -                exp_fd.write("# option span-devices 8 # (default: 0) integer value\n") -                exp_fd.write("# option background-unlink yes # (default: no) boolean type\n") - -            exp_fd.write ("  option directory %s\n" % export) +            exp_fd.write ("    type storage/posix\n") +            exp_fd.write ("#   option o-direct enable # (default: disable) boolean type only\n") +            exp_fd.write ("#   option export-statfs-size no # (default: yes) boolean type only\n") +            exp_fd.write ("#   option mandate-attribute off # (default: on) boolean type only\n") +            exp_fd.write ("#   option span-devices 8 # (default: 0) integer value\n") +            exp_fd.write ("#   option background-unlink yes # (default: no) boolean type\n") + +            exp_fd.write ("    option directory %s\n" % export)              exp_fd.write ("end-volume\n\n") +            if self.nfs: +                exp_fd.write ("volume posix-ac%d\n" % i) +                exp_fd.write ("    type features/access-control\n") +                exp_fd.write ("    subvolumes posix%d\n" % i) +                exp_fd.write ("end-volume\n\n") +              if self.volume_size_server:                  exp_fd.write ("volume quota%d\n" % i) -                exp_fd.write ("  type features/quota\n") -                exp_fd.write ("  option disk-usage-limit %s\n" % self.volume_size_server) -                if self.unused: -                    exp_fd.write ("#  option minimum-free-disk-limit 10GB " -                                  "# minimum free disk value (default) 0\n") -                    exp_fd.write ("#  option refresh-interval 10\n") -                exp_fd.write ("  subvolumes posix%d\n" % i) +                exp_fd.write ("    type features/quota\n") +                exp_fd.write ("    option disk-usage-limit %s\n" % self.volume_size_server) +                exp_fd.write ("#   option minimum-free-disk-limit 10GB" +                              "  # minimum free disk value (default) 0\n") +                exp_fd.write ("#   option refresh-interval 10\n") +                if self.nfs: +                    exp_fd.write ("    subvolumes posix-ac%d\n" % i) +                else: +                    exp_fd.write ("    subvolumes posix%d\n" % i)                  exp_fd.write ("end-volume\n\n")              exp_fd.write ("volume locks%d\n" % i)              exp_fd.write ("    type features/locks\n") -            if self.unused: -                exp_fd.write ("#   option mandatory on # Default off, used in specific applications\n") +            exp_fd.write ("#   option mandatory on # Default off, used in specific applications\n")              if self.volume_size_server:                  exp_fd.write ("    subvolumes quota%d\n" % i)              else: @@ -288,10 +304,9 @@ class CreateVolfile:              exp_fd.write ("volume brick%d\n" % i)              exp_fd.write ("    type performance/io-threads\n")              exp_fd.write ("    option thread-count 8\n") -            if self.unused: -                exp_fd.write ("#    option autoscaling yes # Heuristic for autoscaling threads on demand\n") -                exp_fd.write ("#    option min-threads 2 # min count for thread pool\n") -                exp_fd.write ("#    option max-threads 64 # max count for thread pool\n") +            exp_fd.write ("#   option autoscaling yes # Heuristic for autoscaling threads on demand\n") +            exp_fd.write ("#   option min-threads 2 # min count for thread pool\n") +            exp_fd.write ("#   option max-threads 64 # max count for thread pool\n")              exp_fd.write ("    subvolumes locks%d\n" % i)              exp_fd.write ("end-volume\n\n")  | 
