-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdelete.cpp
More file actions
51 lines (45 loc) · 1.54 KB
/
delete.cpp
File metadata and controls
51 lines (45 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <cstdio>
#include <cassert>
#include <cstdlib>
#include "delete.h"
void Deleter::do_object_delete(std::vector<int> &object_unit, std::vector<int> &disk_unit, int size) {
for (int i = 1; i <= size; i++) {
disk_unit[object_unit[i]] = 0;
}
}
void Deleter::delete_action() {
int n_delete;
int abort_num = 0;
static int _id[MaxObjectNum];
scanf("%d", &n_delete);
for (int i = 1; i <= n_delete; i++) {
scanf("%d", &_id[i]);
}
for (int i = 1; i <= n_delete; i++) {
int id = _id[i];
int current_id = data_.object.at(id).last_request_point; // Get the ID of the last request
while (current_id != 0) {
if (data_.request.at(current_id).is_done == false) {
abort_num++;
}
current_id = data_.request.at(current_id).prev_id;
}
}
printf("%d\n", abort_num);
for (int i = 1; i <= n_delete; i++) {
int id = _id[i];
int current_id = data_.object.at(id).last_request_point;
while (current_id != 0) {
if (data_.request.at(current_id).is_done == false) {
printf("%d\n", current_id);
}
data_.request.at(current_id).is_done = true;
current_id = data_.request.at(current_id).prev_id;
}
for (int j = 1; j <= RepNum; j++) {
do_object_delete(data_.object.at(id).unit[j], data_.disk.at(data_.object.at(id).replica[j]), data_.object.at(id).size);
}
data_.object.at(id).is_delete = true;
}
fflush(stdout);
}