aboutsummaryrefslogtreecommitdiffstats
path: root/P2
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--P2/lib/utils.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/P2/lib/utils.c b/P2/lib/utils.c
index e0683ef..b33421a 100644
--- a/P2/lib/utils.c
+++ b/P2/lib/utils.c
@@ -1,5 +1,6 @@
#include "utils.h"
+// Helper functions, open and close the queue
int openQueue() {
char cwd [50];
getcwd(cwd, 50);
@@ -9,6 +10,7 @@ int closeQueue(int id) {
return msgctl(id, IPC_RMID, NULL);
}
+// Creates a message
struct msgBuffer makeMessage() {
struct msgBuffer temp;
memset(temp.msgText, '\0', MSGSIZE);
@@ -16,6 +18,7 @@ struct msgBuffer makeMessage() {
return temp;
}
+// Receives chunks from sendChunkData()
char *getChunkData(int mapperID) {
//Message
struct msgBuffer message = makeMessage();
@@ -29,7 +32,7 @@ char *getChunkData(int mapperID) {
return value;
}
-// sends chunks of size 1024 to the mappers in RR fashion
+// Sends chunks of size 1024 to the mappers in RR fashion
void sendChunkData(char *inputFile, int nMappers) {
struct msgBuffer message = makeMessage();
// open message queue
@@ -72,6 +75,7 @@ int hashFunction(char* Qkey, int reducers){
return (hash % reducers);
}
+// Retrieves file path for the words reducer must reduce and compute the total count for
int getInterData(char *Qkey, int reducerID) {
struct msgBuffer message= makeMessage();
//DEBUG! make sure it work.
@@ -84,6 +88,8 @@ int getInterData(char *Qkey, int reducerID) {
return (strncmp("END", message.msgText, 3) != 0);
}
+// Divides the word.txt files in output/MapOut/Map_mapperID folders across nReducers and send filepath
+// across nReducers randomly from a hash function
void shuffle(int nMappers, int nReducers) {
struct msgBuffer message = makeMessage();
int id = openQueue();
@@ -91,7 +97,7 @@ void shuffle(int nMappers, int nReducers) {
exit(-1);
for (int i = 1; i <= nMappers; i++) {
char newpath[100];
- sprintf(newpath, "output/MapOut/Map_%d", i); // Removed /, add to current dir
+ sprintf(newpath, "output/MapOut/Map_%d", i);
DIR *dir = opendir(newpath);
if (dir == NULL)
break;
@@ -113,19 +119,19 @@ void shuffle(int nMappers, int nReducers) {
}
}
-// check if the character is valid for a word
+// Check if the character is valid for a word
int validChar(char c){
return (tolower(c) >= 'a' && tolower(c) <='z') ||
(c >= '0' && c <= '9');
}
+// Gets words from the buffer
char *getWord(char *chunk, int *i){
char *buffer = (char *)malloc(sizeof(char) * chunkSize);
memset(buffer, '\0', chunkSize);
int j = 0;
while((*i) < strlen(chunk)) {
// read a single word at a time from chunk
- // printf("%d\n", i);
if (chunk[(*i)] == '\n' || chunk[(*i)] == ' ' || !validChar(chunk[(*i)]) || chunk[(*i)] == 0x0) {
buffer[j] = '\0';
if(strlen(buffer) > 0){