Skip to content

Commit aaefd6f

Browse files
authored
Merge pull request #64 from timohl/master
Change required by migfra evacuate and fixed a compiler warning.
2 parents eb01960 + 82cb917 commit aaefd6f

File tree

4 files changed

+45
-2
lines changed

4 files changed

+45
-2
lines changed

include/fast-lib/message/migfra/task.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,9 @@ struct Evacuate :
249249
Optional<bool> rdma_migration;
250250
Optional<std::string> pscom_hook_procs;
251251
Optional<std::string> transport;
252+
253+
// Used internally by migration framework
254+
Optional<std::string> vm_name;
252255
};
253256

254257
/**

include/fast-lib/optional.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ Optional<T>::Optional(std::string tag, const T &rhs) :
9090

9191
template<typename T>
9292
Optional<T>::Optional(const Optional<T> &rhs) :
93+
Serializable(rhs),
9394
tag(rhs.tag),
9495
ptr(rhs.is_valid() ? new T(*rhs.ptr) : nullptr),
9596
valid(rhs.valid)
@@ -98,6 +99,7 @@ Optional<T>::Optional(const Optional<T> &rhs) :
9899

99100
template<typename T>
100101
Optional<T>::Optional(Optional<T> &&rhs) noexcept :
102+
Serializable(rhs),
101103
tag(std::move(rhs.tag)),
102104
ptr(std::move(rhs.ptr)),
103105
valid(rhs.valid)

src/message/migfra/task.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,8 @@ Evacuate::Evacuate() :
457457
migration_type("migration-type"),
458458
rdma_migration("rdma-migration"),
459459
pscom_hook_procs("pscom-hook-procs"),
460-
transport("transport")
460+
transport("transport"),
461+
vm_name("vm-name")
461462
{
462463
}
463464

@@ -470,7 +471,8 @@ Evacuate::Evacuate(std::vector<std::string> destinations, std::string mode, bool
470471
migration_type("migration-type", std::move(migration_type)),
471472
rdma_migration("rdma-migration", rdma_migration),
472473
pscom_hook_procs("pscom-hook-procs", std::move(pscom_hook_procs)),
473-
transport("transport")
474+
transport("transport"),
475+
vm_name("vm-name")
474476
{
475477
}
476478

@@ -486,6 +488,7 @@ YAML::Node Evacuate::emit() const
486488
merge_node(params, rdma_migration.emit());
487489
merge_node(params, pscom_hook_procs.emit());
488490
merge_node(params, transport.emit());
491+
merge_node(node, vm_name.emit());
489492
return node;
490493
}
491494

@@ -502,6 +505,7 @@ void Evacuate::load(const YAML::Node &node)
502505
pscom_hook_procs.load(node["parameter"]);
503506
transport.load(node["parameter"]);
504507
}
508+
vm_name.load(node);
505509
}
506510

507511

test/optional_test.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,46 @@ struct Task_tester :
7171
fructose_assert(p.get().id == 1);
7272
fructose_assert(p->id == 1);
7373
}
74+
75+
void optional_copy(const std::string &test_name)
76+
{
77+
(void) test_name;
78+
std::string name1_str = "bob";
79+
std::string name2_str = "baumeister";
80+
Optional<std::string> name1("name1", name1_str);
81+
Optional<std::string> name2("name2", name2_str);
82+
// Copy constructor
83+
Optional<std::string> copy_constr(name1);
84+
fructose_assert(name1.is_valid());
85+
fructose_assert(copy_constr.is_valid());
86+
fructose_assert_eq(name1.get(), name1_str);
87+
fructose_assert_eq(copy_constr.get(), name1_str);
88+
// Copy assignment
89+
Optional<std::string> copy_assign("empty");
90+
copy_assign = name2;
91+
fructose_assert(name2.is_valid());
92+
fructose_assert(copy_assign.is_valid());
93+
fructose_assert_eq(name2.get(), name2_str);
94+
fructose_assert_eq(copy_assign.get(), name2_str);
95+
// Move constructor
96+
Optional<std::string> move_constr(std::move(name1));
97+
fructose_assert(!name1.is_valid());
98+
fructose_assert(move_constr.is_valid());
99+
fructose_assert_eq(move_constr.get(), name1_str);
100+
// Move assignment
101+
Optional<std::string> move_assign("empty_move");
102+
move_assign = std::move(name2);
103+
fructose_assert(!name2.is_valid());
104+
fructose_assert(move_assign.is_valid());
105+
fructose_assert_eq(move_assign.get(), name2_str);
106+
}
74107
};
75108

76109
int main(int argc, char **argv)
77110
{
78111
Task_tester tests;
79112
tests.add_test("optional-bool", &Task_tester::optional_bool);
80113
tests.add_test("optional-struct", &Task_tester::optional_struct);
114+
tests.add_test("optional-copy", &Task_tester::optional_copy);
81115
return tests.run(argc, argv);
82116
}

0 commit comments

Comments
 (0)