def send_chunks(self, path,replication_degree): f = File(path) data = Data(self.db_path) if (not data.get_file_id(path)): data.add_file(path) chunks_number = f.generate_chunks(self.temp_dir) file_id=f.generate_file_id() date = f.get_modification_date() data.add_modification(path, file_id, chunks_number, date) chunks=f.fetch_chunks(self.temp_dir) acks_chunks=0 for j in range(len(chunks)): chunk_file = open(self.temp_dir +chunks[j], "rb") body=chunk_file.read() chunk_file.close() replication_degree=str(replication_degree) chunk_no=str(j) message="PUTCHUNK " + VERSION + " " + file_id + " " + chunk_no + " " + replication_degree + CRLF + CRLF + body acks=False attempts=0 timeout=TIMEOUT while(not acks and attempts<MAX_ATTEMPTS): self.mdb.sendto(message, (self.mdb_address, self.mdb_port)) data.add_chunk(file_id, chunk_no, replication_degree) if(self.check_replication_degree(file_id,chunk_no,replication_degree,timeout)): acks=True timeout*=2 attempts+=1 if(acks): acks_chunks+=1 self.remove_chunks_from_directory(f.get_name(),self.temp_dir) return (acks_chunks>=chunks_number)
def create_chunk_data(self,message): data = Data(self.db_path) file_id=message.split(" ")[2] chunk_number=message.split(" ")[3] minimum_replication_degree=message.split(" ")[4].split(CRLF+CRLF)[0] data.add_only_modification(file_id) data.add_chunk(file_id, chunk_number, minimum_replication_degree) data.increment_replication_degree(file_id, chunk_number,"localhost")