Exemple #1
0
def loadSplitPointsFromMeta(metaUri):
    if not metaUri.startswith('meta+'):
        raise ValueError('not a meta table: %r' % metaUri)
    metaUri = metaUri[5:]
    
    import urllib,cgi
    p,q = urllib.splitquery(metaUri)
    q = cgi.parse_qs(q or '')
    tableName = q.get('name',[''])[0]

    if not tableName:
        raise ValueError('meta uri needs table name')

    from util.zero import zeroEncode,zeroDecode
    pred = '%r <= row < %r and column = "location"' % \
        (zeroEncode(tableName, '\x01', ''),
         zeroEncode(tableName, '\x02', ''))

    rows = []
    import pykdi
    for r,c,t,v in pykdi.Table(metaUri).scan(pred):
        n,x,r = zeroDecode(r)
        rows.append(r)

    f = 1.0 / (len(rows) + 1)
    return [((i+1)*f, r) for i,r in enumerate(rows)]
Exemple #2
0
def loadSplitPointsFromMeta(metaUri):
    if not metaUri.startswith('meta+'):
        raise ValueError('not a meta table: %r' % metaUri)
    metaUri = metaUri[5:]

    import urllib, cgi
    p, q = urllib.splitquery(metaUri)
    q = cgi.parse_qs(q or '')
    tableName = q.get('name', [''])[0]

    if not tableName:
        raise ValueError('meta uri needs table name')

    from util.zero import zeroEncode, zeroDecode
    pred = '%r <= row < %r and column = "location"' % \
        (zeroEncode(tableName, '\x01', ''),
         zeroEncode(tableName, '\x02', ''))

    rows = []
    import pykdi
    for r, c, t, v in pykdi.Table(metaUri).scan(pred):
        n, x, r = zeroDecode(r)
        rows.append(r)

    f = 1.0 / (len(rows) + 1)
    return [((i + 1) * f, r) for i, r in enumerate(rows)]
Exemple #3
0
def iterMetaCells(table, nPartitions, splitPoints, servers, format, alphabet):
    d = {}
    d['table'] = table

    pi = 0
    for split in iterSplits(nPartitions, splitPoints, alphabet):
        d['partition'] = pi
        d['server'] = servers[pi % len(servers)]
        row = zeroEncode(table, '\x01', split)
        value = format % d
        yield (row, 'location', 0, value)
        pi += 1

    d['partition'] = pi
    d['server'] = servers[pi % len(servers)]
    row = zeroEncode(table, '\x02', '')
    value = format % d
    yield (row, 'location', 0, value)
Exemple #4
0
def iterMetaCells(table, nPartitions, splitPoints, servers, format, alphabet):
    d = {}
    d['table'] = table

    pi = 0
    for split in iterSplits(nPartitions, splitPoints, alphabet):
        d['partition'] = pi
        d['server'] = servers[pi % len(servers)]
        row = zeroEncode(table, '\x01', split)
        value = format % d
        yield (row, 'location', 0, value)
        pi += 1

    d['partition'] = pi
    d['server'] = servers[pi % len(servers)]
    row = zeroEncode(table, '\x02', '')
    value = format % d
    yield (row, 'location', 0, value)
Exemple #5
0
def createTable(meta, table, server, force):
    import pykdi

    # Open META table
    metaTable = pykdi.Table(meta)

    # Create the row key
    from util.zero import zeroEncode
    row = zeroEncode(table, '\x02', '')
    
    # Make sure the table hasn't already been created (note this is a
    # race if there are other processes trying to create the table).
    for r,c,t,v in metaTable.scan('row = %r' % row):
        if force:
            metaTable.erase(r,c,t)
        else:
            raise RuntimeError('table %r already exists' % table)
    
    metaTable.set(row, 'config', 0, 'server = %s\n' % server)
    metaTable.sync()