Skip to content

Commit f7b6e37

Browse files
committed
refactor(FQDN): feather refactor on client and host_port.h
1 parent fa73a20 commit f7b6e37

File tree

3 files changed

+70
-13
lines changed

3 files changed

+70
-13
lines changed

src/meta/meta_data.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ bool construct_replica(meta_view view, const gpid &pid, int max_replica_count)
148148
break;
149149
}
150150
// similar to cc.drop_list, pc.last_drop is also a stack structure
151-
HEAD_INSERT_IP_AND_HOST_PORT_BY_DNS(pc, last_drops, iter->node);
151+
HEAD_INSERT_IP_AND_HOST_PORT_BY_DNS(pc, last_drops, iter->node, last_drops);
152152
LOG_INFO("construct for ({}), select {} into last_drops, ballot({}), "
153153
"committed_decree({}), prepare_decree({})",
154154
pid,

src/meta/test/meta_data.cpp

Lines changed: 65 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,36 @@ TEST(meta_data, construct_replica)
377377
std::vector<dsn::host_port> node_list;
378378
generate_node_list(node_list, 10, 10);
379379

380+
auto print_pc_cc = [&](const char *tag) {
381+
std::cout << "--------------------------------------------------" << std::endl;
382+
std::cout << "[" << tag << "] PC State:" << std::endl;
383+
std::cout << " Primary: " << (pc.__isset.hp_primary ? "SET" : "UNSET") << " "
384+
<< pc.hp_primary << std::endl;
385+
386+
std::cout << " Secondaries (" << (pc.__isset.hp_secondaries ? "SET" : "UNSET")
387+
<< ", size=" << pc.hp_secondaries.size() << "):" << std::endl;
388+
if (pc.__isset.hp_secondaries) {
389+
for (const auto &hp : pc.hp_secondaries)
390+
std::cout << " " << hp << std::endl;
391+
}
392+
393+
std::cout << " Last Drops (" << (pc.__isset.hp_last_drops ? "SET" : "UNSET")
394+
<< ", size=" << pc.hp_last_drops.size() << "):" << std::endl;
395+
if (pc.__isset.hp_last_drops) {
396+
for (const auto &hp : pc.hp_last_drops)
397+
std::cout << " " << hp << std::endl;
398+
}
399+
400+
std::cout << "[" << tag << "] CC State:" << std::endl;
401+
std::cout << " Dropped List (" << cc.dropped.size() << "):" << std::endl;
402+
for (const auto &dr : cc.dropped)
403+
std::cout << " Node=" << dr.node << ", Ballot=" << dr.ballot << std::endl;
404+
std::cout << " Prefered Dropped Index: " << cc.prefered_dropped << std::endl;
405+
std::cout << "--------------------------------------------------" << std::endl;
406+
};
407+
408+
print_pc_cc("BEFORE Test");
409+
380410
#define CLEAR_REPLICA \
381411
do { \
382412
RESET_IP_AND_HOST_PORT(pc, primary); \
@@ -405,8 +435,12 @@ TEST(meta_data, construct_replica)
405435
CLEAR_ALL;
406436
cc.dropped = {dropped_replica{node_list[0], dropped_replica::INVALID_TIMESTAMP, 5, 10, 12}};
407437
ASSERT_TRUE(construct_replica(view, rep.pid, 3));
408-
ASSERT_EQ(node_list[0], pc.hp_primary);
409-
ASSERT_TRUE(pc.hp_secondaries.empty());
438+
dsn::host_port primary;
439+
GET_HOST_PORT(pc, primary, primary);
440+
ASSERT_EQ(node_list[0], primary);
441+
std::vector<dsn::host_port> secondaries;
442+
GET_HOST_PORTS(pc, secondaries, secondaries);
443+
ASSERT_TRUE(secondaries.empty());
410444
ASSERT_TRUE(cc.dropped.empty());
411445
ASSERT_EQ(-1, cc.prefered_dropped);
412446
}
@@ -418,12 +452,20 @@ TEST(meta_data, construct_replica)
418452
dropped_replica{node_list[2], dropped_replica::INVALID_TIMESTAMP, 7, 10, 12},
419453
dropped_replica{node_list[3], dropped_replica::INVALID_TIMESTAMP, 8, 10, 12},
420454
dropped_replica{node_list[4], dropped_replica::INVALID_TIMESTAMP, 9, 11, 12}};
455+
print_pc_cc("BEFORE construct_replica");
421456
ASSERT_TRUE(construct_replica(view, rep.pid, 3));
422-
ASSERT_EQ(node_list[4], pc.hp_primary);
423-
ASSERT_TRUE(pc.hp_secondaries.empty());
457+
print_pc_cc("AFTER construct_replica");
458+
dsn::host_port primary;
459+
GET_HOST_PORT(pc, primary, primary);
460+
ASSERT_EQ(node_list[4], primary);
461+
std::vector<dsn::host_port> secondaries;
462+
GET_HOST_PORTS(pc, secondaries, secondaries);
463+
ASSERT_TRUE(secondaries.empty());
424464

425465
std::vector<dsn::host_port> nodes = {node_list[2], node_list[3]};
426-
ASSERT_EQ(nodes, pc.hp_last_drops);
466+
std::vector<dsn::host_port> last_drops;
467+
GET_HOST_PORTS(pc, last_drops, last_drops);
468+
ASSERT_EQ(nodes, last_drops);
427469
ASSERT_EQ(3, cc.dropped.size());
428470
ASSERT_EQ(2, cc.prefered_dropped);
429471
}
@@ -436,11 +478,17 @@ TEST(meta_data, construct_replica)
436478
dropped_replica{node_list[2], dropped_replica::INVALID_TIMESTAMP, 7, 12, 12}};
437479

438480
ASSERT_TRUE(construct_replica(view, rep.pid, 3));
439-
ASSERT_EQ(node_list[2], pc.hp_primary);
440-
ASSERT_TRUE(pc.hp_secondaries.empty());
481+
dsn::host_port primary;
482+
GET_HOST_PORT(pc, primary, primary);
483+
ASSERT_EQ(node_list[4], primary);
484+
std::vector<dsn::host_port> secondaries;
485+
GET_HOST_PORTS(pc, secondaries, secondaries);
486+
ASSERT_TRUE(secondaries.empty());
441487

442488
std::vector<dsn::host_port> nodes = {node_list[0], node_list[1]};
443-
ASSERT_EQ(nodes, pc.hp_last_drops);
489+
std::vector<dsn::host_port> last_drops;
490+
GET_HOST_PORTS(pc, last_drops, last_drops);
491+
ASSERT_EQ(nodes, last_drops);
444492
ASSERT_EQ(2, cc.dropped.size());
445493
ASSERT_EQ(1, cc.prefered_dropped);
446494
}
@@ -454,11 +502,17 @@ TEST(meta_data, construct_replica)
454502
dropped_replica{node_list[3], dropped_replica::INVALID_TIMESTAMP, 7, 14, 14}};
455503

456504
ASSERT_TRUE(construct_replica(view, rep.pid, 3));
457-
ASSERT_EQ(node_list[3], pc.hp_primary);
458-
ASSERT_TRUE(pc.hp_secondaries.empty());
505+
dsn::host_port primary;
506+
GET_HOST_PORT(pc, primary, primary);
507+
ASSERT_EQ(node_list[3], primary);
508+
std::vector<dsn::host_port> secondaries;
509+
GET_HOST_PORTS(pc, secondaries, secondaries);
510+
ASSERT_TRUE(secondaries.empty());
459511

460512
std::vector<dsn::host_port> nodes = {node_list[1], node_list[2]};
461-
ASSERT_EQ(nodes, pc.hp_last_drops);
513+
std::vector<dsn::host_port> last_drops;
514+
GET_HOST_PORTS(pc, last_drops, last_drops);
515+
ASSERT_EQ(nodes, last_drops);
462516

463517
ASSERT_EQ(3, cc.dropped.size());
464518
ASSERT_EQ(2, cc.prefered_dropped);

src/rpc/rpc_host_port.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,15 +215,18 @@ class TProtocol;
215215
// Head insert 'hp' and its DNS resolved rpc_address to the optional vector 'hp_<field>' and vector
216216
// '<field>' of 'obj'. The types of the fields are std::vector<rpc_address> and
217217
// std::vector<host_port>, respectively.
218-
#define HEAD_INSERT_IP_AND_HOST_PORT_BY_DNS(obj, field, hp) \
218+
#define HEAD_INSERT_IP_AND_HOST_PORT_BY_DNS(obj, field, hp, target) \
219219
do { \
220220
auto &_obj = (obj); \
221221
const auto &_hp = (hp); \
222+
auto &_target = (target); \
222223
_obj.field.insert(_obj.field.begin(), _hp.resolve()); \
223224
if (!_obj.__isset.hp_##field) { \
224225
_obj.__set_hp_##field({_hp}); \
226+
_target.emplace_back(_hp); \
225227
} else { \
226228
_obj.hp_##field.insert(_obj.hp_##field.begin(), _hp); \
229+
_target = _obj.hp_##field; \
227230
} \
228231
DCHECK_EQ(_obj.field.size(), _obj.hp_##field.size()); \
229232
} while (0)

0 commit comments

Comments
 (0)