Skip to content

Commit

Permalink
Merge machines WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
dianaclarke committed May 14, 2021
1 parent 44025ff commit 9da156b
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 2 deletions.
39 changes: 38 additions & 1 deletion conbench/tests/migrations/test_d91083587a7e_merge_machines.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,11 @@ def test_upgrade():
assert summary_4.machine_id == summary_4.run.machine_id
assert summary_5.machine_id == summary_5.run.machine_id

assert summary_1.machine_id != summary_2.machine_id
assert summary_1.machine_id != summary_3.machine_id
assert summary_1.machine_id != summary_4.machine_id
assert summary_1.machine_id != summary_5.machine_id

assert summary_1.machine.memory_bytes == 131590280000
assert summary_2.machine.memory_bytes == 131593068000
assert summary_3.machine.memory_bytes == 131593872000
Expand All @@ -470,4 +475,36 @@ def test_upgrade():
Session.refresh(summary_5)

# assert after migration
# TODO
machines = set(
[
summary_1.machine_id,
summary_2.machine_id,
summary_3.machine_id,
summary_4.machine_id,
summary_5.machine_id,
]
)
assert len(machines) == 3

assert summary_1.machine_id == summary_1.run.machine_id
assert summary_2.machine_id == summary_2.run.machine_id
assert summary_3.machine_id == summary_3.run.machine_id
assert summary_4.machine_id == summary_4.run.machine_id
assert summary_5.machine_id == summary_5.run.machine_id

assert summary_1.machine_id == summary_2.machine_id
assert summary_1.machine_id == summary_3.machine_id
assert summary_1.machine_id != summary_4.machine_id
assert summary_1.machine_id != summary_5.machine_id

assert summary_1.machine.memory_bytes == 132070244352
assert summary_2.machine.memory_bytes == 132070244352
assert summary_3.machine.memory_bytes == 132070244352
assert summary_4.machine.memory_bytes == 132070244352
assert summary_5.machine.memory_bytes == 132070244352

assert Machine.get(before_machine_id_1) is not None
assert Machine.get(before_machine_id_2) is None # deleted
assert Machine.get(before_machine_id_3) is None # deleted
assert Machine.get(before_machine_id_4) is not None
assert Machine.get(before_machine_id_5) is not None
49 changes: 48 additions & 1 deletion migrations/versions/d91083587a7e_merge_machines.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,61 @@
depends_on = None


def _round_memory(value):
# B -> GiB -> B
gigs = 1024 ** 3
return int("{:.0f}".format(value / gigs)) * gigs


def upgrade():
connection = op.get_bind()
meta = MetaData()
meta.reflect(bind=connection)
machine_table = meta.tables["machine"]
run_table = meta.tables["run"]
summary_table = meta.tables["summary"]
# TODO

machines = connection.execute(machine_table.select())
for machine in machines:
new_memory_bytes = _round_memory(machine.memory_bytes)
other = connection.execute(
machine_table.select().where(
machine_table.c.id != machine.id,
machine_table.c.name == machine.name,
machine_table.c.architecture_name == machine.architecture_name,
machine_table.c.kernel_name == machine.kernel_name,
machine_table.c.os_name == machine.os_name,
machine_table.c.os_version == machine.os_version,
machine_table.c.cpu_model_name == machine.cpu_model_name,
machine_table.c.cpu_l1d_cache_bytes == machine.cpu_l1d_cache_bytes,
machine_table.c.cpu_l1i_cache_bytes == machine.cpu_l1i_cache_bytes,
machine_table.c.cpu_l2_cache_bytes == machine.cpu_l2_cache_bytes,
machine_table.c.cpu_core_count == machine.cpu_core_count,
machine_table.c.cpu_thread_count == machine.cpu_thread_count,
machine_table.c.cpu_frequency_max_hz == machine.cpu_frequency_max_hz,
machine_table.c.memory_bytes == new_memory_bytes,
)
).fetchone()
if other:
connection.execute(
summary_table.update()
.where(summary_table.c.machine_id == machine.id)
.values(machine_id=other.id)
)
connection.execute(
run_table.update()
.where(run_table.c.machine_id == machine.id)
.values(machine_id=other.id)
)
connection.execute(
machine_table.delete().where(machine_table.c.id == machine.id)
)
else:
connection.execute(
machine_table.update()
.where(machine_table.c.id == machine.id)
.values(memory_bytes=new_memory_bytes)
)


def downgrade():
Expand Down

0 comments on commit 9da156b

Please sign in to comment.