Skip to content

Commit ab5a6a1

Browse files
authored
Merge pull request #28 from SidoShiro/cli-improve
Cli improve
2 parents 8994a23 + ef43f19 commit ab5a6a1

5 files changed

Lines changed: 57 additions & 4 deletions

File tree

include/command_queue.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ struct data_size *generate_data_size(size_t size);
4545

4646
struct data_id *generate_data_id(unsigned short id);
4747

48+
struct data_address *generate_data_address(size_t address);
49+
4850
struct data_write {
4951
size_t address;
5052
size_t size;

include/message.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enum operation {
1717
OP_TEST,
1818
OP_NONE,
1919
OP_DUMP,
20+
OP_DUMP_ALL,
2021
OP_LEADER_OK,
2122
OP_ALIVE,
2223
OP_LEADER_AGAIN

src/cli/cli.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,20 @@ char *read_cmd() {
4242
char **split_cmd(char *cmd) {
4343
char **tokens = NULL;
4444
char *token;
45+
int w = 0;
4546
ssize_t nb_tok = 1;
4647
token = strtok(cmd, " ");
48+
if (token && 0 == strcmp(token, "w"))
49+
w++;
4750
/* walk through other tokens */
4851
while (token != NULL) {
4952
tokens = realloc(tokens, nb_tok * sizeof(char *));
5053
tokens[nb_tok - 1] = token;
5154
nb_tok++;
52-
token = strtok(NULL, " ");
55+
if (nb_tok == 4 && w == 1)
56+
token = strtok(NULL, "\0");
57+
else
58+
token = strtok(NULL, " ");
5359
}
5460
tokens = realloc(tokens, nb_tok * sizeof(char *));
5561
tokens[nb_tok - 1] = NULL;
@@ -83,6 +89,7 @@ void execute(char **args, unsigned short leader) {
8389
" w `address` `datasize` `data` | write at the address the data of size datasize |\n"
8490
" r `address` `datasize` | read datasize bytes at address |\n"
8591
" d `address` | dump in as text all data of the block stored in address |\n"
92+
" d net | dump all allocation |\n"
8693
" d `address` `file` | dump address data in file |\n"
8794
" snap | give user a snap of the network (print) |\n"
8895
" snap `file` | same as snap but stored in file |\n"
@@ -180,7 +187,7 @@ void execute(char **args, unsigned short leader) {
180187
} else if (0 == strcmp(args[0], "d")) {
181188
// ERRORS
182189
if (l <= 1) {
183-
error_msg("d requires minimum 1 argument and maximum 2 : 'address' and 'file'");
190+
error_msg("d requires minimum 1 argument and maximum 2 : 'address' | 'net and 'file'");
184191
return;
185192
} else if (l >= 4) {
186193
error_msg("d do not support more than 2 arguments, check command h");
@@ -189,12 +196,17 @@ void execute(char **args, unsigned short leader) {
189196

190197
// Execution
191198
size_t address = 0;
192-
if (1 == sscanf(args[1], "%zu", &address)) {
199+
if (0 == strcmp(args[1], "net")) {
200+
printf("Execute DUMP_ALL");
201+
send_command(OP_DUMP_ALL, NULL, leader);
202+
} else if (1 == sscanf(args[1], "%zu", &address)) {
193203

194204
// d address
195205
if (l == 2) {
196206
printf("Execute Dump of %zu\n", address);
197-
207+
struct data_address *d_a = generate_data_address(address);
208+
send_command(OP_DUMP, d_a, leader);
209+
free(d_a);
198210
}
199211

200212
// d address file

src/cli/user.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,29 @@ void send_read(void *data, unsigned short leader) {
8787
free(m);
8888
}
8989

90+
void send_dump(void *data, unsigned short leader) {
91+
MPI_Request r;
92+
// MPI_Status st;
93+
struct data_address *d_a = data;
94+
struct message *m = generate_message(DEF_NODE_USER, leader, DEF_NODE_LEADER,
95+
d_a->address, 0, OP_DUMP);
96+
97+
MPI_Isend((void *) m, sizeof(struct message), MPI_BYTE, m->id_t, 0, MPI_COMM_WORLD, &r);
98+
99+
free(m);
100+
}
101+
102+
void send_dump_all(unsigned short leader) {
103+
MPI_Request r;
104+
// MPI_Status st;
105+
struct message *m = generate_message(DEF_NODE_USER, leader, DEF_NODE_LEADER,
106+
0, 0, OP_DUMP_ALL);
107+
108+
MPI_Isend((void *) m, sizeof(struct message), MPI_BYTE, m->id_t, 0, MPI_COMM_WORLD, &r);
109+
110+
free(m);
111+
}
112+
90113
void send_command(enum operation op, void *data, unsigned short leader) {
91114
switch (op) {
92115
case OP_OK:
@@ -103,6 +126,14 @@ void send_command(enum operation op, void *data, unsigned short leader) {
103126
debug("Send Read", 0);
104127
send_read(data, leader);
105128
break;
129+
case OP_DUMP:
130+
debug("Send Dump", 0);
131+
send_dump(data, leader);
132+
break;
133+
case OP_DUMP_ALL:
134+
debug("Send Dump All", 0);
135+
send_dump_all(leader);
136+
break;
106137
default:
107138
break;
108139
}

src/utils/command_queue.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,10 @@ struct data_id *generate_data_id(unsigned short id) {
8282
d_i->id = id;
8383
return d_i;
8484
}
85+
86+
87+
struct data_address *generate_data_address(size_t address) {
88+
struct data_address *d_a = malloc(sizeof(struct data_address));
89+
d_a->address = address;
90+
return d_a;
91+
}

0 commit comments

Comments
 (0)