root / src / peer / protocols / backup / BackupChunk.java @ 2
History | View | Annotate | Download (1.28 KB)
1 | 2 | up20150644 | package peer.protocols.backup; |
---|---|---|---|
2 | |||
3 | import java.io.IOException; |
||
4 | |||
5 | import chunk.Chunk; |
||
6 | import disk.ChunkManagement; |
||
7 | import message.Message; |
||
8 | import peer.Peer; |
||
9 | |||
10 | /**
|
||
11 | * BackupChunk
|
||
12 | */
|
||
13 | public class BackupChunk implements Runnable { |
||
14 | |||
15 | public static final int backupTries = 10; |
||
16 | |||
17 | private Chunk chunk;
|
||
18 | private Peer peer;
|
||
19 | |||
20 | public BackupChunk(Peer peer, Chunk chunk) {
|
||
21 | this.chunk = chunk;
|
||
22 | this.peer = peer;
|
||
23 | } |
||
24 | |||
25 | public void sendPutChunk() { |
||
26 | Message message = Message.parsePutChunkMessage(chunk, peer); |
||
27 | try {
|
||
28 | peer.sendToMdb(message); |
||
29 | } catch (IOException e) { |
||
30 | e.printStackTrace(); |
||
31 | } |
||
32 | } |
||
33 | |||
34 | public boolean backupChunk() { |
||
35 | sendPutChunk(); |
||
36 | try {
|
||
37 | Thread.sleep(400); |
||
38 | } catch (InterruptedException e) { |
||
39 | e.printStackTrace(); |
||
40 | } |
||
41 | if (ChunkManagement.getInstance().getStores(chunk.getFileID(), chunk.getChunkNo()) >= chunk.getRepDegree()) {
|
||
42 | return true; |
||
43 | } |
||
44 | return false; |
||
45 | } |
||
46 | |||
47 | @Override
|
||
48 | public void run() { |
||
49 | try {
|
||
50 | Thread.sleep(400 * chunk.getChunkNo()); |
||
51 | } catch (InterruptedException e) { |
||
52 | // TODO Auto-generated catch block
|
||
53 | e.printStackTrace(); |
||
54 | } |
||
55 | boolean done = false; |
||
56 | int tries = 0; |
||
57 | while(!done) {
|
||
58 | done = backupChunk(); |
||
59 | if (!done) {
|
||
60 | tries++; |
||
61 | if (tries > backupTries) {
|
||
62 | break;
|
||
63 | } |
||
64 | } |
||
65 | } |
||
66 | } |
||
67 | } |