Fix typos in licence headers
[archipelago] / xseg / tools / vlmc-blockd.py
index 4255eb0..0d4a415 100755 (executable)
@@ -1,83 +1,12 @@
 #!/usr/bin/env python2.7
 #
-# vlmc tool
-# (blockd-only atm)
+# vlmc tool for blockd
 
+from vlmc_shared import *
 import os, sys, subprocess, shutil, re, argparse
 
-#FIXME 
-XSEG_HOME="/root/archip/xseg/"
-IMAGES="/srv/pithos/archip-data/images/"
-XSEGBD_SYSFS="/sys/bus/xsegbd/"
-DEVICE_PREFIX="/dev/xsegbd"
-BLOCKD_LOGS="/root/logs/"
-
-def vlmc_list(args):
-    print "name\t\t\t\tsize"
-    try:
-        for f in os.listdir(IMAGES):
-            print "%s\t\t\t\t%dM" % (f, os.stat(IMAGES + f).st_size / 1024 / 1024)
-
-        sys.exit(0)
-    except Exception, reason:
-        print >> sys.stderr, reason
-        sys.exit(-1)
-        
-def vlmc_create(args):
-    name = args.name[0]
-    size = args.size
-    snap = args.snap
-
-    try:
-        old_dir = os.getcwd()
-        os.chdir(IMAGES)
-
-        try:
-            os.stat(name)
-            print "file exists"
-            os.chdir(old_dir)
-            sys.exit(-1)
-        except:
-            pass
-        
-        if snap:
-            shutil.copyfile(snap, name)
-        else:
-            f = os.open(name, os.O_CREAT | os.O_WRONLY, 0755)
-            size *= 1024*1024
-            os.lseek(f, size - 1, os.SEEK_SET)
-            os.write(f, "1")
-            os.close(f)
-
-        os.chdir(old_dir)
-        sys.exit(0)
-    except Exception, reason:
-        print >> sys.stderr, reason
-        sys.exit(-1)
-
-def vlmc_remove(args):
-    name = args.name[0]
-
-    try:
-        old_dir = os.getcwd()
-        os.chdir(IMAGES)
-
-        try:
-            os.stat(name)
-        except:
-            print "file doesn't exist"
-            os.chdir(old_dir)
-            sys.exit(-1)
-        
-        os.unlink(IMAGES + '/' + name)
-
-        os.chdir(old_dir)
-        sys.exit(0)
-    except Exception, reason:
-        print >> sys.stderr, reason
-        sys.exit(-1)
-
 def vlmc_map(args):
+    xsegbd_loaded()
     name = args.name[0]
     try:
         try:
@@ -101,23 +30,24 @@ def vlmc_map(args):
         old_dir = os.getcwd()
         os.chdir(IMAGES)
         f = os.open(BLOCKD_LOGS +  name, os.O_CREAT | os.O_WRONLY)
-        r = subprocess.Popen([XSEG_HOME + "peers/blockd", name, "-p", str(port),
-        "-g", "xsegdev:xsegbd:128:4096:64:1024:12"], stdout=f, stderr=f)
+        r = subprocess.Popen([XSEG_HOME + "peers/user/blockd", name, "-p", str(port),
+        "-g", SPEC, "-n", str(NR_OPS)], stdout=f, stderr=f)
 
         os.chdir(IMAGES)
         fd = os.open(XSEGBD_SYSFS + "add", os.O_WRONLY)
-        os.write(fd, "%s %d:%d:128" % (name, port + 64, port))
+        os.write(fd, "%s %d:%d:%d" % (name, port + 64, port, REQS))
         os.close(fd)
     except Exception, reason:
         print >> sys.stderr, reason
         sys.exit(-1)
 
 def vlmc_unmap(args):
+    xsegbd_loaded()
     device = args.name[0]
     try:
         for f in os.listdir(XSEGBD_SYSFS + "devices/"):
             d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip()
-            name = open(XSEGBD_SYSFS + "devices/"+ f + "/name").read().strip()
+            name = open(XSEGBD_SYSFS + "devices/"+ f + "/target").read().strip()
             if device == DEVICE_PREFIX + d_id:
                 fd = os.open(XSEGBD_SYSFS + "remove", os.O_WRONLY)
                 os.write(fd, d_id)
@@ -131,11 +61,12 @@ def vlmc_unmap(args):
         sys.exit(-1)
 
 def vlmc_showmapped(args):
+    xsegbd_loaded()
     print "id\tpool\timage\tsnap\tdevice"
     try:
         for f in os.listdir(XSEGBD_SYSFS + "devices/"):
             d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip()
-            name = open(XSEGBD_SYSFS + "devices/"+ f + "/name").read().strip()
+            name = open(XSEGBD_SYSFS + "devices/"+ f + "/target").read().strip()
 
             print "%s\t%s\t%s\t%s\t%s" % (d_id, '-', name, '-', DEVICE_PREFIX +
             d_id)
@@ -150,9 +81,8 @@ if __name__ == "__main__":
     subparsers = parser.add_subparsers()
 
     create_parser = subparsers.add_parser('create', help='Create volume')
-    group = create_parser.add_mutually_exclusive_group(required=True)
-    group.add_argument('-s', '--size', type=int, nargs='?', help='requested size in MB for create')
-    group.add_argument('--snap', type=str, nargs='?', help='create from snapshot')
+    create_parser.add_argument('-s', '--size', type=int, nargs='?', help='requested size in MB for create')
+    create_parser.add_argument('--snap', type=str, nargs='?', help='create from snapshot')
     create_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
     create_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
     create_parser.set_defaults(func=vlmc_create)
@@ -189,15 +119,12 @@ if __name__ == "__main__":
     ls_parser.set_defaults(func=vlmc_list)
     ls_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
 
-    args = parser.parse_args()    
-
-    #FIXME
-    try:
-        if args.config == None:
-            execfile(os.path.expanduser("~/.xsegrc"))
-        else:
-            execfile(args.config)
-    except:
-        pass
+    resize_parser = subparsers.add_parser('resize', help='Resize volume')
+    resize_parser.add_argument('-s', '--size', type=int, nargs=1, help='requested size in MB for resize')
+    resize_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
+    resize_parser.set_defaults(func=vlmc_resize)
+    resize_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
 
+    args = parser.parse_args()
+    loadrc(args.config)
     args.func(args)