Exemplo n.º 1
0
def optimize_coalesce(operation_schedule):
    # now let's optimize the operation schedule
    # this optimization is quite basic
    # step 1: coalesce contiguous operations on the same file system

    operations_grouped_by_source = itertools.groupby(
        operation_schedule,
        lambda op: op[1]
    )
    new = []
    for _, opgroup in [ (x, list(y)) for x, y in operations_grouped_by_source ]:
        if not opgroup:  # empty opgroup
            continue
        if opgroup[0][0] == 'full':  # full operations
            new.extend(opgroup)
        elif opgroup[0][0] == 'create_stub':  # create stub operations
            new.extend(opgroup)
        elif opgroup[0][0] == 'incremental':  # incremental
            # 1->2->3->4 => 1->4
            new_ops = [ (srcs, dsts) for _, _, _, srcs, dsts in opgroup ]
            new_ops = simplify(new_ops)
            for srcs, dsts in new_ops:
                new.append(tuple(opgroup[0][:3] + (srcs, dsts)))
        else:
            assert 0, "not reached: unknown operation type in %s" % opgroup
    return new
Exemplo n.º 2
0
 def test_simple(self):
     m = [
     (1,2,"one"),
     (2,3,"two"),
     ]
     r1 = zfsutils.simplify(m)
     r2 = [[1, 3, 'one']]
     self.assertEqual(r1, r2)        
Exemplo n.º 3
0
 def test_simple(self):
     m = [
     (1,2,"one"),
     (2,3,"two"),
     ]
     r1 = zfsutils.simplify(m)
     r2 = [[1, 3, 'one']]
     self.assertEquals(r1, r2)        
Exemplo n.º 4
0
 def test_with_strings(self):
     m = [
     "abM",
     "bcN",
     "cdO",
     ]
     # note last element is a tuple
     r1 = zfsutils.simplify(m)
     r2 = [list("adM")]
     self.assertEqual(r1, r2)        
Exemplo n.º 5
0
 def test_discrete(self):
     m = [
     (1,2,"one"),
     (2,4,"two"),
     (6,9,"three"),
     ]
     # note last element is a tuple
     r1 = zfsutils.simplify(m)
     r2 = [[1, 4, 'one'], (6, 9, 'three')]
     self.assertEqual(r1, r2)        
Exemplo n.º 6
0
 def test_with_strings(self):
     m = [
     "abM",
     "bcN",
     "cdO",
     ]
     # note last element is a tuple
     r1 = zfsutils.simplify(m)
     r2 = [list("adM")]
     self.assertEquals(r1, r2)        
Exemplo n.º 7
0
 def test_discrete(self):
     m = [
     (1,2,"one"),
     (2,4,"two"),
     (6,9,"three"),
     ]
     # note last element is a tuple
     r1 = zfsutils.simplify(m)
     r2 = [[1, 4, 'one'], (6, 9, 'three')]
     self.assertEquals(r1, r2)        
Exemplo n.º 8
0
 def test_complex(self):
     m = [
     (1,2,"one"),
     (2,3,"two"),
     (3,4,"three"),
     (8,9,"three"),
     (4,5,"four"),
     (6,8,"blah"),
     ]
     r1 = zfsutils.simplify(m)
     r2 = [[1, 5, 'one'], [6, 9, 'blah']]
     self.assertEqual(r1, r2)        
Exemplo n.º 9
0
 def test_complex(self):
     m = [
     (1,2,"one"),
     (2,3,"two"),
     (3,4,"three"),
     (8,9,"three"),
     (4,5,"four"),
     (6,8,"blah"),
     ]
     r1 = zfsutils.simplify(m)
     r2 = [[1, 5, 'one'], [6, 9, 'blah']]
     self.assertEquals(r1, r2)