Пример #1
0
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
Пример #2
0
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)