Skip to content

Commit 27942dc

Browse files
authored
Implementation universal presets (#492)
close #484
1 parent 760ca5b commit 27942dc

22 files changed

Lines changed: 309 additions & 97 deletions

configuration_examples/topology_examples/adaptive_flowlet.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,48 @@ links:
2222
link-1:
2323
from: sender
2424
to: switch-1
25+
preset-name: default
2526
link-2:
2627
from: switch-1
2728
to: sender
29+
preset-name: default
2830
link-3:
2931
from: sender
3032
to: switch-2
33+
preset-name: default
3134
link-4:
3235
from: switch-2
3336
to: sender
37+
preset-name: default
3438
link-5:
3539
from: sender
3640
to: switch-3
41+
preset-name: default
3742
link-6:
3843
from: switch-3
3944
to: sender
45+
preset-name: default
4046
link-7:
4147
from: switch-1
4248
to: receiver
49+
preset-name: default
4350
link-8:
4451
from: receiver
4552
to: switch-1
53+
preset-name: default
4654
link-9:
4755
from: switch-2
4856
to: receiver
57+
preset-name: default
4958
link-10:
5059
from: receiver
5160
to: switch-2
61+
preset-name: default
5262
link-11:
5363
from: switch-3
5464
to: receiver
65+
preset-name: default
5566
link-12:
5667
from: receiver
5768
to: switch-3
69+
preset-name: default

configuration_examples/topology_examples/bus_topology.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,32 @@ links:
2626
link1:
2727
from: sender1
2828
to: bus
29+
preset-name: default
2930
link2:
3031
from: bus
3132
to: sender1
33+
preset-name: default
3234
link3:
3335
from: sender2
3436
to: bus
37+
preset-name: default
3538
link4:
3639
from: bus
3740
to: sender2
41+
preset-name: default
3842
link5:
3943
from: receiver1
4044
to: bus
45+
preset-name: default
4146
link6:
4247
from: bus
4348
to: receiver1
49+
preset-name: default
4450
link7:
4551
from: receiver2
4652
to: bus
53+
preset-name: default
4754
link8:
4855
from: bus
4956
to: receiver2
57+
preset-name: default

configuration_examples/topology_examples/for_swift_testing.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,27 @@ links:
2121
link1:
2222
from: sender1
2323
to: switch1
24+
preset-name: default
2425
link2:
2526
from: sender2
2627
to: switch1
28+
preset-name: default
2729

2830
# bottleneck link
2931
link3_bottleneck:
3032
from: switch1
3133
to: receiver1
3234
throughput: 5Gbps
35+
preset-name: default
3336
link4:
3437
from: receiver1
3538
to: switch1
39+
preset-name: default
3640
link5:
3741
from: switch1
3842
to: sender1
43+
preset-name: default
3944
link6:
4045
from: switch1
4146
to: sender2
47+
preset-name: default

configuration_examples/topology_examples/incast_topology.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,36 +27,48 @@ links:
2727
link0:
2828
from: sender0
2929
to: switch
30+
preset-name: default
3031
link1:
3132
from: switch
3233
to: sender0
34+
preset-name: default
3335
link2:
3436
from: sender1
3537
to: switch
38+
preset-name: default
3639
link3:
3740
from: switch
3841
to: sender1
42+
preset-name: default
3943
link4:
4044
from: sender2
4145
to: switch
46+
preset-name: default
4247
link5:
4348
from: switch
4449
to: sender2
50+
preset-name: default
4551
link6:
4652
from: sender3
4753
to: switch
54+
preset-name: default
4855
link7:
4956
from: switch
5057
to: sender3
58+
preset-name: default
5159
link8:
5260
from: sender4
5361
to: switch
62+
preset-name: default
5463
link9:
5564
from: switch
5665
to: sender4
66+
preset-name: default
5767
link10:
5868
from: switch
5969
to: receiver0
70+
preset-name: default
6071
link11:
6172
from: receiver0
6273
to: switch
74+
preset-name: default

configuration_examples/topology_examples/single_layer_fractal.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,48 @@ links:
2222
link-1:
2323
from: sender
2424
to: switch-1
25+
preset-name: default
2526
link-2:
2627
from: switch-1
2728
to: sender
29+
preset-name: default
2830
link-3:
2931
from: sender
3032
to: switch-2
33+
preset-name: default
3134
link-4:
3235
from: switch-2
3336
to: sender
37+
preset-name: default
3438
link-5:
3539
from: sender
3640
to: switch-3
41+
preset-name: default
3742
link-6:
3843
from: switch-3
3944
to: sender
45+
preset-name: default
4046
link-7:
4147
from: switch-1
4248
to: receiver
49+
preset-name: default
4350
link-8:
4451
from: receiver
4552
to: switch-1
53+
preset-name: default
4654
link-9:
4755
from: switch-2
4856
to: receiver
57+
preset-name: default
4958
link-10:
5059
from: receiver
5160
to: switch-2
61+
preset-name: default
5262
link-11:
5363
from: switch-3
5464
to: receiver
65+
preset-name: default
5566
link-12:
5667
from: receiver
5768
to: switch-3
69+
preset-name: default

configuration_examples/topology_examples/two_layers_fractal.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,60 +24,80 @@ links:
2424
link-1:
2525
from: sender
2626
to: switch-1
27+
preset-name: default
2728
link-2:
2829
from: switch-1
2930
to: sender
31+
preset-name: default
3032
link-3:
3133
from: sender
3234
to: switch-2
35+
preset-name: default
3336
link-4:
3437
from: switch-2
3538
to: sender
39+
preset-name: default
3640
link-5:
3741
from: switch-1
3842
to: switch-1-1
43+
preset-name: default
3944
link-6:
4045
from: switch-1-1
4146
to: switch-1
47+
preset-name: default
4248
link-7:
4349
from: switch-1
4450
to: switch-1-2
51+
preset-name: default
4552
link-8:
4653
from: switch-1-2
4754
to: switch-1
55+
preset-name: default
4856
link-9:
4957
from: switch-2
5058
to: switch-2-1
59+
preset-name: default
5160
link-10:
5261
from: switch-2-1
5362
to: switch-2
63+
preset-name: default
5464
link-11:
5565
from: switch-2
5666
to: switch-2-2
67+
preset-name: default
5768
link-12:
5869
from: switch-2-2
5970
to: switch-2
71+
preset-name: default
6072
link-13:
6173
from: switch-1-1
6274
to: receiver
75+
preset-name: default
6376
link-14:
6477
from: receiver
6578
to: switch-1-1
79+
preset-name: default
6680
link-15:
6781
from: switch-1-2
6882
to: receiver
83+
preset-name: default
6984
link-16:
7085
from: receiver
7186
to: switch-1-2
87+
preset-name: default
7288
link-17:
7389
from: switch-2-1
7490
to: receiver
91+
preset-name: default
7592
link-18:
7693
from: receiver
7794
to: switch-2-1
95+
preset-name: default
7896
link-19:
7997
from: switch-2-2
8098
to: receiver
99+
preset-name: default
81100
link-20:
82101
from: receiver
83102
to: switch-2-2
103+
preset-name: default

scripts/generators/topology/common.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ def add_directed_link(self, source_id : str, dest_id : str, preset_name : str =
5858
"from" : source_id,
5959
"to" : dest_id
6060
}
61-
if preset_name != "default":
62-
self.topology["links"][link_name]["preset-name"] = preset_name
61+
self.topology["links"][link_name]["preset-name"] = preset_name
6362
self.next_link_num += 1
6463

6564
def add_bidirectional_link(self,
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#include "./config_node_with_preset.hpp"
2+
3+
namespace sim{
4+
5+
ConfigNodeWithPreset::ConfigNodeWithPreset(ConfigNode a_node, std::optional<ConfigNode> a_presets_node, std::optional<ConfigNode> a_preset)
6+
: m_node(std::move(a_node)), m_presets_node(std::move(a_presets_node)), m_preset(std::move(a_preset)){}
7+
8+
ConfigNodeWithPresetExpected ConfigNodeWithPreset::operator[](std::string_view key) const{
9+
const ConfigNodeExpected child_node = m_node[key];
10+
if (!child_node.has_value()){
11+
// m_node hasn't key. Tries to find key in m_preset
12+
if (!m_preset.has_value()){
13+
// m_preset doesn't exist. Tries to find preset for this node
14+
if (!m_presets_node.has_value()){
15+
// m_presets_node doesn't exist. Returns message about it
16+
std::stringstream ss;
17+
ss << "Key error: node " << m_node << ":\n";
18+
ss << "does not have key " << key;
19+
return std::unexpected(ss.str());
20+
}
21+
// m_presets_node exist. Tries to find field 'preset-name' in m_node
22+
ConfigNodeExpected node_preset_name = m_node["preset-name"];
23+
if (!node_preset_name.has_value()){
24+
// config hasn't field 'preset-name'. Returns message about it
25+
std::stringstream ss;
26+
ss << "Key error: node " << m_node << ":\n";
27+
ss << "does not have key `preset-name`";
28+
return std::unexpected(ss.str());
29+
}
30+
// field 'preset-name' was found. Tries to convert it to string
31+
ConfigNode presets_node = m_presets_node.value();
32+
utils::StrExpected<std::string> preset_name = node_preset_name.value().as<std::string>();
33+
if (!preset_name.has_value()){
34+
// field 'preset-name' couldn't be converted to string. Returns message about it
35+
std::stringstream ss;
36+
ss << "Error: field 'preset-name' in node " << m_node << '\n';
37+
ss << "couldn't be converted to string";
38+
return std::unexpected(ss.str());
39+
}
40+
// conversion is successful. tries to find preset in m_presets_node
41+
ConfigNodeExpected preset_node = presets_node[preset_name.value()];
42+
if (!preset_node.has_value()){
43+
// m_presets_node hasn't preset with the specified name in config. Retruns message about it
44+
std::stringstream ss;
45+
ss << "Error: preset named '" << preset_name.value() << "' of node " << m_node << '\n';
46+
ss << "can not be found in presets node:" << presets_node << ":\n";
47+
return std::unexpected(ss.str());
48+
}
49+
// preset was found successfull. put the found value in m_preset
50+
m_preset.emplace(preset_node.value());
51+
}
52+
// tries to find key in preset
53+
ConfigNodeExpected key_node = m_preset.value()[key];
54+
if (!key_node.has_value()){
55+
// m_preset hasn't key. Returns message about it
56+
std::stringstream ss;
57+
ss << "Key error: preset '" << m_preset.value().get_name().value() << "' ";
58+
ss << "does not have key: " << key;
59+
return std::unexpected(ss.str());
60+
}
61+
// key was found in preset
62+
return ConfigNodeWithPreset(key_node.value(), m_presets_node, m_preset);
63+
}
64+
// key was found in m_node
65+
return ConfigNodeWithPreset(child_node.value(), m_presets_node, m_preset);
66+
}
67+
68+
const std::string& ConfigNodeWithPreset::get_name_or_throw() const{
69+
return m_node.get_name_or_throw();
70+
}
71+
72+
const ConfigNode& ConfigNodeWithPreset::get_node() const noexcept{
73+
return m_node;
74+
}
75+
76+
} // namespace sim

0 commit comments

Comments
 (0)