From 19fc7954b73ddfea16a5ffa0b61d881b1af08284 Mon Sep 17 00:00:00 2001 From: Sakeerthan Date: Sun, 24 Dec 2023 17:13:58 +0530 Subject: [PATCH] Fix Bugs in pagerank & idd implementation --- .../JasmineGraphHashMapLocalStore.cpp | 5 +- src/server/JasmineGraphInstanceService.cpp | 70 ++++++++++++------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/localstore/JasmineGraphHashMapLocalStore.cpp b/src/localstore/JasmineGraphHashMapLocalStore.cpp index db107b25e..41d6bf43b 100644 --- a/src/localstore/JasmineGraphHashMapLocalStore.cpp +++ b/src/localstore/JasmineGraphHashMapLocalStore.cpp @@ -146,10 +146,7 @@ map JasmineGraphHashMapLocalStore::getInDegreeDistributionHashMap() long previousValue = distMapItr->second; distMapItr->second = previousValue + 1; } else { - std::map>::iterator graphItr = localSubGraphMap.find(*itr); - if (graphItr != localSubGraphMap.end()) { - distributionHashMap.insert(std::make_pair(*itr, 1)); - } + distributionHashMap.insert(std::make_pair(*itr, 1)); } } } diff --git a/src/server/JasmineGraphInstanceService.cpp b/src/server/JasmineGraphInstanceService.cpp index a0be7b7dd..b261cd8c9 100644 --- a/src/server/JasmineGraphInstanceService.cpp +++ b/src/server/JasmineGraphInstanceService.cpp @@ -1385,6 +1385,8 @@ map calculateInDegreeDist(string graphID, string partitionID, int se if (degreeDistributionLocalItr != degreeDistribution.end()) { long degreeDistributionValue = degreeDistributionLocalItr->second; degreeDistribution[degreeDistributionLocalItr->first] = degreeDistributionValue + its->second; + } else { + degreeDistribution.insert(std::make_pair(its->first, its->second)); } } @@ -1689,28 +1691,35 @@ map calculateLocalPageRank(string graphID, double alpha, string pa // calculating local pagerank map rankMap; - map inDegreeDistribution; + std::map inDegreeDistribution; std::string aggregatorFilePath = Utils::getJasmineGraphProperty("org.jasminegraph.server.instance.datafolder"); - std::string iddFilePath = aggregatorFilePath + "/" + graphID + "_idd_" + partitionID; - ifstream dataFile; - dataFile.open(iddFilePath); - - while (!dataFile.eof()) { - std::string str; - std::getline(dataFile, str); - std::stringstream buffer(str); - std::string temp; - std::vector values; - - while (getline(buffer, temp, '\t')) { - values.push_back(::strtod(temp.c_str(), nullptr)); - } - if (values.size() == 2) { - long nodeID = values[0]; - long iddValue = values[1]; - inDegreeDistribution.insert(std::make_pair(nodeID, iddValue)); + + for (int partitionID = 0; partitionID <= 1; ++partitionID) { + std::string iddFilePath = aggregatorFilePath + "/" + graphID + "_idd_" + std::to_string(partitionID); + std::ifstream dataFile; + dataFile.open(iddFilePath); + + while (!dataFile.eof()) { + std::string str; + std::getline(dataFile, str); + std::stringstream buffer(str); + std::string temp; + std::vector values; + + while (getline(buffer, temp, '\t')) { + values.push_back(::strtod(temp.c_str(), nullptr)); + } + + if (values.size() == 2) { + long nodeID = values[0]; + long iddValue = values[1]; + + inDegreeDistribution[nodeID] = std::max(inDegreeDistribution[nodeID], iddValue); + } } + + dataFile.close(); } for (localGraphMapIterator = localGraphMap.begin(); localGraphMapIterator != localGraphMap.end(); @@ -1767,15 +1776,9 @@ map calculateLocalPageRank(string graphID, double alpha, string pa if (top_k_page_rank_value == -1) { instance_logger.log("PageRank is not implemented", "info"); } else { - std::string resultTree = ""; - for (map::iterator rankMapItr = rankMap.begin(); rankMapItr != rankMap.end(); ++rankMapItr) { - rankMapResults.insert(std::make_pair(rankMapItr->second, rankMapItr->first)); - } - int count = 0; - for (map::iterator rankMapItr = rankMapResults.end(); rankMapItr != rankMapResults.begin(); - --rankMapItr) { - finalPageRankResults.insert(std::make_pair(rankMapItr->second, rankMapItr->first)); + for (map::iterator rankMapItr = rankMap.begin(); rankMapItr != rankMap.end(); ++rankMapItr) { + finalPageRankResults.insert(std::make_pair(rankMapItr->first, rankMapItr->second)); count++; } } @@ -2965,6 +2968,19 @@ static void page_rank_command(int connFd, int serverPort, double value = pageRankValue->second; pageRankLocalstore.insert(std::make_pair(startVid, value)); } + + for (auto a = endVidSet.begin(); a != endVidSet.end(); ++a) { + long endVid = *a; + map::iterator pageRankValue = pageRankResults.find(endVid); + if (pageRankLocalstore.find(endVid) == pageRankLocalstore.end()) { + if (pageRankValue == pageRankResults.end()) { + pageRankLocalstore.insert(std::make_pair(endVid, 0.0)); + } else { + double value = pageRankValue->second; + pageRankLocalstore.insert(std::make_pair(endVid, value)); + } + } + } } string instanceDataFolderLocation = Utils::getJasmineGraphProperty("org.jasminegraph.server.instance.datafolder");