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