Project

General

Profile

Statistics
| Revision:

root / project / src / main / java / protocols / BackupChunk.java @ 1

History | View | Annotate | Download (2.28 KB)

1
package main.java.protocols;
2

    
3

    
4
import main.java.file.FileChunk;
5
import main.java.file.FileChunkID;
6
import main.java.file.FileID;
7
import main.java.listeners.Broker;
8
import main.java.peer.Peer;
9

    
10
import java.io.IOException;
11

    
12
public class BackupChunk implements Runnable {
13

    
14
    public FileChunk chunk;
15
    public boolean repDegReached;
16

    
17
    public BackupChunk(FileChunk chunk) {
18
        this.chunk = chunk;
19
        repDegReached = false;
20
    }
21

    
22
    @Override
23
    public void run() {
24
        int attempt = 0;
25

    
26
        long timeToRetry = 500;
27
        FileID fID = new FileID(chunk.getFileID().toString(),chunk.getReplicationDegree());
28

    
29

    
30
        FileChunkID fileChunkID = new FileChunkID(fID.toString(), chunk.getChunkNo());
31

    
32

    
33

    
34
        while(!repDegReached) {
35

    
36
            Peer.getDb().addNewRepDegCounter(new FileChunkID(fID.toString(), chunk.getChunkNo()), chunk.getReplicationDegree());
37

    
38
            timeToRetry = timeToRetry *2;
39

    
40
            if(Peer.getMCListener().isCounting(fileChunkID))
41
                Peer.getMCListener().clearCount(fileChunkID);
42

    
43
            try {
44
                Broker.sendPUTCHUNK(chunk);
45
                Peer.getMCListener().startCountingStoreds(fileChunkID);
46
                System.out.println("Listening for STOREDs for " + timeToRetry + "ms");
47
                Thread.sleep(timeToRetry);
48
            } catch (InterruptedException e) {
49
                e.printStackTrace();
50
            }
51

    
52

    
53
            int perceivedRepDeg = Peer.getMCListener().getCount(fileChunkID);
54

    
55
            System.out.println("Replication degree count: " + perceivedRepDeg + "/" + chunk.getReplicationDegree());
56

    
57

    
58
            if(perceivedRepDeg < chunk.getReplicationDegree()) {
59
                attempt++;
60

    
61
                if(attempt > 4) {
62
                    System.out.println("The Desired Replication Degree wasn't reached in 5 tries, skipping chunk...");
63
                    repDegReached = true;
64
                    return;
65

    
66

    
67
                }
68
                else {
69
                    System.out.println("The Desired Replication Degree was not reached, trying again...");
70

    
71
                }
72

    
73
            } else {
74
                System.out.println("Desired Replication Degree accomplished!");
75
                repDegReached = true;
76
            }
77

    
78
        }
79

    
80

    
81

    
82

    
83

    
84
        Peer.getMCListener().stopCounting(fileChunkID);
85
    }
86
}