from .common import *
from .vlmc import showmapped as vlmc_showmapped
from .vlmc import get_mapped as vlmc_get_mapped
-
+from blktap import VlmcTapdisk
def start_peer(peer, cli=False):
if peer.is_running():
return False
-def make_segdev(cli=False):
- try:
- os.stat(str(CHARDEV_NAME))
- raise Error("Segdev already exists")
- except Error as e:
- raise e
- except:
- pass
- cmd = ["mknod", str(CHARDEV_NAME), "c", str(CHARDEV_MAJOR),
- str(CHARDEV_MINOR)]
- if cli:
- print ' '.join(cmd)
- try:
- check_call(cmd, shell=False)
- except Exception:
- raise Error("Segdev device creation failed.")
-
-
-def remove_segdev():
- try:
- os.stat(str(CHARDEV_NAME))
- except OSError, (err, reason):
- if err == errno.ENOENT:
- return
- raise OSError(str(CHARDEV_NAME) + ' ' + reason)
- try:
- os.unlink(str(CHARDEV_NAME))
- except:
- raise Error("Segdev device removal failed.")
-
-
def start_peers(peers, cli=False):
- for m in modules:
- if not loaded_module(m):
- raise Error("Cannot start userspace peers. " + m +
- " module not loaded")
for r, _ in config['roles']:
p = peers[r]
start_peer(p, cli)
return start_peer(p, cli)
if user:
- return start_peers(peers, cli)
+ get_segment().create()
+ start_peers(peers, cli)
+ mapped = vlmc_get_mapped()
+ if mapped:
+ for m in mapped:
+ if VlmcTapdisk.is_paused(m.device):
+ VlmcTapdisk.unpause(m.device)
+ return
if status() > 0:
raise Error("Cannot start. Try stopping first")
print "===================="
print ""
try:
- for m in modules:
- load_module(m, None)
- time.sleep(0.5)
- make_segdev(cli)
- time.sleep(0.5)
- segment.create()
+ get_segment().create()
time.sleep(0.5)
start_peers(peers, cli)
- load_module(xsegbd, xsegbd_args)
+ load_module("blktap", None)
except Exception as e:
if cli:
print red(e)
raise Error("Invalid peer %s" % role)
return stop_peer(p, cli)
if user:
- return stop_peers(peers, cli)
+ mapped = vlmc_get_mapped()
+ if mapped:
+ for m in mapped:
+ if not VlmcTapdisk.is_paused(m.device):
+ VlmcTapdisk.pause(m.device)
+ stop_peers(peers, cli)
+ return get_segment().destroy()
#check devices
if cli:
print "===================="
print "Stoping archipelago"
print "===================="
print ""
+ if not loaded_module("blktap"):
+ stop_peers(peers, cli)
+ time.sleep(0.5)
+ get_segment().destroy()
+ return
+
if cli:
if vlmc_showmapped() > 0:
raise Error("Cannot stop archipelago. Mapped volumes exist")
mapped = vlmc_get_mapped()
if mapped and len(mapped) > 0:
raise Error("Cannot stop archipelago. Mapped volumes exist")
- unload_module(xsegbd)
stop_peers(peers, cli)
- remove_segdev()
- for m in reversed(modules):
- unload_module(m)
- time.sleep(0.3)
+ time.sleep(0.5)
+ get_segment().destroy()
def status(cli=False, **kwargs):
r = 0
+ if not loaded_module("blktap"):
+ for role, _ in reversed(config['roles']):
+ p = peers[role]
+ if peer_running(p, cli):
+ r += 1
+ if cli:
+ pretty_print("blktap", red('Not loaded'))
+ return r
+
if cli:
if vlmc_showmapped() > 0:
r += 1
mapped = vlmc_get_mapped()
if mapped and len(mapped) > 0:
r += 1
- if loaded_module(xsegbd):
+ if loaded_module("blktap"):
if cli:
- pretty_print(xsegbd, green('Loaded'))
- r += 1
+ pretty_print("blktap", green('Loaded'))
+ #r += 1
else:
if cli:
- pretty_print(xsegbd, red('Not loaded'))
- for m in reversed(modules):
- if loaded_module(m):
- if cli:
- pretty_print(m, green('Loaded'))
- r += 1
- else:
- if cli:
- pretty_print(m, red('Not loaded'))
+ pretty_print("blktap", red('Not loaded'))
for role, _ in reversed(config['roles']):
p = peers[role]
if peer_running(p, cli):