Commit c059ec87 authored by Bhavesh Yadav's avatar Bhavesh Yadav

Server can now serve its own request

parent 48173cf8
...@@ -23,6 +23,6 @@ kvstore.o: kvstore.c kvstore.h ...@@ -23,6 +23,6 @@ kvstore.o: kvstore.c kvstore.h
gcc -c kvstore.c gcc -c kvstore.c
run: kvserver run: kvserver
./kvserver -port=8080 -threadPoolSize=5 -numSetsInCache=4 -sizeOfSet=2 -port=8989 -joinIp=12.22.22.22 -joinPort=1234 ./kvserver -port=8080 -threadPoolSize=5 -numSetsInCache=4 -sizeOfSet=2
clean: clean:
rm -f *.o kvserver kvclient *.csv *.xml batchResp*.txt rm -f *.o kvserver kvclient *.csv *.xml batchResp*.txt
\ No newline at end of file
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "parsexml.h" #include "parsexml.h"
#include "utils.h" #include "utils.h"
#include <math.h> #include <math.h>
#include "chord.h"
#define MAXLOCATIONS 32 #define MAXLOCATIONS 32
#define MAXIDVALUE 65536 #define MAXIDVALUE 65536
...@@ -38,22 +39,7 @@ int nodeToId(struct sockaddr_in *socketAddr){ ...@@ -38,22 +39,7 @@ int nodeToId(struct sockaddr_in *socketAddr){
return id; return id;
} }
typedef struct Node
{
int nodeId;
struct sockaddr_in socketAddr;
}Node;
typedef struct Chord
{
Node node;
Node successor;
Node predecessor;
Node *fingerTable;
}Chord;
Chord chord;
void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer) void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer)
{ {
...@@ -65,7 +51,6 @@ void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer) ...@@ -65,7 +51,6 @@ void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer)
perror("socket creation failed"); perror("socket creation failed");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
memset(&servaddr, 0, sizeof(servaddr)); memset(&servaddr, 0, sizeof(servaddr));
// Filling server information // Filling server information
...@@ -117,10 +102,7 @@ void sendUDPToNode(char* msg,Node node, bool recvResponse, char* buffer) { ...@@ -117,10 +102,7 @@ void sendUDPToNode(char* msg,Node node, bool recvResponse, char* buffer) {
void initChordStructure(struct sockaddr_in *joinNode,sockaddr_t socketAddrServer){ void initChordStructure(struct sockaddr_in *joinNode,sockaddr_t socketAddrServer){
chord.fingerTable = (Node *) malloc(log(MAXLOCATIONS)*sizeof(Node)); chord.fingerTable = (Node *) malloc(log(MAXLOCATIONS)*sizeof(Node));
char ip[16] = "190.11.111.11";//getip();
int port = 199;
chord.node.socketAddr = socketAddrServer; chord.node.socketAddr = socketAddrServer;
getSocketFromIpAndPort(ip,port,&chord.node.socketAddr);
// printf("%s",inet_ntoa(chord.node.socketAddr.sin_addr)); // printf("%s",inet_ntoa(chord.node.socketAddr.sin_addr));
chord.node.nodeId = nodeToId(&chord.node.socketAddr); chord.node.nodeId = nodeToId(&chord.node.socketAddr);
chord.predecessor.nodeId = -1; chord.predecessor.nodeId = -1;
...@@ -134,7 +116,7 @@ void initChordStructure(struct sockaddr_in *joinNode,sockaddr_t socketAddrServer ...@@ -134,7 +116,7 @@ void initChordStructure(struct sockaddr_in *joinNode,sockaddr_t socketAddrServer
// Listen for reply // Listen for reply
// update successor // update successor
} }
} }
...@@ -155,14 +137,13 @@ Node closestPreceedingNode(int id){ ...@@ -155,14 +137,13 @@ Node closestPreceedingNode(int id){
} }
Node findSuccessor(int id, bool fixFinger){ Node findSuccessor(int id, bool fixFinger){
Node n; if(chord.predecessor.nodeId == -1) {
n.nodeId=-1; return chord.node;
if (id>=chord.node.nodeId && id<=chord.successor.nodeId) }else if(id>chord.predecessor.nodeId && id<=chord.node.nodeId)
return chord.node;
if (id>chord.node.nodeId && id<=chord.successor.nodeId)
{ {
n.nodeId=chord.node.nodeId; return chord.successor;
n.socketAddr = chord.node.socketAddr;
return n;
} }
else else
{ {
......
...@@ -4,6 +4,24 @@ ...@@ -4,6 +4,24 @@
#include <netinet/in.h> #include <netinet/in.h>
#include<stdbool.h> #include<stdbool.h>
typedef struct Node
{
int nodeId;
struct sockaddr_in socketAddr;
}Node;
typedef struct Chord
{
Node node;
Node successor;
Node predecessor;
Node *fingerTable;
}Chord;
Chord chord;
void sendPredecessor(); void sendPredecessor();
int keyToId(char * key); int keyToId(char * key);
void initChordStructure(struct sockaddr_in *joinNode, struct sockaddr_in sockAddrServer); void initChordStructure(struct sockaddr_in *joinNode, struct sockaddr_in sockAddrServer);
Node findSuccessor(int id, bool fixFinger);
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include<string.h> #include<string.h>
#include"KVCache.h" #include"KVCache.h"
#include "threadPool.h" #include "threadPool.h"
#include "chord.h"
struct request { struct request {
tFunction func; tFunction func;
...@@ -259,31 +259,41 @@ void decodeRequestAndProcess(char* buffer) { ...@@ -259,31 +259,41 @@ void decodeRequestAndProcess(char* buffer) {
} }
puts("key"); puts("key");
puts(request->key); puts(request->key);
if(!strcmp(request->operation,"putreq")){ int id = keyToId(request->key);
puts("putreq"); Node node = findSuccessor(id, false); //find server where the key belongs
addKey(request->key,request->val); if(node.nodeId == chord.node.nodeId) { //key belongs to the server
strcpy(buffer,toRespXML("Success")); puts("Node Id self");
// puts("buffer"); printf("%d",node.nodeId);
// puts(buffer); if(!strcmp(request->operation,"putreq")){
} puts("putreq");
else if(!strcmp(request->operation,"getreq")){ addKey(request->key,request->val);
puts("getreq");
if(searchKey(request->key,request->val))
strcpy(buffer,toXML("resp",request->key,request->val));
else
strcpy(buffer,toRespXML("Does not exist"));
// puts("buffer");
// puts(buffer);
}
else if (!strcmp(request->operation,"delreq")){
puts("delreq");
if(deleteKey(request->key))
strcpy(buffer,toRespXML("Success")); strcpy(buffer,toRespXML("Success"));
else // puts("buffer");
strcpy(buffer,toRespXML("Does not exist")); // puts(buffer);
// puts("buffer"); }
// puts(buffer); else if(!strcmp(request->operation,"getreq")){
puts("getreq");
if(searchKey(request->key,request->val))
strcpy(buffer,toXML("resp",request->key,request->val));
else
strcpy(buffer,toRespXML("Does not exist"));
// puts("buffer");
// puts(buffer);
}
else if (!strcmp(request->operation,"delreq")){
puts("delreq");
if(deleteKey(request->key))
strcpy(buffer,toRespXML("Success"));
else
strcpy(buffer,toRespXML("Does not exist"));
// puts("buffer");
// puts(buffer);
}
}else
{
puts("Forward request");
} }
// free(key); // free(key);
// free(value); // free(value);
// free(operation); // free(operation);
......
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