Revision 6fac9863

b/python/archipelago/archipelago.py
42 42
    FIRST_COLUMN_WIDTH,
43 43
    SECOND_COLUMN_WIDTH,
44 44
    ctext,
45
    get_segment,
46 45
    pretty_print,
47 46
    loaded_module,
48 47
    load_module,
49 48
    config,
50 49
    peers,
51 50
    Error,
51
    XsegSegment
52 52
)
53 53
from vlmc import showmapped as vlmc_showmapped
54 54
from vlmc import get_mapped as vlmc_get_mapped
......
148 148

  
149 149

  
150 150
def start(user=False, role=None, cli=False, **kwargs):
151
    xseg_segment = XsegSegment(kwargs.get('config'))
151 152
    if role:
152 153
        try:
153 154
            p = peers[role]
......
156 157
        return start_peer(p, cli)
157 158

  
158 159
    if user:
159
        #get_segment().create()
160
        #xseg_segment.create()
160 161
        start_peers(peers, cli)
161 162
        mapped = vlmc_get_mapped()
162 163
        if mapped:
......
174 175
        print "===================="
175 176
        print ""
176 177
    try:
177
        #get_segment().create()
178
        #xseg_segment.create()
178 179
        #time.sleep(0.5)
179 180
        start_peers(peers, cli)
180 181
        load_module("blktap", None)
......
185 186

  
186 187

  
187 188
def stop(user=False, role=None, cli=False, **kwargs):
189
    xseg_segment = XsegSegment(kwargs.get('config'))
188 190
    if role:
189 191
        try:
190 192
            p = peers[role]
......
198 200
                if not VlmcTapdisk.is_paused(m.device):
199 201
                    VlmcTapdisk.pause(m.device)
200 202
        stop_peers(peers, cli)
201
        return get_segment().destroy()
203
        return xseg_segment.destroy()
202 204
    #check devices
203 205
    if cli:
204 206
        print "===================="
......
208 210
    if not loaded_module("blktap"):
209 211
        stop_peers(peers, cli)
210 212
        time.sleep(0.5)
211
        get_segment().destroy()
213
        xseg_segment.destroy()
212 214
        return
213 215

  
214 216
    if cli:
......
220 222
            raise Error("Cannot stop archipelago. Mapped volumes exist")
221 223
    stop_peers(peers, cli)
222 224
    time.sleep(0.5)
223
    get_segment().destroy()
225
    xseg_segment.destroy()
224 226

  
225 227

  
226 228
def status(cli=False, **kwargs):
227 229
    r = 0
230
    xseg_segment = XsegSegment(kwargs.get('config'))
228 231
    if not loaded_module("blktap"):
229 232
        for role, _ in reversed(config['roles']):
230 233
            p = peers[role]
b/python/archipelago/cli.py
39 39
import sys
40 40
import argparse
41 41
from common import (
42
    loadrc,
43 42
    ctext,
44 43
    Error,
45 44
)
......
218 217

  
219 218
    try:
220 219
        args = parser.parse_args()
221
        loadrc(args.config)
222 220
        kwargs = vars(args)
223 221
        # if parser_func == archipelago_parser:
224 222
            # peers = construct_peers()
b/python/archipelago/common.py
77 77
valid_segment_types = ['posix']
78 78

  
79 79
peers = dict()
80
segment = None
81 80

  
82 81
BIN_DIR = '/usr/bin/'
83 82
DEFAULTS = '/etc/archipelago/archipelago.conf'
......
603 602
        return ctx
604 603

  
605 604

  
606
def check_conf():
605
def check_conf(segment):
607 606
    port_ranges = []
608 607

  
609 608
    def isExec(file_path):
......
635 634

  
636 635
        port_ranges.append((portno_start, portno_end))
637 636

  
638
    xseg_type = config['SEGMENT_TYPE']
639
    xseg_name = config['SEGMENT_NAME']
640
    xseg_dynports = config['SEGMENT_DYNPORTS']
641
    xseg_ports = config['SEGMENT_PORTS']
642
    xseg_size = config['SEGMENT_SIZE']
643
    xseg_align = config['SEGMENT_ALIGNMENT']
644

  
645
    global segment
646
    segment = Segment(xseg_type, xseg_name, xseg_dynports, xseg_ports,
647
                      xseg_size, xseg_align)
648

  
649 637
    try:
650 638
        if not config['roles']:
651 639
            raise Error("Roles setup must be provided")
......
687 675
        else:
688 676
            raise Error("No valid peer type: %s" % role_type)
689 677
        validatePortRange(peers[role].portno_start, peers[role].portno_end,
690
                          xseg_ports)
678
                          config['SEGMENT_PORTS'])
691 679

  
692
    validatePortRange(config['VTOOL_START'], config['VTOOL_END'], xseg_ports)
680
    validatePortRange(config['VTOOL_START'], config['VTOOL_END'],
681
                      config['SEGMENT_PORTS'])
693 682

  
694 683
    return True
695 684

  
696 685

  
697
def get_segment():
698
    return segment
686
class XsegSegment(Segment):
687
    def __init__(self, arg=None):
688
        loadrc(arg)
689

  
690
        xseg_type = config['SEGMENT_TYPE']
