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.'
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.'
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))
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))
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
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 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
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 __init__(self): self.logger = log.get_logger(self.name or 'api') self.storage = LoaderStorage()
def __init__(self): super(Servers, self).__init__(LoaderStorage()) self._define_table(PRIMARY_TABLE)