Project

General

Profile

Revision 2

Fixed many bugs

View differences:

Server.java
50 50
    // State Restore
51 51
    public boolean restoring;
52 52
    public AtomicBoolean waitRestoreReply = new AtomicBoolean(false);
53
    public ConcurrentHashMap<String, Chunk> recoveredChunks = new ConcurrentHashMap<String, Chunk>(); // ChunkNo -> Chunk
53
    public ConcurrentHashMap<String, Chunk> recoveredChunks = new ConcurrentHashMap<String, Chunk>(); // ChunkNo ->
54
                                                                                                      // Chunk
54 55

  
55 56
    // Service Management Information
56 57
    public ConcurrentHashMap<String, Chunk> chunks = new ConcurrentHashMap<String, Chunk>(); // fileId-ChunkNo
......
85 86
    // Backup Protocol
86 87
    public void backup(String path, int replications) throws RemoteException {
87 88

  
88
        // TODO is file backed up already?
89

  
90 89
        // Start backup
91 90
        this.doingBackUp = true;
92 91

  
......
94 93
        int index = path.lastIndexOf("\\");
95 94
        String fileName = path.substring(index + 1);
96 95

  
97
        // Generate Hash
98
        // TODO dont use just file name for hashing(multiple file versions with same
99
        // name problem)
100
        String fileId = FileManager.hash(fileName);
96
        // Generate Hash from file name and date
97
        String fileId = FileManager.hash(fileName + Long.toString(new File(path).lastModified()));
101 98

  
99
        // Is file backed up already?
100
        if (this.files.get(fileId) != null) {
101
            System.out.println("File already backed up");
102
            return;
103
        }
104

  
102 105
        // Add to file list
103 106
        this.files.put(fileId, fileName);
104 107

  
......
161 164
        int index = path.lastIndexOf("\\");
162 165
        String fileName = path.substring(index + 1);
163 166

  
164
        // Generate Hash
165
        // TODO dont use just file name for hashing(multiple file versions with same
166
        // name problem)
167
        String fileId = FileManager.hash(fileName);
167
        // Generate Hash from file name and date
168
        String fileId = FileManager.hash(fileName + Long.toString(new File(path).lastModified()));
168 169

  
169 170
        // Find in list of backed up
170 171
        String name = this.files.get(fileId);
171 172

  
172 173
        // File not backed up yet, just return
173 174
        if (name == null) {
175
            System.out.println("File not backed up by this peer");
174 176
            return;
175 177
        }
176 178

  
......
200 202

  
201 203
                // Wait for response
202 204
                this.waitRestoreReply.set(true);
205
                long time = System.nanoTime();
203 206
                while (this.waitRestoreReply.get()) {
207
                    // Restore timeout
208
                    if (TimeUnit.NANOSECONDS.toMillis(time) - TimeUnit.NANOSECONDS.toMillis(System.nanoTime()) > 1000) {
209
                        System.out.println("Restore timeout, missing chunks");
210
                        return;
211
                    }
204 212
                }
205 213

  
206
            }      
214
            }
207 215

  
208
            //Get simple list from recovered chunks
216
            // Get simple list from recovered chunks
209 217
            List<Chunk> list = new ArrayList<Chunk>(this.recoveredChunks.values());
210 218

  
211 219
            // Sort chunks
......
248 256
        int index = path.lastIndexOf("\\");
249 257
        String fileName = path.substring(index + 1);
250 258

  
251
        // Generate Hash
252
        // TODO dont use just file name for hashing(multiple file versions with same
253
        // name problem)
254
        String fileId = FileManager.hash(fileName);
259
        // Generate Hash from file name and date
260
        String fileId = FileManager.hash(fileName + Long.toString(new File(path).lastModified()));
255 261

  
262
        // Remove from list of backed up
263
        String name = this.files.get(fileId);
264
        if (name != null) {
265
            this.files.remove(fileId);
266
        }
267

  
256 268
        try {
257 269

  
258 270
            // Prepare message
......
307 319

  
308 320
                // Remove from file system
309 321
                Path current = Paths.get("");
310
                String place = current.toAbsolutePath().toString() + "\\peer" + id + "\\backup\\" + entry.getValue().fileId + "\\chk" + entry.getValue().chunkN + ".chk";
322
                String place = current.toAbsolutePath().toString() + "\\peer" + id + "\\backup\\"
323
                        + entry.getValue().fileId + "\\chk" + entry.getValue().chunkN + ".chk";
311 324
                File toDelete = new File(place);
312 325
                toDelete.delete();
313 326

  
......
437 450

  
438 451
    public static void main(String args[]) {
439 452

  
440
        // TODO Arguments are not correct, need to receive all the specific socket
441
        // arguments too, version and server(RMI)
453
        try {
442 454

  
443
        // Check arguments
444
        if (args.length < 1) {
445
            System.err.println("Invalid number of arguments");
446
            return;
447
        }
455
            // Server object
456
            Server obj;
448 457

  
449
        try {
458
            // Basic (version id)
459
            if (args.length == 2) {
460
                obj = new Server(args[1]);
461
            }
462
            // Full (version id access port mc port mdb port mdr)
463
            else if (args.length == 9) {
464
                obj = new Server(args[1], Integer.parseInt(args[3]), args[4], Integer.parseInt(args[5]), args[6],
465
                        Integer.parseInt(args[7]), args[8]);
466
            }
467
            // Invalid arguments
468
            else {
469
                System.out.println("java Server <version> <server id>");
470
                System.out.println(
471
                        "java Server <version> <server id> <access_point> <MC_port> <MC_IP_address> <MDB_port> <MDB_IP_address> <MDR_port> <MDR_IP_address>");
472
                return;
473
            }
450 474

  
451
            // Create Server
452
            Server obj = new Server(args[0]);
453

  
454 475
            // Bind the server as a registry
455 476
            PeerInterface stub = (PeerInterface) UnicastRemoteObject.exportObject(obj, 0);
456 477

  
457 478
            // Bind the remote object's stub in the registry
458

  
459
            // TODO Get registry what port?
460 479
            Registry registry = LocateRegistry.getRegistry();
461
            registry.bind(args[0], stub);
480
            registry.bind(obj.id, stub);
462 481

  
463 482
            System.err.println("Server ready");
464 483

  

Also available in: Unified diff