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;
...@@ -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,6 +259,11 @@ void decodeRequestAndProcess(char* buffer) { ...@@ -259,6 +259,11 @@ void decodeRequestAndProcess(char* buffer) {
} }
puts("key"); puts("key");
puts(request->key); puts(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")){ if(!strcmp(request->operation,"putreq")){
puts("putreq"); puts("putreq");
addKey(request->key,request->val); addKey(request->key,request->val);
...@@ -284,6 +289,11 @@ void decodeRequestAndProcess(char* buffer) { ...@@ -284,6 +289,11 @@ void decodeRequestAndProcess(char* buffer) {
// puts("buffer"); // puts("buffer");
// 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