def get_tickets(self): results = get_ticket_for_file(self.rpath, self._name, self.password, session=self.session) if results == None: raise IOError("%s does not exist" % (self.path)) tickets, session, servers_id = results # Load Balancing! server_choice = random.randint(0, len(servers_id) - 1) server_id = servers_id[server_choice] ticket = tickets[server_choice] return (server_id, ticket, session)
def file_write(file_to_lookup, diff_file_name, name, password, session=None): results = get_ticket_for_file(file_to_lookup, name, password) if(results == None): return None tickets, session, servers_id = results server_choice = random.randint(0, len(servers_id)-1) server_id = servers_id[server_choice] ticket = tickets[server_choice] contents = open(diff_file_name, "rb").read() data = { "ticket": ticket, "request": { "type":"write", "message": os.path.join(server_id[2], file_to_lookup), "relative": file_to_lookup, "payload":base64.b64encode(contents) } } data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), session) print lookup_fs(data, "", server_id, session) return session
def file_open(file_to_lookup, name, password,local_file=None, session=None): results = get_ticket_for_file(file_to_lookup, name, password) if(results == None): return None tickets, session, servers_id = results server_choice = random.randint(0, len(servers_id)-1) server_id = servers_id[server_choice] ticket = tickets[server_choice] data = { "ticket": ticket, "request": { "type": "open", "message": os.path.join(server_id[2], file_to_lookup) } } data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), session) local_file = os.path.join("cached", file_to_lookup) try: os.makedirs(os.path.dirname(local_file)) except OSError: pass print lookup_fs(data, local_file, server_id, session) return session
def replicate_changes(self, relative, body): print "I Am Replicating The Update" # Replicate changes. First must get ds entry from name = "fs/{0}:{1}".format(HOST, PORT) print "Connection AS at {0}:{1}".format(ASHOST, ASPORT) results = get_ticket_for_file(relative, name, password, ls_needed=False) if results == None: return None tickets, session, servers_id = results print results servers_id = [[h, p, f] for h, p, f in servers_id if not (h == HOST and p == str(PORT))] for i in range(0, len(servers_id)): # Note relative left out to let the file server know that # This is being replicated by a file server and doesnt need # further replication. ticket = tickets[i] server_id = servers_id[i] data = { "ticket": ticket, "request": {"type": "write", "message": os.path.join(server_id[2], relative), "payload": body}, } data["request"] = secure.encrypt_with_key(json.dumps(data["request"]), session) print lookup_fs(data, "", server_id, session)