Commit 6a89792c authored by Ravi's avatar Ravi

Second Chance Updated

parent 7395ad80
...@@ -2,4 +2,6 @@ ...@@ -2,4 +2,6 @@
*.out *.out
ClientData/clientResponses.txt ClientData/clientResponses.txt
obj/* obj/*
build/*
ServerData/*
checklist checklist
\ No newline at end of file
PUT 0 0
PUT 4 4
PUT 1 1 PUT 1 1
GET 1 PUT 4 4
PUT 2 2
PUT 4 4
PUT 3 3
PUT 4 4
PUT 2 2
PUT 4 4
PUT 0 0
PUT 4 4
PUT 1 1
PUT 4 4
PUT 2 2
PUT 4 4
PUT 3 3
PUT 4 4
\ No newline at end of file
...@@ -83,3 +83,246 @@ Success ...@@ -83,3 +83,246 @@ Success
1 1 1 1
Success Success
1 1 1 1
Success
1 1
Success
1 1
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
Success
...@@ -13,127 +13,19 @@ ...@@ -13,127 +13,19 @@
<Key></Key> <Key></Key>
<Value></Value> <Value></Value>
</CacheEntry> </CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
</Set> </Set>
<Set Id="1"> <Set Id="1">
<CacheEntry isReferenced="​​false"isValid="​false">
<Key>1</Key>
<Value>1</Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​true">
<Key>2</Key>
<Value>2</Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​true"> <CacheEntry isReferenced="​​false"isValid="​true">
<Key>3</Key> <Key>3</Key>
<Value>3</Value> <Value>3</Value>
</CacheEntry> </CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false"> <CacheEntry isReferenced="​​false"isValid="​true">
<Key></Key> <Key>4</Key>
<Value></Value> <Value>4</Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
</Set>
<Set Id="2">
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
</Set>
<Set Id="3">
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false">
<Key></Key>
<Value></Value>
</CacheEntry> </CacheEntry>
<CacheEntry isReferenced="​​false"isValid="​false"> <CacheEntry isReferenced="​​false"isValid="​true">
<Key></Key> <Key>2</Key>
<Value></Value> <Value>2</Value>
</CacheEntry> </CacheEntry>
</Set> </Set>
</KVCache> </KVCache>
\ No newline at end of file
0,0
1,1
2,2 2,2
3,3 3,3
4,(null) 4,4
5,5
6,6
7,7
8,8
9,9
...@@ -30,6 +30,7 @@ struct data **kvc; ...@@ -30,6 +30,7 @@ struct data **kvc;
int *lastVisited; int *lastVisited;
int setValue( int len ) int setValue( int len )
{ {
return len%sets; return len%sets;
...@@ -73,7 +74,7 @@ int isPresent( int set , char key[]){ ...@@ -73,7 +74,7 @@ int isPresent( int set , char key[]){
int i; int i;
for( i =0 ; i<nway ; i++) for( i =0 ; i<nway ; i++)
{ {
if(!strcmp(kvc[set][i].key , key) && kvc[set][i].chance != -1) if(!strcmp(kvc[set][i].key , key) && kvc[set][i].isfree == 0 )
{ {
return i; return i;
...@@ -88,40 +89,47 @@ void findSlot(int set , char key[] , char value[]) ...@@ -88,40 +89,47 @@ void findSlot(int set , char key[] , char value[])
// printf("(%d)\n", lastVisited[set] ); // printf("(%d)\n", lastVisited[set] );
int i, j =0; int i, j =0;
// int counter = 10 ; // int counter = 10 ;
for(i= ((lastVisited[set]+1)%nway); j<nway ; j++ )
{
i = ( i + j ) % nway;
if( kvc[set][i].chance == 0 )
for(i = 0 ; i < nway ; i++)
{ {
lastVisited[set] = i ; if(kvc[set][i].isfree == 1)
// kvc[set][i].chance = 0; {
kvc[set][i].chance = 0;
strcpy (kvc[set][i].key , key); strcpy (kvc[set][i].key , key);
strcpy (kvc[set][i].value , value); strcpy (kvc[set][i].value , value);
kvc[set][i].isfree = 0; kvc[set][i].isfree = 0;
// printf("success %s \t %s\n", kvc[set][i].key , kvc[set][i].value );
// printf("%d\t%dsuccess\n", );
return; return;
} }
} }
for(int t = ((lastVisited[set]+1)%nway); j<nway ; j++ )
{
i = ( t + j ) % nway;
if( kvc[set][i].chance == 0 )
{
lastVisited[set] = i ;
kvc[set][i].chance = 0;
strcpy (kvc[set][i].key , key);
strcpy (kvc[set][i].value , value);
kvc[set][i].isfree = 0;
return;
}
else{
kvc[set][i].chance = 0;
}
}
} }
void updateCache(int set ,int pos ,char value[]) void updateCache(int set ,int pos ,char value[])
{ {
memset(kvc[set][pos].value , 0 , sizeof(kvc[set][pos].value)); memset(kvc[set][pos].value , 0 , sizeof(kvc[set][pos].value));
strcpy (kvc[set][pos].value , value ); strcpy (kvc[set][pos].value , value );
kvc[set][pos].isReferenced = 0; kvc[set][pos].isReferenced = 0;
//printf("updated %s \t %s\n", kvc[set][pos].key , kvc[set][pos].value ); kvc[set][pos].chance = 1;
} }
...@@ -139,7 +147,6 @@ int putData(char key[] , char value[]) ...@@ -139,7 +147,6 @@ int putData(char key[] , char value[])
findSlot(set , key , value); findSlot(set , key , value);
} }
writeRecordToFile(key , value); writeRecordToFile(key , value);
pthread_mutex_unlock(&(setLock[set].work_mutex)); pthread_mutex_unlock(&(setLock[set].work_mutex));
...@@ -154,16 +161,13 @@ char * getData( char key[]){ ...@@ -154,16 +161,13 @@ char * getData( char key[]){
for( i =0 ; i<nway ; i++) for( i =0 ; i<nway ; i++)
{ {
if(!strcmp(kvc[set][i].key , key) && kvc[set][i].chance != -1 && kvc[set][i].isfree ==0) if(!strcmp(kvc[set][i].key , key) && kvc[set][i].isfree ==0)
{ {
// printf("\nCache Hit");
kvc[set][i].chance = 1; kvc[set][i].chance = 1;
kvc[set][i].isReferenced = 1; kvc[set][i].isReferenced = 1;
pthread_mutex_unlock(&(setLock[set].work_mutex)); pthread_mutex_unlock(&(setLock[set].work_mutex));
// printf("GOT IT"); // printf("GOT IT");
return kvc[set][i].value; return kvc[set][i].value;
} }
} }
// printf("\ncache miss"); // printf("\ncache miss");
......
int sets = 4; int sets = 2;
int nway = 8; int nway = 3;
...@@ -111,7 +111,7 @@ void main (int argc, char *argv[]) ...@@ -111,7 +111,7 @@ void main (int argc, char *argv[])
fds[0].fd = listen_sd; fds[0].fd = listen_sd;
fds[0].events = POLLIN; fds[0].events = POLLIN;
timeout = (300 * 100); timeout = (50 * 100);
do do
{ {
......
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