|
16 | 16 | //using std::cout; |
17 | 17 | //using std::endl; |
18 | 18 |
|
| 19 | + |
| 20 | +// Intentionally drop some messages to test self-recovery. |
| 21 | +//#define INTENTIONALLY_DROP_MESSAGES |
| 22 | + |
| 23 | + |
| 24 | + |
19 | 25 | // #define DEBUG_STACK_TRACE |
20 | 26 |
|
21 | 27 | #ifdef DEBUG_STACK_TRACE |
@@ -264,7 +270,7 @@ void PABotBase::clear_all_active_commands(uint64_t seqnum){ |
264 | 270 | seqnum_t seqnum_s = (seqnum_t)iter->first; |
265 | 271 | memcpy(&message.body[0], &seqnum_s, sizeof(seqnum_t)); |
266 | 272 |
|
267 | | -// cout << "removing = " << seqnum_s << ", " << (int)iter->second.state << endl; |
| 273 | +// cout << "removing = " << seqnum_s << ", " << (int)iter->second.state << endl; |
268 | 274 |
|
269 | 275 | std::pair<std::map<uint64_t, PendingRequest>::iterator, bool> ret = m_pending_requests.emplace( |
270 | 276 | std::piecewise_construct, |
@@ -449,7 +455,15 @@ void PABotBase::process_command_finished(BotBaseMessage message){ |
449 | 455 | std::lock_guard<std::mutex> lg0(m_sleep_lock); |
450 | 456 | WriteSpinLock lg1(m_state_lock, "PABotBase::process_command_finished() - 0"); |
451 | 457 |
|
| 458 | +#ifdef INTENTIONALLY_DROP_MESSAGES |
| 459 | + if (rand() % 10 != 0){ |
| 460 | + send_message(BotBaseMessage(PABB_MSG_ACK_REQUEST, std::string((char*)&ack, sizeof(ack))), false); |
| 461 | + }else{ |
| 462 | + m_logger.log("Intentionally dropping finish ack: " + std::to_string(seqnum), COLOR_RED); |
| 463 | + } |
| 464 | +#else |
452 | 465 | send_message(BotBaseMessage(PABB_MSG_ACK_REQUEST, std::string((char*)&ack, sizeof(ack))), false); |
| 466 | +#endif |
453 | 467 |
|
454 | 468 | if (m_pending_commands.empty()){ |
455 | 469 | m_sniffer->log( |
@@ -664,7 +678,7 @@ uint64_t PABotBase::try_issue_request( |
664 | 678 |
|
665 | 679 | // Too many unacked requests in flight. |
666 | 680 | if (inflight_requests() >= queue_limit){ |
667 | | - m_logger.log("Message throttled due to too many inflight requests."); |
| 681 | +// m_logger.log("Message throttled due to too many inflight requests."); |
668 | 682 | return 0; |
669 | 683 | } |
670 | 684 |
|
@@ -694,7 +708,15 @@ uint64_t PABotBase::try_issue_request( |
694 | 708 | handle.request = std::move(message); |
695 | 709 | handle.first_sent = current_time(); |
696 | 710 |
|
| 711 | +#ifdef INTENTIONALLY_DROP_MESSAGES |
| 712 | + if (rand() % 10 != 0){ |
| 713 | + send_message(handle.request, false); |
| 714 | + }else{ |
| 715 | + m_logger.log("Intentionally dropping request: " + std::to_string(seqnum), COLOR_RED); |
| 716 | + } |
| 717 | +#else |
697 | 718 | send_message(handle.request, false); |
| 719 | +#endif |
698 | 720 |
|
699 | 721 | return seqnum; |
700 | 722 | } |
@@ -735,7 +757,7 @@ uint64_t PABotBase::try_issue_command( |
735 | 757 |
|
736 | 758 | // Too many unacked requests in flight. |
737 | 759 | if (inflight_requests() >= queue_limit){ |
738 | | - m_logger.log("Message throttled due to too many inflight requests."); |
| 760 | +// m_logger.log("Message throttled due to too many inflight requests."); |
739 | 761 | return 0; |
740 | 762 | } |
741 | 763 |
|
@@ -765,7 +787,15 @@ uint64_t PABotBase::try_issue_command( |
765 | 787 | handle.request = std::move(message); |
766 | 788 | handle.first_sent = current_time(); |
767 | 789 |
|
| 790 | +#ifdef INTENTIONALLY_DROP_MESSAGES |
| 791 | + if (rand() % 10 != 0){ |
| 792 | + send_message(handle.request, false); |
| 793 | + }else{ |
| 794 | + m_logger.log("Intentionally dropping command: " + std::to_string(seqnum), COLOR_RED); |
| 795 | + } |
| 796 | +#else |
768 | 797 | send_message(handle.request, false); |
| 798 | +#endif |
769 | 799 |
|
770 | 800 | return seqnum; |
771 | 801 | } |
|
0 commit comments