Skip to content

Commit e1dae05

Browse files
committed
node: add node_cycle (with write handling), node now start with an allocation
1 parent 1560a4e commit e1dae05

3 files changed

Lines changed: 66 additions & 1 deletion

File tree

include/node.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ struct node {
1515

1616
struct node *generate_node(unsigned short id, size_t size);
1717

18+
void node_cycle(struct node *n);
19+
1820
#endif /* !DISTRIBUTEDMALLOC_NODE_H */

src/main/main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ int main(int argc, char **argv) {
6161
leader_loop(n, DEF_NODE_USER, size - 1);
6262
}
6363

64+
node_cycle(n);
65+
6466
/*
6567
while (1) {
6668
// routine

src/network/node.c

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
#include <communication.h>
2+
#include <string.h>
3+
#include <mpi.h>
4+
#include <debug.h>
15
#include "node.h"
26

37
struct node *generate_node(unsigned short id, size_t size) {
@@ -6,7 +10,64 @@ struct node *generate_node(unsigned short id, size_t size) {
610
return NULL;
711
n->id = id;
812
n->size = size;
9-
n->memory = malloc(size * sizeof(char));
13+
n->memory = malloc(size * sizeof(char) + 1);
1014
n->isleader = 0;
1115
return n;
1216
}
17+
18+
void write_on_node(struct node *n, size_t address, char *data, size_t size) {
19+
if (address < n->size && address + size < n->size) {
20+
n->memory = (char *) memcpy((void *) (n->memory + address), (void *) data, size);
21+
debug("Write done of :", n->id);
22+
debug_n((char *)n->memory, n->id, n->size);
23+
}
24+
}
25+
26+
void node_cycle(struct node *n) {
27+
// cycle of node
28+
struct message m;
29+
receive_message(&m);
30+
31+
switch (m.op) {
32+
case OP_OK:
33+
break;
34+
case OP_MALLOC:
35+
break;
36+
case OP_FREE:
37+
break;
38+
case OP_WRITE: {
39+
size_t addr = m.address;
40+
size_t size = m.size;
41+
char *data = malloc(size * sizeof(char));
42+
MPI_Status st;
43+
MPI_Recv(data, size, MPI_BYTE, m.id_s, 4, MPI_COMM_WORLD, &st);
44+
write_on_node(n, addr, data, size);
45+
free(data);
46+
}
47+
break;
48+
case OP_READ:
49+
break;
50+
case OP_SNAP:
51+
break;
52+
case OP_LEADER:
53+
break;
54+
case OP_WHOISLEADER:
55+
break;
56+
case OP_REVIVE:
57+
break;
58+
case OP_KILL:
59+
break;
60+
case OP_TEST:
61+
break;
62+
case OP_NONE:
63+
break;
64+
case OP_DUMP:
65+
break;
66+
case OP_LEADER_OK:
67+
break;
68+
case OP_ALIVE:
69+
break;
70+
case OP_LEADER_AGAIN:
71+
break;
72+
}
73+
}

0 commit comments

Comments
 (0)