Beispiel #1
0
    def run(self):
        self.logger = log.get_logger('CancelJob')

        self.tasks = Tasks()

        rows_affected = 0
        if self.options.multiple:
            rows_affected = self.tasks.bulk_finish(extra_predicate=("job_id LIKE :job_id", { 'job_id': self.options.job_id + '%%' }))
        else:
            loader_storage = LoaderStorage()
            with loader_storage.transaction() as cursor:
                jobs = apsw_helpers.query(cursor, '''
                    SELECT id FROM jobs WHERE id LIKE :job_id
                ''', job_id=self.options.job_id + '%')

            if len(jobs) > 1:
                print len(jobs), 'jobs match this job ID:'
                print '\n'.join([ row.id for row in jobs ])
                print 'Please use a more specific prefix or specify the `--multiple` flag if you'
                print 'would like to cancel more than one job.'
                sys.exit(1)
            elif len(jobs) == 0:
                print '0 jobs match this job ID.'
                sys.exit(1)
            else:
                rows_affected = self.tasks.bulk_finish(extra_predicate=("job_id = :job_id", { 'job_id': jobs[0].id }))

        job_suffix = '(s)' if self.options.multiple else ''
        task_suffix = 's' if not rows_affected == 1 else ''
        print CANCEL_JOB_MESSAGE % (job_suffix, self.options.job_id, rows_affected, task_suffix)
 def run(self):
     prompt = 'Are you sure you want to delete the MemSQL Loader database?\nThe database contains queued, running, and finished jobs.'
     if not cli_utils.confirm(prompt, default=False):
         print 'Exiting.'
         sys.exit(1)
     LoaderStorage.drop_database()
     print 'MemSQL Loader database deleted.'
Beispiel #3
0
    def run(self):
        if not self.options.force:
            if servers.is_server_running():
                print 'Please stop any currently-running servers with stop-server before deleting the MemSQL Loader database.'
                sys.exit(1)

        prompt = 'Are you sure you want to delete the MemSQL Loader database?\nThe database contains queued, running, and finished jobs.'
        if not cli_utils.confirm(prompt, default=False):
            print 'Exiting.'
            sys.exit(1)
        LoaderStorage.drop_database()
        print 'MemSQL Loader database deleted.'
Beispiel #4
0
class Api(object):
    name = None

    def __init__(self):
        self.logger = log.get_logger(self.name or 'api')
        self.storage = LoaderStorage()

    def query(self, params):
        assert 'validate' in dir(self), '`validate` must be defined'
        return self._execute(self.validate(params))

    def _execute(self, params):
        raise NotImplemented()

    def __db_caller(self, callback):
        with self.storage.transaction() as cursor:
            return callback(cursor)

    def _db_query(self, *args, **kwargs):
        return self.__db_caller(lambda c: apsw_helpers.query(c, *args, **kwargs))

    def _db_custom_query(self, callback):
        return self.__db_caller(callback)

    def _db_get(self, *args, **kwargs):
        return self.__db_caller(lambda c: apsw_helpers.get(c, *args, **kwargs))
Beispiel #5
0
class Api(object):
    name = None

    def __init__(self):
        self.logger = log.get_logger(self.name or 'api')
        self.storage = LoaderStorage()

    def query(self, params):
        assert 'validate' in dir(self), '`validate` must be defined'
        return self._execute(self.validate(params))

    def _execute(self, params):
        raise NotImplemented()

    def __db_caller(self, callback):
        with self.storage.transaction() as cursor:
            return callback(cursor)

    def _db_query(self, *args, **kwargs):
        return self.__db_caller(
            lambda c: apsw_helpers.query(c, *args, **kwargs))

    def _db_custom_query(self, callback):
        return self.__db_caller(callback)

    def _db_get(self, *args, **kwargs):
        return self.__db_caller(lambda c: apsw_helpers.get(c, *args, **kwargs))
Beispiel #6
0
 def poll(self):
     running = [worker for worker in self._workers if worker.is_alive()]
     diff = self.num_workers - len(running)
     if diff > 0:
         self.logger.debug('Starting %d workers, for a total of %d', diff, self.num_workers)
         with LoaderStorage.fork_wrapper():
             running += [self._start_worker(i) for i in xrange(diff)]
     self._workers = running
Beispiel #7
0
 def poll(self):
     running = [worker for worker in self._workers if worker.is_alive()]
     diff = self.num_workers - len(running)
     if diff > 0:
         self.logger.debug('Starting %d workers, for a total of %d', diff,
                           self.num_workers)
         with LoaderStorage.fork_wrapper():
             running += [self._start_worker(i) for i in xrange(diff)]
     self._workers = running