691
        xseg_name = config['SEGMENT_NAME']
692
        xseg_dynports = config['SEGMENT_DYNPORTS']
693
        xseg_ports = config['SEGMENT_PORTS']
694
        xseg_size = config['SEGMENT_SIZE']
695
        xseg_align = config['SEGMENT_ALIGNMENT']
696

  
697
        super(XsegSegment, self).__init__(xseg_type, xseg_name, xseg_dynports,
698
                                          xseg_ports, xseg_size, xseg_align)
699

  
700
        if not check_conf(self):
701
            raise Error("Invalid conf file")
699 702

  
700 703

  
701 704
def construct_peers():
......
833 836
    for r in roles:
834 837
        config[r] = createDict(cfg, r)
835 838

  
836
    if not check_conf():
837
        raise Error("Invalid conf file")
838

  
839 839

  
840 840
def loaded_modules():
841 841
    lines = open("/proc/modules").read().split("\n")
b/python/archipelago/vlmc.py
116 116
        size = size << 20
117 117

  
118 118
    ret = False
119
    xseg_ctx = Xseg_ctx(get_segment())
119
    xseg_segment = XsegSegment(kwargs.get('config'))
120
    xseg_ctx = Xseg_ctx(xseg_segment)
120 121
    mport = peers['mapperd'].portno_start
121 122
    req = Request.get_clone_request(xseg_ctx, mport, snap, clone=name,
122 123
                                    clone_size=size, cont_addr=cont_addr)
......
133 134
    if len(name) < 6:
134 135
        raise Error("Name should have at least len 6")
135 136

  
136
    xseg_ctx = Xseg_ctx(get_segment())
137
    xseg_segment = XsegSegment(kwargs.get('config'))
138
    xseg_ctx = Xseg_ctx(xseg_segment)
137 139
    vport = peers['vlmcd'].portno_start
138 140
    req = Request.get_snapshot_request(xseg_ctx, vport, name, snap=snap_name)
139 141
    req.submit()
......
152 154
    if len(name) < 6:
153 155
        raise Error("Name should have at least len 6")
154 156

  
155
    xseg_ctx = Xseg_ctx(get_segment())
157
    xseg_segment = XsegSegment(kwargs.get('config'))
158
    xseg_ctx = Xseg_ctx(xseg_segment)
156 159
    mport = peers['mapperd'].portno_start
157 160
    req = Request.get_hash_request(xseg_ctx, mport, name)
158 161
    req.submit()
......
195 198
                    device))
196 199

  
197 200
    ret = False
198
    xseg_ctx = Xseg_ctx(get_segment())
201
    xseg_segment = XsegSegment(kwargs.get('config'))
202
    xseg_ctx = Xseg_ctx(xseg_segment)
199 203
    mport = peers['mapperd'].portno_start
200 204
    req = Request.get_delete_request(xseg_ctx, mport, name)
201 205
    req.submit()
......
260 264

  
261 265
    name = ARCHIP_PREFIX + name
262 266

  
263
    xseg_ctx = Xseg_ctx(get_segment())
267
    xseg_segment = XsegSegment(kwargs.get('config'))
268
    xseg_ctx = Xseg_ctx(xseg_segment)
264 269
    mbport = peers['blockerm'].portno_start
265 270
    req = Request.get_acquire_request(xseg_ctx, mbport, name)
266 271
    req.submit()
......
280 285

  
281 286
    name = ARCHIP_PREFIX + name
282 287

  
283
    xseg_ctx = Xseg_ctx(get_segment())
288
    xseg_segment = XsegSegment(kwargs.get('config'))
289
    xseg_ctx = Xseg_ctx(xseg_segment)
284 290
    mbport = peers['blockerm'].portno_start
285 291
    req = Request.get_release_request(xseg_ctx, mbport, name, force=force)
286 292
    req.submit()
......
299 305
        raise Error("Name should have at least len 6")
300 306

  
301 307
    ret = False
302
    xseg_ctx = Xseg_ctx(get_segment())
308
    xseg_segment = XsegSegment(kwargs.get('config'))
309
    xseg_ctx = Xseg_ctx(xseg_segment)
303 310
    vport = peers['vlmcd'].portno_start
304 311
    req = Request.get_open_request(xseg_ctx, vport, name)
305 312
    req.submit()
......
318 325
        raise Error("Name should have at least len 6")
319 326

  
320 327
    ret = False
321
    xseg_ctx = Xseg_ctx(get_segment())
328
    xseg_segment = XsegSegment(kwargs.get('config'))
329
    xseg_ctx = Xseg_ctx(xseg_segment)
322 330
    vport = peers['vlmcd'].portno_start
323 331
    req = Request.get_close_request(xseg_ctx, vport, name)
324 332
    req.submit()
......
337 345
        raise Error("Name should have at least len 6")
338 346

  
339 347
    ret = False
340
    xseg_ctx = Xseg_ctx(get_segment())
348
    xseg_segment = XsegSegment(kwargs.get('config'))
349
    xseg_ctx = Xseg_ctx(xseg_segment)
341 350
    mport = peers['mapperd'].portno_start
342 351
    req = Request.get_info_request(xseg_ctx, mport, name)
343 352
    req.submit()

Also available in: Unified diff