Commit 48173cf8 authored by Bhavesh Yadav's avatar Bhavesh Yadav

Added few functions in chord.c

parent 5352b6ab
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "utils.h"
#include "string.h"
void getSocketFromIpAndPort(char ip[16],int port, sockaddr_t *newSocketAddr) {
newSocketAddr->sin_family = AF_INET;
newSocketAddr->sin_port = htons(port);
newSocketAddr->sin_addr.s_addr = inet_addr(ip);
memset(&(newSocketAddr->sin_zero), '\0', 8);
}
\ No newline at end of file
typedef struct sockaddr_in sockaddr_t;
void getSocketFromIpAndPort(char ip[16],int port, sockaddr_t *newSocketAddr);
\ No newline at end of file
chord: chord.o utils.o kvserver: kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o utils.o chord.o
gcc chord.o utils.o -lcrypto -o chord gcc -o kvserver kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o chord.o utils.o -pthread -lcrypto
kvserver.o: kvserver.c threadPool.h KVCache.h kvstore.h
gcc -c kvserver.c
chord.o: chord.c chord.o: chord.c
gcc -c chord.c gcc -c chord.c
...@@ -7,12 +10,6 @@ chord.o: chord.c ...@@ -7,12 +10,6 @@ chord.o: chord.c
utils.o: utils.c utils.o: utils.c
gcc -c utils.c gcc -c utils.c
kvserver: kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o
gcc -o kvserver kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o -pthread
kvserver.o: kvserver.c threadPool.h KVCache.h kvstore.h
gcc -c kvserver.c
KVCache.o: KVCache.c KVCache.h kvstore.h KVCache.o: KVCache.c KVCache.h kvstore.h
gcc -c KVCache.c gcc -c KVCache.c
...@@ -26,6 +23,6 @@ kvstore.o: kvstore.c kvstore.h ...@@ -26,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 ./kvserver -port=8080 -threadPoolSize=5 -numSetsInCache=4 -sizeOfSet=2 -port=8989 -joinIp=12.22.22.22 -joinPort=1234
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
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <openssl/md5.h> #include <openssl/md5.h>
#include "parsexml.h"
#include "utils.h" #include "utils.h"
#include <math.h> #include <math.h>
...@@ -89,78 +90,98 @@ void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer) ...@@ -89,78 +90,98 @@ void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer)
close(sockfd); close(sockfd);
} }
void sendUDPToNode(char* msg,Node node, bool recvResponse, char* buffer) {
int sockfd;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
int n, len;
sendto(sockfd, (const char *)msg, strlen(msg),
MSG_CONFIRM, (const struct sockaddr *) &node.socketAddr,
sizeof(node.socketAddr));
if (recvResponse)
{
n = recvfrom(sockfd, (char *)buffer, 1000,
MSG_WAITALL, (struct sockaddr *) &node.socketAddr,
&len);
buffer[n] = '\0';
}
close(sockfd);
}
void initChordStructure(struct sockaddr_in *joinNode){ 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(); char ip[16] = "190.11.111.11";//getip();
int port = 199; int port = 199;
chord.node.socketAddr = socketAddrServer;
getSocketFromIpAndPort(ip,port,&chord.node.socketAddr); getSocketFromIpAndPort(ip,port,&chord.node.socketAddr);
printf("%s",inet_ntoa(chord.node.socketAddr.sin_addr)); // printf("%s",inet_ntoa(chord.node.socketAddr.sin_addr));
// strcpy(chord.selfIp ,ip); chord.node.nodeId = nodeToId(&chord.node.socketAddr);
// chord.selfId = nodeToId(ip,port); chord.predecessor.nodeId = -1;
// chord.predecessor =-1; if (joinNode == NULL)
// if (joinIp==NULL) {
// { chord.successor = chord.node;
// chord.successor = chord.selfId; }
// } else
// else {
// { /* send find successor packet to the ip */
// /* send find successor packet to the ip */ // Listen for reply
// // Listen for reply // update successor
// // update successor }
// }
} }
int main() {
initChordStructure(NULL);
}
// void closestPreceedingNode(int id, char ip[]){
// int m= log(MAXLOCATIONS); Node closestPreceedingNode(int id){
// Finger* f=chord.finger; int m= log(MAXLOCATIONS);
// for (int i = m-1; i >=0; i--) Node* f=chord.fingerTable;
// { for (int i = m-1; i >=0; i--)
// int nextId = f[m].nextId; {
// if (nextId>chord.selfId && nextId<=id) int nextId = f[m].nodeId;
// { if (nextId>chord.node.nodeId && nextId<=id)
// strcpy(ip,f[m].ip); {
// return; return *(f+m);
// } }
// } }
// strcpy(ip,f[0].ip); //???? // strcpy(ip,f[0].ip); //????
// } }
// Node findSuccessor(int id, char ip[], int port, bool block){ Node findSuccessor(int id, bool fixFinger){
// Node n; Node n;
// n.nodeId=-1; n.nodeId=-1;
// if (id>=chord.selfId && id<=chord.successor) if (id>=chord.node.nodeId && id<=chord.successor.nodeId)
// { {
// n.nodeId=chord.selfId; n.nodeId=chord.node.nodeId;
// strcpy(n.ip,chord.selfIp); n.socketAddr = chord.node.socketAddr;
// if (block) return n;
// {
// }
// else
// {
// return n;
// }
// } }
// else else
// { {
// char preceedingIp[16]; Node preceedingNode = closestPreceedingNode(id);
// closestPreceedingNode(id,preceedingIp); if(fixFinger){
// char msg[1000],buffer[1000]; char *msg ,buffer[1000];
// //make_packet and send char idString[4];
// sendUDP(msg,ip,port,true,buffer); sprintf(idString,"%d",id);
// return n; msg = toXML("find_successor",idString,NULL);
// } puts(msg);
//make_packet and send
sendUDPToNode(msg,preceedingNode,true,buffer);
//
}
return preceedingNode;
}
// } }
// void sendPredecessor(char ip[], int port){ // void sendPredecessor(char ip[], int port){
// int sockfd; // int sockfd;
...@@ -173,3 +194,11 @@ int main() { ...@@ -173,3 +194,11 @@ int main() {
// char msg[1000],buffer[1000]; // char msg[1000],buffer[1000];
// sendUDP(msg,chord.successorIp,chord.successorPort,true,buffer); // sendUDP(msg,chord.successorIp,chord.successorPort,true,buffer);
// } // }
// void fixFingers(){
// chord.fingerTable =
// }
// int main() {
// initChordStructure(NULL);
// findSuccessor(123,true);
// }
\ No newline at end of file
void sendPredecessor(); #include <sys/types.h>
\ No newline at end of file #include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include<stdbool.h>
void sendPredecessor();
int keyToId(char * key);
void initChordStructure(struct sockaddr_in *joinNode, struct sockaddr_in sockAddrServer);
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "KVCache.h" #include "KVCache.h"
#include "parsexml.h" #include "parsexml.h"
#include "kvstore.h" #include "kvstore.h"
#include "chord.h"
#include "utils.h"
#define MAX_CLIENTS 20 #define MAX_CLIENTS 20
#define BACKLOG 5 #define BACKLOG 5
...@@ -29,6 +31,8 @@ int main(int argc, char* argv[]) ...@@ -29,6 +31,8 @@ int main(int argc, char* argv[])
{ {
int numSets=16, setSize=4; int numSets=16, setSize=4;
int num_threads = 5; int num_threads = 5;
char joinIp[16];
int joinPort = -1;
PORT = 8080; PORT = 8080;
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
{ {
...@@ -48,6 +52,14 @@ int main(int argc, char* argv[]) ...@@ -48,6 +52,14 @@ int main(int argc, char* argv[])
{ {
setSize = atoi(argv[i]+11); setSize = atoi(argv[i]+11);
} }
else if (startsWith(argv[i],"-joinIp="))
{
strcpy(joinIp,(argv[i]+8));
}
else if (startsWith(argv[i],"-joinPort="))
{
joinPort = atoi(argv[i]+10);
}
} }
tpool_t* tp = createThreadPool(num_threads); tpool_t* tp = createThreadPool(num_threads);
...@@ -55,7 +67,11 @@ int main(int argc, char* argv[]) ...@@ -55,7 +67,11 @@ int main(int argc, char* argv[])
char* cacheptr = buildCache(numSets, setSize); char* cacheptr = buildCache(numSets, setSize);
initStore(); initStore();
int sock_fd, addrlen, msglen, newConnection, client_socket[MAX_CLIENTS], max_sd; int sock_fd, addrlen, msglen, newConnection, client_socket[MAX_CLIENTS], max_sd;
struct sockaddr_in socketAddr; struct sockaddr_in socketAddr,joinServer;
puts("getting socket");
if(joinPort!=-1)
getSocketFromIpAndPort(joinIp,joinPort,&joinServer);
getSocketFromIpAndPort("127.0.0.1",PORT,&socketAddr);
char buffer[257*1024*10]; char buffer[257*1024*10];
fd_set rset; fd_set rset;
memset(client_socket,0,sizeof(int)*MAX_CLIENTS); memset(client_socket,0,sizeof(int)*MAX_CLIENTS);
...@@ -65,16 +81,17 @@ int main(int argc, char* argv[]) ...@@ -65,16 +81,17 @@ int main(int argc, char* argv[])
exit(1); exit(1);
} }
socketAddr.sin_family = AF_INET; // socketAddr.sin_family = AF_INET;
socketAddr.sin_addr.s_addr = INADDR_ANY; // socketAddr.sin_addr.s_addr = INADDR_ANY;
socketAddr.sin_port = htons( PORT ); //n socketAddr.sin_port = htons( PORT );
memset(&(socketAddr.sin_zero), '\0', 8); // memset(&(socketAddr.sin_zero), '\0', 8);
addrlen = sizeof(struct sockaddr_in); addrlen = sizeof(struct sockaddr_in);
if (bind(sock_fd, (struct sockaddr *)&socketAddr, addrlen)<0){ if (bind(sock_fd, (struct sockaddr *)&socketAddr, addrlen)<0){
perror("bind failed"); perror("bind failed");
exit(1); exit(1);
} }
initChordStructure(&joinServer,socketAddr);
printf("Listening on port %d \n", PORT); printf("Listening on port %d \n", PORT);
if (listen(sock_fd, BACKLOG) < 0) { if (listen(sock_fd, BACKLOG) < 0) {
......
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/in.h> #include <netinet/in.h>
#include "utils.h" #include "utils.h"
#include "string.h"
void getSocketFromIpAndPort(char ip[16],int port, sockaddr_t *newSocketAddr) { void getSocketFromIpAndPort(char ip[16],int port, sockaddr_t *newSocketAddr) {
newSocketAddr->sin_family = AF_INET; newSocketAddr->sin_family = AF_INET;
newSocketAddr->sin_port = htons(port); newSocketAddr->sin_port = htons(port);
newSocketAddr->sin_addr.s_addr = inet_addr(ip); newSocketAddr->sin_addr.s_addr = inet_addr(ip);
memset(&(newSocketAddr->sin_zero), '\0', 8);
} }
\ No newline at end of file
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