From 9cad10368cc967668d42f1ff69cfa53c1de77bf2 Mon Sep 17 00:00:00 2001 From: afederici <ajf5@illinois.edu> Date: Sat, 21 Nov 2020 15:32:18 -0600 Subject: [PATCH] logging --- Wc | Bin 189312 -> 189136 bytes inc/FileObject.h | 1 + inc/Utils.h | 3 +-- src/FileObject.cpp | 13 +++++++++++++ src/Node.cpp | 20 ++++++++++---------- src/TcpSocket.cpp | 2 +- src/Utils.cpp | 6 +++--- 7 files changed, 29 insertions(+), 16 deletions(-) diff --git a/Wc b/Wc index eefd2132ef5c2f6c15ef8e0203d069a5b54d6c83..39b695f56e837a420befc3d41d00cc4a68a0e147 100755 GIT binary patch delta 25319 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�%u<kmCh1 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 Hit>K|S%ix2 delta 25037 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 diff --git a/inc/FileObject.h b/inc/FileObject.h index 059190e..ca0be72 100644 --- a/inc/FileObject.h +++ b/inc/FileObject.h @@ -16,6 +16,7 @@ using namespace std; string getMostRecentFile(string readfile); +void cleanupTmpFiles(); class FileObject { public: diff --git a/inc/Utils.h b/inc/Utils.h index 1b00295..2bab747 100644 --- a/inc/Utils.h +++ b/inc/Utils.h @@ -33,9 +33,8 @@ vector<string> splitString(string s, string delimiter); string getIP(); string getIP(const char * host); int new_thread_id(); -void handlePipe(int file, string prefix); +void handlePipe(int file); bool isInVector(vector<int> v, int i); - void sigchld_handler(int s); //adapted from https://stackoverflow.com/questions/23030267/custom-sorting-a-vector-of-tuples diff --git a/src/FileObject.cpp b/src/FileObject.cpp index 00ef92a..5042a49 100644 --- a/src/FileObject.cpp +++ b/src/FileObject.cpp @@ -37,3 +37,16 @@ string getMostRecentFile(string readfile){ sort(fileVersions.begin(), fileVersions.end()); return fileVersions[fileVersions.size()-1]; } + +void cleanupTmpFiles(){ + struct dirent *entry = nullptr; + DIR *dp = nullptr; + string match = "tmp-"; + int matchLen = match.size(); + if ((dp = opendir(".")) == nullptr) { cout << "tmp directory error " << endl;} + while ((entry = readdir(dp))){ + if (strncmp(entry->d_name, match.c_str(), matchLen) == 0){ + remove(entry->d_name); + } + } +} diff --git a/src/Node.cpp b/src/Node.cpp index cd24e16..5efec02 100644 --- a/src/Node.cpp +++ b/src/Node.cpp @@ -747,7 +747,7 @@ void Node::checkFileListConsistency(){ Messages outMsg(DNSGET, nodeInfo + "::" + to_string(nodesToCheck[i]) + "::" + element.first + "::"); tuple<int, int, int> request = pendingRequests[element.first]; if(get<0>(request) != -1 || get<1>(request) != -1 || get<2>(request) != -1){ - cout << "on put " << get<0>(request) << "/" << get<1>(request) << "/" << get<2>(request) << endl; + //cout << "on put " << get<0>(request) << "/" << get<1>(request) << "/" << get<2>(request) << endl; break; } pendingRequests[element.first] = tuple<int, int, int>(-1, -1, nodesToCheck[i]); @@ -823,6 +823,7 @@ void Node::handleTcpMessage() //currently running something, dont start a new phase if (mapleProcessing.size()) {tcpServent->regMessages.push(msg.toString()); cout << "[MAPLE] already mapling" << endl; break;} cout << "[MAPLE] Leader starting new Maple phase" << endl; + cleanupTmpFiles(); if (inMsg.size() >= 4){ string mapleExe = inMsg[0], num_maples = inMsg[1], sdfsPre = inMsg[2], sdfs_dir = inMsg[3] + "-"; int workers = stoi(num_maples); @@ -830,17 +831,16 @@ void Node::handleTcpMessage() if (workers > hashRing->nodePositions.size()-2) workers = hashRing->nodePositions.size()-2; int total_lines = 0; vector<tuple<string,int>> directory; - cout << "[DIRECTORY] " << sdfs_dir << endl; + cout << "[DIRECTORY] " << sdfs_dir; for (auto &e: fileSizes){ - cout << e.first << " | " << to_string(get<1>(e.second)); + cout << e.first << " | " << to_string(get<1>(e.second)) << " "; if (strncmp(e.first.c_str(), sdfs_dir.c_str(), sdfs_dir.size()) == 0){ cout << " was a match "; directory.push_back(make_tuple(e.first, get<1>(e.second))); total_lines += get<1>(e.second); } - cout << endl; } - cout << "[MAPLE] need to process " << to_string(total_lines) << endl; + cout << endl << "[MAPLE] need to process " << to_string(total_lines) << endl; vector<tuple<string,string,string>> aliveNodes; for (auto &e : membershipList) if (get<0>(e.first).compare(nodeInformation.ip)) aliveNodes.push_back(e.first); vector<tuple<string,string,string>> mapleNodes = randItems(workers, aliveNodes); @@ -892,7 +892,7 @@ void Node::handleTcpMessage() pid_t pid = fork(); if (pid){ //parent process, DONT need to waitpid because of signal handler set up close(dataPipe[1]); - handlePipe(dataPipe[0], sdfsPre); + handlePipe(dataPipe[0]); } else if (pid < 0) { fprintf (stderr, "Fork failed.\n"); break; } else { //child process @@ -1038,8 +1038,8 @@ void Node::handleTcpMessage() int lines = stoi(inMsg[5]); string overwriteFilename = inMsg[6]; string overwrite = inMsg[7]; - cout << "[DNS] Got " << "inMsgIP: " << inMsgIP << ", sdfsfilename: " << sdfsfilename; - cout << ", localfilename: " << localfilename << ", pos: " << nodePosition << endl; + //cout << "[DNS] Got " << "inMsgIP: " << inMsgIP << ", sdfsfilename: " << sdfsfilename; + //cout << ", localfilename: " << localfilename << ", pos: " << nodePosition << endl; // update fileList, client itself is one of the replicas updateFileList(sdfsfilename, nodePosition); fileSizes[sdfsfilename] = make_tuple(size, lines); @@ -1078,8 +1078,8 @@ void Node::handleTcpMessage() // since we do not keep files in hashRing, the value itself is IPaddress, not NODE:IP_Address string nodeIP = hashRing->getValue(nodePosition); //cout << "nodeIP " << nodeIP << endl; - cout << "[DNSANS] " << "we will put sdfsfilename: " << inMsg[2] << " to nodeIP: " << nodeIP; - cout << " using localfilename: " << inMsg[1] << endl; + //cout << "[DNSANS] " << "we will put sdfsfilename: " << inMsg[2] << " to nodeIP: " << nodeIP; + //cout << " using localfilename: " << inMsg[1] << endl; string sendMsg = nodeIP+"::"+inMsg[1]+"::"+inMsg[2]+"::"+inMsg[3]+"::"+inMsg[4]; this->tcpServent->pendSendMessages.push(sendMsg); } diff --git a/src/TcpSocket.cpp b/src/TcpSocket.cpp index 863cb4a..277bd03 100644 --- a/src/TcpSocket.cpp +++ b/src/TcpSocket.cpp @@ -293,7 +293,7 @@ int TcpSocket::messageHandler(int sockfd, string payloadMessage, string returnIP case CHUNK: case CHUNKACK: case DNS:{ - cout << "["<< messageTypes[msg.type] << "] payloadMessage: " << payloadMessage << endl; + //cout << "["<< messageTypes[msg.type] << "] payloadMessage: " << payloadMessage << endl; regMessages.push(payloadMessage); //handle from queue break; } diff --git a/src/Utils.cpp b/src/Utils.cpp index dbcdc7f..5c7cd89 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -50,9 +50,9 @@ bool isInVector(vector<int> v, int i){ return false; } -void handlePipe(int file, string prefix) { +void handlePipe(int file) { size_t bufSize = 1024; - cout << "[PIPE] sleeping for data. " << " Prefix: " << prefix << endl; + cout << "[PIPE] sleeping for data. " << endl; sleep(5); FILE *stream = fdopen(file, "r"); FILE *tmp; char str[bufSize]; @@ -62,7 +62,7 @@ void handlePipe(int file, string prefix) { lines++; std::string key(strtok(str, delim)); std::string val(strtok(NULL, delim)); - string keyFile = "tmp-" + prefix + "-" + key; + string keyFile = "tmp-" + key; string write = key + "," + val + "\n"; tmp = fopen(keyFile.c_str(), "ab"); fwrite(write.c_str(),sizeof(char),write.size(),tmp); -- GitLab