Commit 5aad7393 authored by Bhavesh Yadav's avatar Bhavesh Yadav

Added server join and init

parent dec41427
......@@ -23,6 +23,6 @@ kvstore.o: kvstore.c kvstore.h
gcc -c kvstore.c
run: kvserver
./kvserver -port=8080 -threadPoolSize=5 -numSetsInCache=4 -sizeOfSet=2
./kvserver -port=8081 -threadPoolSize=5 -numSetsInCache=4 -sizeOfSet=2
clean:
rm -f *.o kvserver kvclient *.csv *.xml batchResp*.txt
\ No newline at end of file
......@@ -13,6 +13,7 @@
#include "utils.h"
#include <math.h>
#include "chord.h"
#include <pthread.h>
#define MAXLOCATIONS 32
#define MAXIDVALUE 65536
......@@ -109,8 +110,17 @@ void sortNodes(Node a[], int n)
{
qsort(a,n,sizeof(Node), compareTwoNodes);
}
void setSuccessor(Node allNodes[],int size) {
Node getSuccessor(int id, Node allNodes[],int size) {
int i;
for(i = size-1; i >=0; i--) {
if(allNodes[i].nodeId<id)
break;
}
if(i==size-1)
return allNodes[0];
return allNodes[i+1];
}
void setSuccessorAndPredecessor(Node allNodes[],int size) {
int i = 0;
for(i = 0; i<size; i++) {
if(chord.node.nodeId==allNodes[i].nodeId)
......@@ -128,23 +138,53 @@ void setSuccessor(Node allNodes[],int size) {
}
}
void *periodicStabilize(void *arg) {
while(1) {
stablize();
sleep(5);
}
}
void stablize() {
FILE *configFile = fopen(".chordConfig","r");
Node currNodes[100];
char ip[16];
int port,id;
int i = 0;
while(fscanf(configFile,"%s %d %d\n",ip,&port,&id)!=EOF){
createNodeStruct(&currNodes[i],ip,port,id);
i++;
}
fclose(configFile);
sortNodes(currNodes,i);
setSuccessorAndPredecessor(currNodes,i);
printf("successor: %d, pred: %d\n",chord.successor.nodeId,chord.predecessor.nodeId);
fixFingers(currNodes,i);
printFingerTable();
}
void initChordServer(sockaddr_t serverAddr) {
FILE *configFile = fopen("chordConfig","a");
FILE *configFile = fopen(".chordConfig","a");
chord.node.socketAddr = serverAddr;
chord.node.nodeId = nodeToId(&chord.node.socketAddr);
int id = nodeToId(&serverAddr);
fprintf(configFile,"%s %d %d\n",inet_ntoa(serverAddr.sin_addr),ntohs(serverAddr.sin_port),id);
fclose(configFile);
char ip[16];
int port;
configFile = fopen("chordConfig","r");
configFile = fopen(".chordConfig","r");
Node currNodes[100];
int i = 0;
while(fscanf(configFile,"%s %d %d\n",ip,&port,&id)!=EOF){
createNodeStruct(&currNodes[i],ip,port,id);
i++;
}
fclose(configFile);
sortNodes(currNodes,i);
setSuccessor(currNodes,i);
setSuccessorAndPredecessor(currNodes,i);
printf("successor: %d, pred: %d\n",chord.successor.nodeId,chord.predecessor.nodeId);
fixFingers(currNodes,i);
printFingerTable();
}
void createNodeStruct(Node *givenNode,char ip[16],int port,int id) {
......@@ -171,7 +211,7 @@ void initChordStructure(struct sockaddr_in *joinNode,sockaddr_t socketAddrServer
// Listen for reply
// update successor
}
fixFingers();
// fixFingers();
printFingerTable();
}
......@@ -211,7 +251,7 @@ Node findSuccessor(int id, bool fixFinger){
char *msg ,buffer[1000];
char idString[4];
sprintf(idString,"%d",id);
msg = toXML("find_successor",idString,NULL);
// msg = toXML("find_successor",idString,NULL);
puts(msg);
//make_packet and send
sendUDPToNode(msg,preceedingNode,true,buffer);
......@@ -235,13 +275,15 @@ Node findSuccessor(int id, bool fixFinger){
// sendUDP(msg,chord.successorIp,chord.successorPort,true,buffer);
// }
void fixFingers(){
for(int i = 0; i<3; i++) {
Node *newNode = (Node *)malloc(sizeof(Node));
getSocketFromIpAndPort("127.0.0.1",1230+i,&newNode->socketAddr);
newNode->nodeId = nodeToId(&newNode->socketAddr);
chord.fingerTable[i] = newNode;
void fixFingers(Node allNodes[],int size){
for(int i = 0; i<16; i++) {
if(chord.fingerTable[i]==NULL)
chord.fingerTable[i] = malloc(sizeof(Node));
Node newNode = getSuccessor((chord.node.nodeId + (int)pow(2,i)) % MAXIDVALUE,allNodes,size);
chord.fingerTable[i]->socketAddr = newNode.socketAddr;
chord.fingerTable[i]->nodeId = newNode.nodeId;
strcpy(chord.fingerTable[i]->ip,newNode.ip);
chord.fingerTable[i]->port = newNode.port;
}
}
......@@ -258,4 +300,4 @@ void printFingerTable() {
// int main() {
// initChordStructure(NULL);
// findSuccessor(123,true);
// }
\ No newline at end of file
// }
......@@ -276,7 +276,7 @@ void decodeRequestAndProcess(char* buffer) {
else if(!strcmp(request->operation,"getreq")){
puts("getreq");
if(searchKey(request->key,request->val))
strcpy(buffer,toXML("resp",request->key,request->val));
strcpy(buffer,toXML("resp",request->key,request->val,request->ipAddr,request->port));
else
strcpy(buffer,toRespXML("Does not exist"));
// puts("buffer");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment