def cache_ost_grains_item(ost, args=['default_addr'], timeout=60): from salt.client import LocalClient client = LocalClient() ret = {} try: ost = int(ost) except: return False if not isinstance(args, list): return False jid = client.cmd_async('G@osts:%d'% ost, 'grains.item', args, expr_form='compound') ret = wait_return_salt_cmd(jid, timeout=timeout) return ret
def delete_schedule(): """ Delete physical file """ from salt.client import LocalClient client = LocalClient() def get_result(deletings): while True: for ost in deletings.keys(): result = client.get_cache_returns(deletings[ost][0]) if len(result) == 0 or len(result[result.keys()[0]]['ret']) == 0: wait = int(time.time() - deletings[ost][2]) if wait > 900 : del deletings[ost] else: continue else: ret = result[result.keys()[0]]['ret'] if type(ret) == str: with mongo.app.test_request_context(): current_app.logger.fatal(ret) print ost, ret else: for f in deletings[ost][1]: with mongo.app.test_request_context(): mongo.FileRemoveSchedule.collection.remove({'_id': f._id}) del deletings[ost] time.sleep(0.3) if not write_pid('delete_schedule'): return system_files = {} # Cac system file can xoa trong DB deletings = {} # Cac file vat ly can xoa del_file = {} th = Thread(target = get_result, args = (deletings,)) th.daemon = True th.start() while True: remove_schedule_files = mongo.FileRemoveSchedule.find({'schedule_time': {'$lte': datetime.datetime.utcnow()}}).limit(5000) if remove_schedule_files.count() == 0: break for f in remove_schedule_files: if f.ost in system_files: system_files[f.ost].append(f) else: system_files[f.ost] = [f] while len(system_files) > 0: for ost in system_files: if ost in deletings: continue paths = [] del_file[ost] = system_files[ost][:5] for f in del_file[ost]: paths.append(f.file_path) jid = client.cmd_async('osts:%s' % ost, 'storage.delete_files', [ost] + paths, expr_form='grain') if jid: deletings[ost] = [jid, del_file[ost], time.time()] else: current_app.logger.error("Can't run delete_files for ost %s", ost) system_files[ost] = system_files[ost][5:] for ost in system_files.keys(): if len(system_files[ost]) == 0: del system_files[ost] time.sleep(30)