root / DistributedBackupService / src / protocols / Backup.java
History | View | Annotate | Download (2.13 KB)
1 | 1 | up20130859 | package protocols; |
---|---|---|---|
2 | |||
3 | import server.Peer; |
||
4 | import sockets.Socket; |
||
5 | import utils.Utils; |
||
6 | |||
7 | import java.io.IOException; |
||
8 | import java.util.Random; |
||
9 | import java.util.concurrent.TimeUnit; |
||
10 | |||
11 | import chunk.Chunk; |
||
12 | import handlers.Message; |
||
13 | |||
14 | import static chunk.FolderManager.makeDir; |
||
15 | import static chunk.FolderManager.backupFile; |
||
16 | |||
17 | public class Backup implements Runnable { |
||
18 | |||
19 | private Peer peer;
|
||
20 | private Message req;
|
||
21 | |||
22 | private byte[] data; |
||
23 | private int replication; |
||
24 | private String fileID; |
||
25 | private int chunkNo; |
||
26 | private String version; |
||
27 | private int senderID; |
||
28 | private static int delayLimit; |
||
29 | |||
30 | public Backup(Peer peer, Message req) {
|
||
31 | this.peer = peer;
|
||
32 | this.req = req;
|
||
33 | |||
34 | System.out.println("BACKUP begins!"); |
||
35 | } |
||
36 | |||
37 | |||
38 | @Override
|
||
39 | public void run() { |
||
40 | |||
41 | version = req.getVersion(); |
||
42 | senderID = req.getSenderID(); |
||
43 | fileID = req.getFileID(); |
||
44 | chunkNo = req.getChunkNo(); |
||
45 | replication = req.getReplicationDegree(); |
||
46 | delayLimit = 300;
|
||
47 | |||
48 | if (senderID == peer.getID()) {
|
||
49 | System.out.println("Ignoring backup of own files"); |
||
50 | return;
|
||
51 | } |
||
52 | |||
53 | data = req.getBody(); |
||
54 | |||
55 | String chunkPathname = peer.getPath("chunks") + "/" + fileID; |
||
56 | |||
57 | makeDir(peer.getPath("chunks") + "/" + fileID); |
||
58 | |||
59 | boolean success = false; |
||
60 | try {
|
||
61 | success = backupFile(Integer.toString(chunkNo), chunkPathname, data);
|
||
62 | //save to database
|
||
63 | peer.addChunkToFileManager(new Chunk(fileID, chunkNo, replication, data.length));
|
||
64 | } catch (IOException e) { |
||
65 | e.printStackTrace(); |
||
66 | } |
||
67 | |||
68 | if (! success) {
|
||
69 | System.out.println("Memory overflow"); |
||
70 | } else {
|
||
71 | sendMsgStored(); |
||
72 | } |
||
73 | |||
74 | System.out.println("Finished backup!"); |
||
75 | } |
||
76 | |||
77 | private void sendMsgStored() { |
||
78 | String[] args = {version, Integer.toString(peer.getID()),fileID, Integer.toString(chunkNo)}; |
||
79 | |||
80 | Message msg = new Message(Utils.MessageType.STORED, args);
|
||
81 | |||
82 | Random random = new Random(); |
||
83 | peer.sendLateMsg(Socket.SocketType.MC, msg, random.nextInt(delayLimit + 1), TimeUnit.MILLISECONDS); |
||
84 | } |
||
85 | } |