Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kv-distributed
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
BHAVESHKUMAR SHYAMSUNDAR YADAV
kv-distributed
Commits
48173cf8
Commit
48173cf8
authored
Nov 24, 2019
by
Bhavesh Yadav
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added few functions in chord.c
parent
5352b6ab
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
140 additions
and
74 deletions
+140
-74
client/utils.c
client/utils.c
+12
-0
client/utils.h
client/utils.h
+2
-0
server/Makefile
server/Makefile
+6
-9
server/chord.c
server/chord.c
+87
-58
server/chord.h
server/chord.h
+9
-1
server/kvserver.c
server/kvserver.c
+22
-5
server/utils.c
server/utils.c
+2
-1
No files found.
client/utils.c
0 → 100644
View file @
48173cf8
#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
client/utils.h
0 → 100644
View file @
48173cf8
typedef
struct
sockaddr_in
sockaddr_t
;
void
getSocketFromIpAndPort
(
char
ip
[
16
],
int
port
,
sockaddr_t
*
newSocketAddr
);
\ No newline at end of file
server/Makefile
View file @
48173cf8
chord
:
chord.o utils.o
gcc chord.o utils.o
-lcrypto
-o
chord
kvserver
:
kvserver.o threadPool.o KVCache.o parsexml.o kvstore.o utils.o chord.o
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
gcc
-c
chord.c
...
...
@@ -7,12 +10,6 @@ chord.o: chord.c
utils.o
:
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
gcc
-c
KVCache.c
...
...
@@ -26,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
=
8080
-threadPoolSize
=
5
-numSetsInCache
=
4
-sizeOfSet
=
2
-port
=
8989
-joinIp
=
12.22.22.22
-joinPort
=
1234
clean
:
rm
-f
*
.o kvserver kvclient
*
.csv
*
.xml batchResp
*
.txt
\ No newline at end of file
server/chord.c
View file @
48173cf8
...
...
@@ -9,6 +9,7 @@
#include <arpa/inet.h>
#include <netinet/in.h>
#include <openssl/md5.h>
#include "parsexml.h"
#include "utils.h"
#include <math.h>
...
...
@@ -89,78 +90,98 @@ void sendUDP(char * msg, char ip[], int port, bool recvResponse, char * buffer)
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
));
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
));
// strcpy(chord.selfIp ,ip);
// chord.selfId = nodeToId(ip,port);
// chord.predecessor =-1;
// if (joinIp==NULL)
// {
// chord.successor = chord.selfId;
// }
// else
// {
// /* send find successor packet to the ip */
// // Listen for reply
// // update successor
// }
// printf("%s",inet_ntoa(chord.node.socketAddr.sin_addr));
chord
.
node
.
nodeId
=
nodeToId
(
&
chord
.
node
.
socketAddr
);
chord
.
predecessor
.
nodeId
=
-
1
;
if
(
joinNode
==
NULL
)
{
chord
.
successor
=
chord
.
node
;
}
else
{
/* send find successor packet to the ip */
// Listen for reply
// update successor
}
}
int
main
()
{
initChordStructure
(
NULL
);
}
// void closestPreceedingNode(int id, char ip[]){
// int m= log(MAXLOCATIONS);
// Finger* f=chord.finger
;
// for (int i = m-1; i >=0; i--)
// {
// int nextId = f[m].nextId;
// if (nextId>chord.selfId && nextId<=id)
// {
// strcpy(ip,f[m].ip);
// return
;
//
}
Node
closestPreceedingNode
(
int
id
){
int
m
=
log
(
MAXLOCATIONS
)
;
Node
*
f
=
chord
.
fingerTable
;
for
(
int
i
=
m
-
1
;
i
>=
0
;
i
--
)
{
int
nextId
=
f
[
m
].
nodeId
;
if
(
nextId
>
chord
.
node
.
nodeId
&&
nextId
<=
id
)
{
return
*
(
f
+
m
)
;
}
//
}
//
strcpy(ip,f[0].ip); //????
//
}
}
//
strcpy(ip,f[0].ip); //????
}
// Node findSuccessor(int id, char ip[], int port, bool block){
// Node n;
// n.nodeId=-1;
// if (id>=chord.selfId && id<=chord.successor)
// {
// n.nodeId=chord.selfId;
// strcpy(n.ip,chord.selfIp);
// if (block)
// {
// }
// else
// {
// return n;
// }
Node
findSuccessor
(
int
id
,
bool
fixFinger
){
Node
n
;
n
.
nodeId
=-
1
;
if
(
id
>=
chord
.
node
.
nodeId
&&
id
<=
chord
.
successor
.
nodeId
)
{
n
.
nodeId
=
chord
.
node
.
nodeId
;
n
.
socketAddr
=
chord
.
node
.
socketAddr
;
return
n
;
// }
// else
// {
// char preceedingIp[16];
// closestPreceedingNode(id,preceedingIp);
// char msg[1000],buffer[1000];
// //make_packet and send
// sendUDP(msg,ip,port,true,buffer);
// return n;
// }
}
else
{
Node
preceedingNode
=
closestPreceedingNode
(
id
);
if
(
fixFinger
){
char
*
msg
,
buffer
[
1000
];
char
idString
[
4
];
sprintf
(
idString
,
"%d"
,
id
);
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){
// int sockfd;
...
...
@@ -173,3 +194,11 @@ int main() {
// char msg[1000],buffer[1000];
// 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
server/chord.h
View file @
48173cf8
void
sendPredecessor
();
\ No newline at end of file
#include <sys/types.h>
#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
);
server/kvserver.c
View file @
48173cf8
...
...
@@ -13,6 +13,8 @@
#include "KVCache.h"
#include "parsexml.h"
#include "kvstore.h"
#include "chord.h"
#include "utils.h"
#define MAX_CLIENTS 20
#define BACKLOG 5
...
...
@@ -29,6 +31,8 @@ int main(int argc, char* argv[])
{
int
numSets
=
16
,
setSize
=
4
;
int
num_threads
=
5
;
char
joinIp
[
16
];
int
joinPort
=
-
1
;
PORT
=
8080
;
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
...
...
@@ -48,6 +52,14 @@ int main(int argc, char* argv[])
{
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
);
...
...
@@ -55,7 +67,11 @@ int main(int argc, char* argv[])
char
*
cacheptr
=
buildCache
(
numSets
,
setSize
);
initStore
();
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
];
fd_set
rset
;
memset
(
client_socket
,
0
,
sizeof
(
int
)
*
MAX_CLIENTS
);
...
...
@@ -65,16 +81,17 @@ int main(int argc, char* argv[])
exit
(
1
);
}
socketAddr
.
sin_family
=
AF_INET
;
socketAddr
.
sin_addr
.
s_addr
=
INADDR_ANY
;
socketAddr
.
sin_port
=
htons
(
PORT
);
memset
(
&
(
socketAddr
.
sin_zero
),
'\0'
,
8
);
//
socketAddr.sin_family = AF_INET;
//
socketAddr.sin_addr.s_addr = INADDR_ANY;
//n
socketAddr.sin_port = htons( PORT );
//
memset(&(socketAddr.sin_zero), '\0', 8);
addrlen
=
sizeof
(
struct
sockaddr_in
);
if
(
bind
(
sock_fd
,
(
struct
sockaddr
*
)
&
socketAddr
,
addrlen
)
<
0
){
perror
(
"bind failed"
);
exit
(
1
);
}
initChordStructure
(
&
joinServer
,
socketAddr
);
printf
(
"Listening on port %d
\n
"
,
PORT
);
if
(
listen
(
sock_fd
,
BACKLOG
)
<
0
)
{
...
...
server/utils.c
View file @
48173cf8
...
...
@@ -3,9 +3,10 @@
#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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment