Example #1
0
    def __init__(self):
        gs = settings.general
        self.replication = gs.get('replication', 0)
        self.pgs = gs.get('pgs', 0)
        self.osds = gs.get('osds', 0)

        order = Bucket_Layout.compute_order(self.osds)
        self.bl = Bucket_Layout(2**order)

        self.offset = gs.get('offset', 0)
        self.pg_list = []
        
        for i in xrange(0, self.pgs):
            pg = PG(i, self)
            self.pg_list.append(pg)
        
        self.remap_acting()
        self.remap_up()
Example #2
0
    def __init__(self):
        gs = settings.general
        self.replication = gs.get('replication', 0)
        self.pgs = gs.get('pgs', 0)
        self.osds = gs.get('osds', 0)

        order = Bucket_Layout.compute_order(self.osds)

        self.bl = Bucket_Layout(2**order)
        self.bl2 = Bucket_Layout(2**(order - 1))

        self.offset = gs.get('offset', 0)
        self.pg_list = []

        for i in xrange(0, self.pgs):
            pg = PG(i, self)
            self.pg_list.append(pg)

        self.remap_acting()
        self.remap_up()
Example #3
0
class Pool:
    def __init__(self):
        gs = settings.general
        self.replication = gs.get('replication', 0)
        self.pgs = gs.get('pgs', 0)
        self.osds = gs.get('osds', 0)

        order = Bucket_Layout.compute_order(self.osds)

        self.bl = Bucket_Layout(2**order)
        self.bl2 = Bucket_Layout(2**(order - 1))

        self.offset = gs.get('offset', 0)
        self.pg_list = []
        
        for i in xrange(0, self.pgs):
            pg = PG(i, self)
            self.pg_list.append(pg)
        
        self.remap_acting()
        self.remap_up()

    def remap_acting(self):
        new_order = self.bl.compute_order(self.osds)
        self.bl.set_bucket_count(2**new_order)
        self.bl2.set_bucket_count(2**(new_order - 1))

        for i in xrange(0, self.pgs):
            pg = self.pg_list[i]
            pg.remap_acting()

    def remap_up(self):
        self.make_up_map()
#        print "up_map: %s" % self.up_map
        up_index = 0
        for i in xrange(0, self.pgs):
            pg = self.pg_list[i]
#            print "before pool up remap, up_index: %s" % up_index
            up_index = pg.remap_up(self.up_map, up_index)
#            print "after pool up remap, up_index: %s" % up_index

    def remap_up_grow(self):
        self.make_up_map()
        count = 0
        for i in xrange(0, self.pgs):
            pg = self.pg_list[i]
            if pg.remap_up_grow(self.up_map, 0):
                count += 1
        print "PGs that needed remapping: %s" % count

    def set_osds(self, osds):
        cur = self.get_all_up()
        self.osds = osds
#        print "osds: %s" % self.osds
        self.remap_acting()
        self.remap_up_grow()
        n = self.get_all_up()

        count = 0
        for i in xrange(0, len(n)):
            if cur[i] != n[i]:
                count += 1
        print "Remapped placements: %s" % count

           
    def get_all_up(self):
        l = []
        for pg in self.pg_list:
            l += pg.get_up()
        return l

    def make_up_map(self):
        down_osds = []
        for d in xrange(self.osds, 2**self.bl.order()):
           down_osds.append(d)
        
        up_map = []
        for osd in xrange(0, 2**self.bl.order()):
            if osd not in down_osds:
                up_map.append(osd)
        self.up_map = up_map

    def print_counts(self):
        acting_counts = [0]*(2**self.bl.order())
        up_counts = [0]*(2**self.bl.order())

        for pg in self.pg_list:
            for osd in pg.get_acting():
                acting_counts[osd] += 1
            for osd in pg.get_up():
                up_counts[osd] += 1

        print "acting counts:"
        print acting_counts
        print "up_counts"
        print up_counts
Example #4
0
class Pool:
    def __init__(self):
        gs = settings.general
        self.replication = gs.get('replication', 0)
        self.pgs = gs.get('pgs', 0)
        self.osds = gs.get('osds', 0)

        order = Bucket_Layout.compute_order(self.osds)

        self.bl = Bucket_Layout(2**order)
        self.bl2 = Bucket_Layout(2**(order - 1))

        self.offset = gs.get('offset', 0)
        self.pg_list = []

        for i in xrange(0, self.pgs):
            pg = PG(i, self)
            self.pg_list.append(pg)

        self.remap_acting()
        self.remap_up()

    def remap_acting(self):
        new_order = self.bl.compute_order(self.osds)
        self.bl.set_bucket_count(2**new_order)
        self.bl2.set_bucket_count(2**(new_order - 1))

        for i in xrange(0, self.pgs):
            pg = self.pg_list[i]
            pg.remap_acting()

    def remap_up(self):
        self.make_up_map()
        #        print "up_map: %s" % self.up_map
        up_index = 0
        for i in xrange(0, self.pgs):
            pg = self.pg_list[i]
            #            print "before pool up remap, up_index: %s" % up_index
            up_index = pg.remap_up(self.up_map, up_index)
#            print "after pool up remap, up_index: %s" % up_index

    def remap_up_grow(self):
        self.make_up_map()
        count = 0
        for i in xrange(0, self.pgs):
            pg = self.pg_list[i]
            if pg.remap_up_grow(self.up_map, 0):
                count += 1
        print "PGs that needed remapping: %s" % count

    def set_osds(self, osds):
        cur = self.get_all_up()
        self.osds = osds
        #        print "osds: %s" % self.osds
        self.remap_acting()
        self.remap_up_grow()
        n = self.get_all_up()

        count = 0
        for i in xrange(0, len(n)):
            if cur[i] != n[i]:
                count += 1
        print "Remapped placements: %s" % count

    def get_all_up(self):
        l = []
        for pg in self.pg_list:
            l += pg.get_up()
        return l

    def make_up_map(self):
        down_osds = []
        for d in xrange(self.osds, 2**self.bl.order()):
            down_osds.append(d)

        up_map = []
        for osd in xrange(0, 2**self.bl.order()):
            if osd not in down_osds:
                up_map.append(osd)
        self.up_map = up_map

    def print_counts(self):
        acting_counts = [0] * (2**self.bl.order())
        up_counts = [0] * (2**self.bl.order())

        for pg in self.pg_list:
            for osd in pg.get_acting():
                acting_counts[osd] += 1
            for osd in pg.get_up():
                up_counts[osd] += 1

        print "acting counts:"
        print acting_counts
        print "up_counts"
        print up_counts