Beispiel #8
0
    def run(self):
        self.logger = log.get_logger('CancelJob')

        self.tasks = Tasks()

        rows_affected = 0
        if self.options.multiple:
            rows_affected = self.tasks.bulk_finish(
                extra_predicate=("job_id LIKE :job_id", {
                    'job_id': self.options.job_id + '%%'
                }))
        else:
            loader_storage = LoaderStorage()
            with loader_storage.transaction() as cursor:
                jobs = apsw_helpers.query(cursor,
                                          '''
                    SELECT id FROM jobs WHERE id LIKE :job_id
                ''',
                                          job_id=self.options.job_id + '%')

            if len(jobs) > 1:
                print len(jobs), 'jobs match this job ID:'
                print '\n'.join([row.id for row in jobs])
                print 'Please use a more specific prefix or specify the `--multiple` flag if you'
                print 'would like to cancel more than one job.'
                sys.exit(1)
            elif len(jobs) == 0:
                print '0 jobs match this job ID.'
                sys.exit(1)
            else:
                rows_affected = self.tasks.bulk_finish(
                    extra_predicate=("job_id = :job_id", {
                        'job_id': jobs[0].id
                    }))

        job_suffix = '(s)' if self.options.multiple else ''
        task_suffix = 's' if not rows_affected == 1 else ''
        print CANCEL_JOB_MESSAGE % (job_suffix, self.options.job_id,
                                    rows_affected, task_suffix)
Beispiel #9
0
    def poll(self):
        running = [worker for worker in self._workers if worker.is_alive()]

        if self.idle_timeout is not None:
            if any([worker.is_working() for worker in self._workers]):
                self._last_work_time = time.time()
            elif time.time() > (self._last_work_time + self.idle_timeout):
                return False

        diff = self.num_workers - len(running)
        if diff > 0:
            self.logger.debug('Starting %d workers, for a total of %d', diff, self.num_workers)
            with LoaderStorage.fork_wrapper():
                running += [self._start_worker(i) for i in xrange(diff)]
        self._workers = running

        return True
Beispiel #10
0
 def start_server(self):
     if self.options.no_daemon:
         self.logger.warn(
             "There don't seem to be any running MemSQL Loader servers. "
             "Please start one.")
         if self.options.sync:
             self.logger.error(
                 "You have specified --sync, but there are no running "
                 "MemSQL Loader servers.")
             sys.exit(1)
     else:
         self.logger.info("Starting a MemSQL Loader server")
         if not self.options.sync:
             self.logger.info(
                 "This load job will run in the background.  You can "
                 "monitor its progress with memsql-loader job %s" % (self.job.id))
         with LoaderStorage.fork_wrapper():
             ServerProcess(daemonize=True).start()
    def poll(self):
        running = [worker for worker in self._workers if worker.is_alive()]

        if self.idle_timeout is not None:
            if any([worker.is_working() for worker in self._workers]):
                self._last_work_time = time.time()
            elif time.time() > (self._last_work_time + self.idle_timeout):
                return False

        diff = self.num_workers - len(running)
        if diff > 0:
            self.logger.debug('Starting %d workers, for a total of %d', diff,
                              self.num_workers)
            with LoaderStorage.fork_wrapper():
                running += [self._start_worker(i) for i in xrange(diff)]
        self._workers = running

        return True
Beispiel #12
0
 def start_server(self):
     if self.options.no_daemon:
         self.logger.warn(
             "There don't seem to be any running MemSQL Loader servers. "
             "Please start one.")
         if self.options.sync:
             self.logger.error(
                 "You have specified --sync, but there are no running "
                 "MemSQL Loader servers.")
             sys.exit(1)
     else:
         self.logger.info("Starting a MemSQL Loader server")
         if not self.options.sync:
             self.logger.info(
                 "This load job will run in the background.  You can "
                 "monitor its progress with memsql-loader job %s" %
                 (self.job.id))
         with LoaderStorage.fork_wrapper():
             ServerProcess(daemonize=True).start()
Beispiel #13
0
 def __init__(self):
     self.logger = log.get_logger(self.name or 'api')
     self.storage = LoaderStorage()
Beispiel #14
0
    def __init__(self):
        super(Servers, self).__init__(LoaderStorage())

        self._define_table(PRIMARY_TABLE)
Beispiel #15
0
 def __init__(self):
     self.logger = log.get_logger(self.name or 'api')
     self.storage = LoaderStorage()