Skip to content

Commit 8de9291

Browse files
committed
node: updated write operation
1 parent 34a3a90 commit 8de9291

1 file changed

Lines changed: 24 additions & 35 deletions

File tree

src/network/node.c

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,66 +10,55 @@ struct node *generate_node(unsigned short id, size_t size) {
1010
return NULL;
1111
n->id = id;
1212
n->size = size;
13-
n->memory = malloc(size * sizeof(char) + 1);
13+
n->memory = malloc((1 + size) * sizeof(char));
14+
for (size_t i = 0; i < size; i++) {
15+
n->memory[i] = '#';
16+
}
17+
n->memory[size] = '\0';
1418
n->isleader = 0;
1519
return n;
1620
}
1721

1822
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);
23+
if (address + size <= n->size) {
24+
void *mem_op_ptr = (n->memory + address);
25+
memcpy((void *) mem_op_ptr, (void *) data, size);
2126
debug("Write done of :", n->id);
22-
debug_n((char *)n->memory, n->id, n->size);
27+
debug_n((char *) n->memory, n->id, n->size);
28+
}
29+
else {
30+
// printf("aske_addr %zu, ask_mem %zu, size_mem %zu\n\n", address, size, n->size);
31+
debug("OP WRITE FAILED", n->id);
2332
}
2433
}
2534

2635
void node_cycle(struct node *n) {
2736
while (1) {
2837
// cycle of node
29-
struct queue *q = queue_init();
30-
struct message *m;
31-
m = receive_message(q);
32-
38+
// OLD FIXME struct queue *q = queue_init();
39+
struct message *m = generate_message(0, 0, 0, 0, 0, OP_NONE);
40+
MPI_Status st;
41+
MPI_Recv(m, sizeof(struct message), MPI_BYTE, MPI_ANY_SOURCE, 3, MPI_COMM_WORLD, &st);
42+
debug("Recv OP", n->id);
3343
switch (m->op) {
3444
case OP_OK:
3545
break;
36-
case OP_MALLOC:
37-
break;
38-
case OP_FREE:
39-
break;
4046
case OP_WRITE: {
47+
debug("Write OP : send OK", n->id);
48+
struct message *mW = generate_message(n->id, m->id_s, n->id, 0, 0, OP_OK);
49+
MPI_Send(mW, sizeof(struct message), MPI_BYTE, mW->id_t, 3, MPI_COMM_WORLD);
4150
size_t addr = m->address;
4251
size_t size = m->size;
4352
char *data = malloc(size * sizeof(char));
44-
MPI_Status st;
45-
MPI_Recv(data, size, MPI_BYTE, m->id_s, 4, MPI_COMM_WORLD, &st);
53+
MPI_Status st3;
54+
MPI_Recv(data, size, MPI_BYTE, m->id_s, 4, MPI_COMM_WORLD, &st3);
4655
write_on_node(n, addr, data, size);
4756
free(data);
4857
}
4958
break;
5059
case OP_READ:
5160
break;
52-
case OP_SNAP:
53-
break;
54-
case OP_LEADER:
55-
break;
56-
case OP_WHOISLEADER:
57-
break;
58-
case OP_REVIVE:
59-
break;
60-
case OP_KILL:
61-
break;
62-
case OP_TEST:
63-
break;
64-
case OP_NONE:
65-
break;
66-
case OP_DUMP:
67-
break;
68-
case OP_LEADER_OK:
69-
break;
70-
case OP_ALIVE:
71-
break;
72-
case OP_LEADER_AGAIN:
61+
default:
7362
break;
7463
}
7564
if (m->op == OP_KILL)

0 commit comments

Comments
 (0)