From f9e1817f20b3f8655c54f02f5dbed92c8a01d67e Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Tue, 12 Dec 2023 09:21:10 +0000 Subject: [PATCH] upd: on the way of debug --- backend/include/bs-utility.h | 9 +++++---- backend/src/bs-utility.cpp | 9 +++++---- backend/src/builtin-cli.cpp | 9 +++++++-- backend/src/schedule.cpp | 9 ++++++++- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/backend/include/bs-utility.h b/backend/include/bs-utility.h index 2edb877..d837378 100644 --- a/backend/include/bs-utility.h +++ b/backend/include/bs-utility.h @@ -37,12 +37,12 @@ class BlockingStringStream { std::stringstream internalStream; void readlock(); void unreadlock(); + std::atomic is_writing = false; private: std::mutex mutex; std::mutex custom_mutex; std::condition_variable condition; - std::atomic is_writing = false; }; // Implementation of operator<< template @@ -65,9 +65,10 @@ BlockingStringStream &BlockingStringStream::operator>>(T &val) { std::unique_lock lock(mutex); // Wait until data is available - condition.wait(lock, [this] { - return internalStream.peek() != EOF && !is_writing; - }); + if (!(internalStream.peek() != EOF && !is_writing)) + condition.wait(lock, [this] { + return internalStream.peek() != EOF && !is_writing; + }); internalStream >> val; diff --git a/backend/src/bs-utility.cpp b/backend/src/bs-utility.cpp index 5ad4813..2394255 100644 --- a/backend/src/bs-utility.cpp +++ b/backend/src/bs-utility.cpp @@ -5,10 +5,11 @@ BlockingStringStream &BlockingStringStream::getline(std::string &str, std::unique_lock lock(mutex); // Wait until data is available - condition.wait(lock, [this] { - return internalStream.peek() != EOF && !is_writing; - }); - str = ""; + if (!(internalStream.peek() != EOF && !is_writing)) + condition.wait(lock, [this] { + return internalStream.peek() != EOF && !is_writing; + }); + str = "$FAILED$"; std::getline(internalStream, str, delim); return *this; diff --git a/backend/src/builtin-cli.cpp b/backend/src/builtin-cli.cpp index be59d2d..c5ac5c2 100644 --- a/backend/src/builtin-cli.cpp +++ b/backend/src/builtin-cli.cpp @@ -1,5 +1,6 @@ #include "builtin-cli.h" +#include #include #include "bs-utility.h" @@ -19,7 +20,7 @@ void BookStoreMain(bool is_server, std::string config_dir) { output.getline(tmp); output >> SessionToken >> AuthenticationKey; // debugPrint("SessionToken=", SessionToken, - // " AuthenticationKey=", AuthenticationKey); + // " AuthenticationKey=", AuthenticationKey); std::string cmd; output.getline(tmp); while (getline(std::cin, cmd)) { @@ -35,12 +36,16 @@ void BookStoreMain(bool is_server, std::string config_dir) { input.readlock(); input << "#Request " << SessionToken << " I-T-D" << ++cnt << " " << AuthenticationKey << ' ' << cmd << '\n'; + assert(input.internalStream.peek() != EOF); input.unreadlock(); - // debugPrint("Sent Request ", cnt, " cmd=", cmd); + assert(input.is_writing == false); + debugPrint("Sent Request ", cnt, " cmd=", cmd); std::string SessionToken; std::string OperationToken; int LineCounter; output >> SessionToken >> OperationToken >> LineCounter; + debugPrint("Get the Head of response id=", OperationToken, + " LineCounter=", LineCounter); // debugPrint("Get SessionToken=", SessionToken, // " OperationToken=", OperationToken, // " LineCounter=", LineCounter); diff --git a/backend/src/schedule.cpp b/backend/src/schedule.cpp index 5e58d84..9fb4a99 100644 --- a/backend/src/schedule.cpp +++ b/backend/src/schedule.cpp @@ -1,5 +1,6 @@ #include "schedule.h" +#include #include #include #include @@ -11,7 +12,7 @@ void BookStoreBackEndClass::Run() { std::mt19937 rnd(RndSeed); while (true) { input_ptr->getline(request_data, '\n'); - // debugPrint("request_data=", request_data); + debugPrint("Get_request_data=", request_data); if (request_data[1] == 'O') // #OpenSession [TempChannelID] { std::stringstream ss; @@ -31,7 +32,10 @@ void BookStoreBackEndClass::Run() { (*output_ptr).readlock(); (*output_ptr) << TempChannelID << " IinitialOpt 1\n" << new_SessionToken << ' ' << new_AuthenticationKey << '\n'; + assert((*output_ptr).internalStream.peek() != EOF); (*output_ptr).unreadlock(); + assert((*output_ptr).is_writing == false); + debugPrint("Sent Response Init"); } else if (request_data[1] == 'C') { ; } else if (request_data[1] == '_') { @@ -53,7 +57,10 @@ void BookStoreBackEndClass::Run() { (*output_ptr).readlock(); (*output_ptr) << SessionToken << ' ' << OperationToken << " 1\n" << cmd << '\n'; + assert((*output_ptr).internalStream.peek() != EOF); (*output_ptr).unreadlock(); + assert((*output_ptr).is_writing == false); + debugPrint("Sent Response id=", OperationToken); // debugPrint(SessionToken, ' ', OperationToken, " 1\n", cmd); } }