class QueuedJobService (View source)

A service that can be used for starting, stopping and listing queued jobs.

When a job is first added, it is initialised, its job type determined, then persisted to the database

When the queues are scanned, a job is reloaded and processed. Ignoring the persistence and reloading, it looks something like

job->getJobType(); job->getJobData(); data->write(); job->setup(); while !job->isComplete job->process(); job->getJobData(); data->write();

Traits

Provides extensions to this object to integrate it with standard config API methods.

A class that can be instantiated or replaced via DI

Allows an object to have extensions applied to it.

Allows an object to declare a set of custom methods

Config options

extensions array

An array of extension names and parameters to be applied to this object upon construction.

from  Extensible
unextendable_classes array

Classes that cannot be extended

from  Extensible
stall_threshold int
memory_limit int

How much ram will we allow before pausing and releasing the memory?

time_limit int

Optional time limit (in seconds) to run the service before restarting to release resources.

disable_health_check bool

Disable health checks that usually occur when a runner first picks up a queue. Note that completely disabling health checks could result in many jobs that are always marked as running - that will never be restarted. If this option is disabled you may alternatively use the build task

max_init_jobs int

Maximum number of jobs that can be initialised at any one time.

worker_ttl string

Duration for TTL of queue workers based on ISO 8601 duration specification.

initialising_state_ttl string

Duration for TTL of initialising state based on ISO 8601 duration specification.

use_shutdown_function bool

Should "immediate" jobs be managed using the shutdown function?

cache_dir string

The location for immediate jobs to be stored in

lock_file_enabled bool

Maintenance lock file feature enabled / disable setting

lock_file_name string

Maintenance lock file name

lock_file_path string

Maintenance lock path (relative path starting at the base folder) Note that this path needs to point to a folder on a shared drive if multiple instances are used

Properties

protected static array $extra_methods

Custom method sources

from  CustomMethods
protected array $extra_method_registers

Name of methods to invoke by defineMethods for this instance

from  CustomMethods
protected static array $built_in_methods

Non-custom public methods.

from  CustomMethods
protected Extension[] $extension_instances from  Extensible
protected callable[][] $beforeExtendCallbacks

List of callbacks to call prior to extensions having extend called on them, each grouped by methodName.

from  Extensible
protected callable[][] $afterExtendCallbacks

List of callbacks to call after extensions having extend called on them, each grouped by methodName.

from  Extensible
protected int $startedAt

Timestamp (in seconds) when the queue was started

public DefaultQueueHandler $queueHandler
public TaskRunnerEngine $queueRunner
public array $defaultJobs

Config controlled list of default/required jobs

Methods

public static 
config()

Get a configuration accessor for this class. Short hand for Config::inst()->get($this->class, .....).

public
mixed
uninherited(string $name)

Gets the uninherited value for the given config option

public static 
create(mixed ...$args)

An implementation of the factory method, allows you to create an instance of a class

public static 
singleton(string $class = null)

Creates a class instance by the "singleton" design pattern.

public
mixed
__call(string $method, array $arguments)

Attempts to locate and call a method dynamically added to a class at runtime if a default cannot be located

protected
defineMethods()

Adds any methods from Extension instances attached to this object.

protected
registerExtraMethodCallback(string $name, callable $callback)

Register an callback to invoke that defines extra methods

public
bool
hasMethod(string $method)

Return TRUE if a method exists on this object

protected
bool
hasCustomMethod($method)

Determines if a custom method with this name is defined.

protected
array
getExtraMethodConfig(string $method)

Get meta-data details on a named method

public
array
allMethodNames(bool $custom = false)

Return the names of all the methods available on this object

protected static 
array
findBuiltInMethods(string|object $class = null)

Get all public built in methods for this class

protected
array
findMethodsFrom(object $object)

Find all methods on the given object.

protected
addMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property.

protected
removeMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property (which is an Extension) to this object.

protected
addWrapperMethod(string $method, string $wrap)

Add a wrapper method - a method which points to another method with a different name. For example, Thumbnail(x) can be wrapped to generateThumbnail(x)

protected
addCallbackMethod(string $method, callable $callback)

Add callback as a method.

protected
beforeExtending(string $method, callable $callback)

Allows user code to hook into Object::extend prior to control being delegated to extensions. Each callback will be reset once called.

protected
afterExtending(string $method, callable $callback)

Allows user code to hook into Object::extend after control being delegated to extensions. Each callback will be reset once called.

protected
defineExtensionMethods()

Adds any methods from Extension instances attached to this object.

public static 
bool
add_extension(string $classOrExtension, string $extension = null)

Add an extension to a specific class.

public static 
remove_extension(string $extension)

Remove an extension from a class.

public static 
array
get_extensions(string $class = null, bool $includeArgumentString = false)

No description

public static 
array|null
get_extra_config_sources(string $class = null)

Get extra config sources for this class

public static 
bool
has_extension(string $classOrExtension, string $requiredExtension = null, bool $strict = false)

Return TRUE if a class has a specified extension.

public
array
invokeWithExtensions(string $method, mixed ...$arguments)

Calls a method if available on both this object and all applied Extensions, and then attempts to merge all results into an array

public
array
extend(string $method, mixed ...$arguments)

Run the given function on all of this object's extensions. Note that this method originally returned void, so if you wanted to return results, you're hosed

public
Extension|null
getExtensionInstance(string $extension)

Get an extension instance attached to this object by name.

public
bool
hasExtension(string $extension)

Returns TRUE if this object instance has a specific extension applied in $extension_instances. Extension instances are initialized at constructor time, meaning if you use add_extension() afterwards, the added extension will just be added to new instances of the extended class. Use the static method has_extension() to check if a class (not an instance) has a specific extension.

public
getExtensionInstances()

Get all extension instances for this specific object instance.

public
__construct()

QueuedJobService constructor.

public
int
queueJob(QueuedJob $job, null|string $startAfter = null, null|int $userId = null, null|int $queueName = null)

Adds a job to the queue to be started

public
startJob(QueuedJobDescriptor $jobDescriptor, string $startAfter = null)

Start a job (or however the queue handler determines it should be started)

public
bool
isAtMaxJobs()

Check if maximum number of jobs are currently initialised.

protected
copyJobToDescriptor(QueuedJob $job, QueuedJobDescriptor $jobDescriptor)

Copies data from a job into a descriptor for persisting

protected
copyDescriptorToJob(QueuedJobDescriptor $jobDescriptor, QueuedJob $job)

No description

public
getNextPendingJob(string $type = null)

Check the current job queues and see if any of the jobs currently in there should be started. If so, return the next job that should be executed

public
array
checkJobHealth(int $queue = null)

Runs an explicit check on all currently running jobs to make sure their "processed" count is incrementing between each run. If it's not, then we need to flag it as paused due to an error.

public
checkDefaultJobs($queue = null)

Checks through ll the scheduled jobs that are expected to exist

protected
restartStalledJob(QueuedJobDescriptor $stalledJob)

Attempt to restart a stalled job

protected
QueuedJob|bool
initialiseJob(QueuedJobDescriptor $jobDescriptor)

Prepares the given jobDescriptor for execution. Returns the job that will actually be run in a state ready for executing.

protected
bool
grabMutex(QueuedJobDescriptor $jobDescriptor)

Given a QueuedJobDescriptor mark the job as initialised. Works sort of like a mutex.

public
bool
runJob(int $jobId)

Start the actual execution of a job.

protected
finaliseLogging(LoggerInterface $logger)

No description

protected
mixed
withNestedState(callable $callback)

Provides a wrapper when executing arbitrary code contained in job implementation this ensures that job specific code doesn't alter the configuration of the queue runner execution

protected
protected
handleBrokenJobException(QueuedJobDescriptor $jobDescriptor, QueuedJob $job, Exception|Throwable $e)

No description

protected
null|Member
setRunAsUser(Member $runAsUser, Member $originalUser = null)

No description

protected
unsetRunAsUser(Member $runAsUser = null, Member $originalUser = null)

No description

protected
markStarted()

Start timer

protected
bool
hasPassedTimeLimit()

Is execution time too long?

protected
bool
isMemoryTooHigh()

Is memory usage too high?

protected
float
getMemoryUsage()

Get peak memory usage of this application

protected
float
getMemoryLimit()

Determines the memory limit (in bytes) for this application Limits to the smaller of memory_limit configured via php.ini or silverstripe config

protected
float
getPHPMemoryLimit()

Calculate the current memory limit of the server

protected
float
parseMemory(string $memString)

Convert memory limit string to bytes.

protected
humanReadable($size)

No description

public
QueuedJobDescriptor>
getJobList(string $type = null, int $includeUpUntil = 0)

Gets a list of all the current jobs (or jobs that have recently finished)

public
string
getJobListFilter(string $type = null, int $includeUpUntil = 0)

Return the SQL filter used to get the job list - this is used by the UI for displaying the job list.

public
runQueue(string $queue)

Process the job queue with the current queue runner

public
processJobQueue(string $name)

Process all jobs from a given queue

public
onShutdown()

When PHP shuts down, we want to process all of the immediate queue items

public
LoggerInterface
getLogger()

Get a logger

public
setLogger(LoggerInterface $logger)

No description

public
enableMaintenanceLock()

No description

public
disableMaintenanceLock()

No description

public
bool
isMaintenanceLockActive()

No description

protected
string
getWorkerExpiry()

Get expiry time for a worker to be operating on a job, helps to identify jobs that have stalled more accurately.

protected
string
getInitStateExpiry()

Get expiry time for a INIT state of a queued job this helps to identify jobs that have stalled more accurately

protected
void
releaseJobLock(QueuedJobDescriptor $descriptor)

Release job lock on the descriptor so it can run again

protected
void
markJobAsBroken(QueuedJobDescriptor $descriptor)

Mark a Job as Broken and release the lock so it can be resumed

Details

static Config_ForClass config()

Get a configuration accessor for this class. Short hand for Config::inst()->get($this->class, .....).

Return Value

Config_ForClass

mixed uninherited(string $name)

Gets the uninherited value for the given config option

Parameters

string $name

Return Value

mixed

static Injectable create(mixed ...$args)

An implementation of the factory method, allows you to create an instance of a class

This method will defer class substitution to the Injector API, which can be customised via the Config API to declare substitution classes.

This can be called in one of two ways - either calling via the class directly, or calling on Object and passing the class name as the first parameter. The following are equivalent: $list = DataList::create(SiteTree::class); $list = SiteTree::get();

Parameters

mixed ...$args

Return Value

Injectable

static Injectable singleton(string $class = null)

Creates a class instance by the "singleton" design pattern.

It will always return the same instance for this class, which can be used for performance reasons and as a simple way to access instance methods which don't rely on instance data (e.g. the custom SilverStripe static handling).

Parameters

string $class

Optional classname to create, if the called class should not be used

Return Value

Injectable

The singleton instance

mixed __call(string $method, array $arguments)

Attempts to locate and call a method dynamically added to a class at runtime if a default cannot be located

You can add extra methods to a class using Extensions}, {@link Object::createMethod() or Object::addWrapperMethod()

Parameters

string $method
array $arguments

Return Value

mixed

Exceptions

BadMethodCallException

protected defineMethods()

Adds any methods from Extension instances attached to this object.

All these methods can then be called directly on the instance (transparently mapped through __call()}), or called explicitly through {@link extend().

protected registerExtraMethodCallback(string $name, callable $callback)

Register an callback to invoke that defines extra methods

Parameters

string $name
callable $callback

bool hasMethod(string $method)

Return TRUE if a method exists on this object

This should be used rather than PHP's inbuild method_exists() as it takes into account methods added via extensions

Parameters

string $method

Return Value

bool

protected bool hasCustomMethod($method)

Determines if a custom method with this name is defined.

Parameters

$method

Return Value

bool

protected array getExtraMethodConfig(string $method)

Get meta-data details on a named method

Parameters

string $method

Return Value

array

List of custom method details, if defined for this method

array allMethodNames(bool $custom = false)

Return the names of all the methods available on this object

Parameters

bool $custom

include methods added dynamically at runtime

Return Value

array

Map of method names with lowercase keys

static protected array findBuiltInMethods(string|object $class = null)

Get all public built in methods for this class

Parameters

string|object $class

Class or instance to query methods from (defaults to static::class)

Return Value

array

Map of methods with lowercase key name

protected array findMethodsFrom(object $object)

Find all methods on the given object.

Parameters

object $object

Return Value

array

protected addMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property.

Parameters

string $property

the property name

string|int $index

an index to use if the property is an array

Exceptions

InvalidArgumentException

protected removeMethodsFrom(string $property, string|int $index = null)

Add all the methods from an object property (which is an Extension) to this object.

Parameters

string $property

the property name

string|int $index

an index to use if the property is an array

protected addWrapperMethod(string $method, string $wrap)

Add a wrapper method - a method which points to another method with a different name. For example, Thumbnail(x) can be wrapped to generateThumbnail(x)

Parameters

string $method

the method name to wrap

string $wrap

the method name to wrap to

protected addCallbackMethod(string $method, callable $callback)

Add callback as a method.

Parameters

string $method

Name of method

callable $callback

Callback to invoke. Note: $this is passed as first parameter to this callback and then $args as array

protected beforeExtending(string $method, callable $callback)

Allows user code to hook into Object::extend prior to control being delegated to extensions. Each callback will be reset once called.

Parameters

string $method

The name of the method to hook into

callable $callback

The callback to execute

protected afterExtending(string $method, callable $callback)

Allows user code to hook into Object::extend after control being delegated to extensions. Each callback will be reset once called.

Parameters

string $method

The name of the method to hook into

callable $callback

The callback to execute

protected defineExtensionMethods()

Adds any methods from Extension instances attached to this object.

All these methods can then be called directly on the instance (transparently mapped through __call()}), or called explicitly through {@link extend().

static bool add_extension(string $classOrExtension, string $extension = null)

Add an extension to a specific class.

The preferred method for adding extensions is through YAML config, since it avoids autoloading the class, and is easier to override in more specific configurations.

As an alternative, extensions can be added to a specific class directly in the Object::$extensions array. See SiteTree::$extensions for examples. Keep in mind that the extension will only be applied to new instances, not existing ones (including all instances created through singleton()).

Parameters

string $classOrExtension

Class that should be extended - has to be a subclass of Object

string $extension

Subclass of Extension with optional parameters as a string, e.g. "Versioned"

Return Value

bool

Flag if the extension was added

See also

http://doc.silverstripe.org/framework/en/trunk/reference/dataextension

static remove_extension(string $extension)

Remove an extension from a class.

Note: This will not remove extensions from parent classes, and must be called directly on the class assigned the extension.

Keep in mind that this won't revert any datamodel additions of the extension at runtime, unless its used before the schema building kicks in (in your _config.php). Doesn't remove the extension from any Object instances which are already created, but will have an effect on new extensions. Clears any previously created singletons through singleton() to avoid side-effects from stale extension information.

Parameters

string $extension

class name of an Extension subclass, without parameters

static array get_extensions(string $class = null, bool $includeArgumentString = false)

No description

Parameters

string $class

If omitted, will get extensions for the current class

bool $includeArgumentString

Include the argument string in the return array, FALSE would return array("Versioned"), TRUE returns array("Versioned('Stage','Live')").

Return Value

array

Numeric array of either DataExtension class names, or eval'ed class name strings with constructor arguments.

static array|null get_extra_config_sources(string $class = null)

Get extra config sources for this class

Parameters

string $class

Name of class. If left null will return for the current class

Return Value

array|null

static bool has_extension(string $classOrExtension, string $requiredExtension = null, bool $strict = false)

Return TRUE if a class has a specified extension.

This supports backwards-compatible format (static Object::has_extension($requiredExtension)) and new format ($object->has_extension($class, $requiredExtension))

Parameters

string $classOrExtension

Class to check extension for, or the extension name to check if the second argument is null.

string $requiredExtension

If the first argument is the parent class, this is the extension to check. If left null, the first parameter will be treated as the extension.

bool $strict

if the extension has to match the required extension and not be a subclass

Return Value

bool

Flag if the extension exists

array invokeWithExtensions(string $method, mixed ...$arguments)

Calls a method if available on both this object and all applied Extensions, and then attempts to merge all results into an array

Parameters

string $method

the method name to call

mixed ...$arguments

List of arguments

Return Value

array

List of results with nulls filtered out

array extend(string $method, mixed ...$arguments)

Run the given function on all of this object's extensions. Note that this method originally returned void, so if you wanted to return results, you're hosed

Currently returns an array, with an index resulting every time the function is called. Only adds returns if they're not NULL, to avoid bogus results from methods just defined on the parent extension. This is important for permission-checks through extend, as they use min() to determine if any of the returns is FALSE. As min() doesn't do type checking, an included NULL return would fail the permission checks.

The extension methods are defined during __construct()} in {@link defineMethods().

Parameters

string $method

the name of the method to call on each extension

mixed ...$arguments

Return Value

array

Extension|null getExtensionInstance(string $extension)

Get an extension instance attached to this object by name.

Parameters

string $extension

Return Value

Extension|null

bool hasExtension(string $extension)

Returns TRUE if this object instance has a specific extension applied in $extension_instances. Extension instances are initialized at constructor time, meaning if you use add_extension() afterwards, the added extension will just be added to new instances of the extended class. Use the static method has_extension() to check if a class (not an instance) has a specific extension.

Caution: Don't use singleton()->hasExtension() as it will give you inconsistent results based on when the singleton was first accessed.

Parameters

string $extension

Classname of an Extension subclass without parameters

Return Value

bool

Extension[] getExtensionInstances()

Get all extension instances for this specific object instance.

See get_extensions() to get all applied extension classes for this class (not the instance).

This method also provides lazy-population of the extension_instances property.

Return Value

Extension[]

Map of DataExtension instances, keyed by classname.

__construct()

QueuedJobService constructor.

int queueJob(QueuedJob $job, null|string $startAfter = null, null|int $userId = null, null|int $queueName = null)

Adds a job to the queue to be started

Parameters

QueuedJob $job

The job to start.

null|string $startAfter

The date (in Y-m-d H:i:s format) to start execution after

null|int $userId

The ID of a user to execute the job as. Defaults to the current user

null|int $queueName

Return Value

int

Exceptions

ValidationException

startJob(QueuedJobDescriptor $jobDescriptor, string $startAfter = null)

Start a job (or however the queue handler determines it should be started)

Parameters

QueuedJobDescriptor $jobDescriptor
string $startAfter

bool isAtMaxJobs()

Check if maximum number of jobs are currently initialised.

Return Value

bool

protected copyJobToDescriptor(QueuedJob $job, QueuedJobDescriptor $jobDescriptor)

Copies data from a job into a descriptor for persisting

Parameters

QueuedJob $job
QueuedJobDescriptor $jobDescriptor

protected copyDescriptorToJob(QueuedJobDescriptor $jobDescriptor, QueuedJob $job)

No description

Parameters

QueuedJobDescriptor $jobDescriptor
QueuedJob $job

QueuedJobDescriptor|null getNextPendingJob(string $type = null)

Check the current job queues and see if any of the jobs currently in there should be started. If so, return the next job that should be executed

Parameters

string $type

Job type

Return Value

QueuedJobDescriptor|null

array checkJobHealth(int $queue = null)

Runs an explicit check on all currently running jobs to make sure their "processed" count is incrementing between each run. If it's not, then we need to flag it as paused due to an error.

This typically happens when a PHP fatal error is thrown, which can't be picked up by the error handler or exception checker; in this case, we detect these stalled jobs later and fix (try) to fix them

This function returns the IDs of stalled and broken jobs this information can be used to implement some custom follow up actions such as sending email reports

Parameters

int $queue

The queue to check against

Return Value

array

stalled job and broken job IDs

Exceptions

Exception

checkDefaultJobs($queue = null)

Checks through ll the scheduled jobs that are expected to exist

Parameters

$queue

protected restartStalledJob(QueuedJobDescriptor $stalledJob)

Attempt to restart a stalled job

Parameters

QueuedJobDescriptor $stalledJob

protected QueuedJob|bool initialiseJob(QueuedJobDescriptor $jobDescriptor)

Prepares the given jobDescriptor for execution. Returns the job that will actually be run in a state ready for executing.

Note that this is called each time a job is picked up to be executed from the cron job - meaning that jobs that are paused and restarted will have 'setup()' called on them again, so your job MUST detect that and act accordingly.

Parameters

QueuedJobDescriptor $jobDescriptor

The Job descriptor of a job to prepare for execution

Return Value

QueuedJob|bool

Exceptions

Exception

protected bool grabMutex(QueuedJobDescriptor $jobDescriptor)

Given a QueuedJobDescriptor mark the job as initialised. Works sort of like a mutex.

Currently a database lock isn't entirely achievable, due to database adapters not supporting locks. This may still have a race condition, but this should minimise the possibility. Side effect is the job status will be changed to "Initialised".

Assumption is the job has a status of "Queued" or "Wait".

Parameters

QueuedJobDescriptor $jobDescriptor

Return Value

bool

bool runJob(int $jobId)

Start the actual execution of a job.

The assumption is the jobID refers to a QueuedJobDescriptor that is status set as "Queued".

This method will continue executing until the job says it's completed

Parameters

int $jobId

The ID of the job to start executing

Return Value

bool

Exceptions

Exception

protected finaliseLogging(LoggerInterface $logger)

No description

Parameters

LoggerInterface $logger

protected mixed withNestedState(callable $callback)

Provides a wrapper when executing arbitrary code contained in job implementation this ensures that job specific code doesn't alter the configuration of the queue runner execution

Parameters

callable $callback

Return Value

mixed

protected handleJobInitialisationException(QueuedJobDescriptor $jobDescriptor, Throwable $e)

No description

Parameters

QueuedJobDescriptor $jobDescriptor
Throwable $e

protected handleBrokenJobException(QueuedJobDescriptor $jobDescriptor, QueuedJob $job, Exception|Throwable $e)

No description

Parameters

QueuedJobDescriptor $jobDescriptor
QueuedJob $job
Exception|Throwable $e

protected null|Member setRunAsUser(Member $runAsUser, Member $originalUser = null)

No description

Parameters

Member $runAsUser
Member $originalUser

Return Value

null|Member

protected unsetRunAsUser(Member $runAsUser = null, Member $originalUser = null)

No description

Parameters

Member $runAsUser
Member $originalUser

protected markStarted()

Start timer

protected bool hasPassedTimeLimit()

Is execution time too long?

Return Value

bool

True if the script has passed the configured time_limit

protected bool isMemoryTooHigh()

Is memory usage too high?

Return Value

bool

protected float getMemoryUsage()

Get peak memory usage of this application

Return Value

float

protected float getMemoryLimit()

Determines the memory limit (in bytes) for this application Limits to the smaller of memory_limit configured via php.ini or silverstripe config

Return Value

float

Memory limit in bytes

protected float getPHPMemoryLimit()

Calculate the current memory limit of the server

Return Value

float

protected float parseMemory(string $memString)

Convert memory limit string to bytes.

Based on implementation in install.php5

Parameters

string $memString

Return Value

float

protected humanReadable($size)

No description

Parameters

$size

QueuedJobDescriptor> getJobList(string $type = null, int $includeUpUntil = 0)

Gets a list of all the current jobs (or jobs that have recently finished)

Parameters

string $type

if we're after a particular job list

int $includeUpUntil

The number of seconds to include jobs that have just finished, allowing a job list to be built that includes recently finished jobs

Return Value

QueuedJobDescriptor>

string getJobListFilter(string $type = null, int $includeUpUntil = 0)

Return the SQL filter used to get the job list - this is used by the UI for displaying the job list.

..

Parameters

string $type

if we're after a particular job list

int $includeUpUntil

The number of seconds to include jobs that have just finished, allowing a job list to be built that includes recently finished jobs

Return Value

string

runQueue(string $queue)

Process the job queue with the current queue runner

Parameters

string $queue

processJobQueue(string $name)

Process all jobs from a given queue

Parameters

string $name

The job queue to completely process

onShutdown()

When PHP shuts down, we want to process all of the immediate queue items

We use the 'getNextPendingJob' method, instead of just iterating the queue, to ensure we ignore paused or stalled jobs.

LoggerInterface getLogger()

Get a logger

Return Value

LoggerInterface

setLogger(LoggerInterface $logger)

No description

Parameters

LoggerInterface $logger

enableMaintenanceLock()

No description

disableMaintenanceLock()

No description

bool isMaintenanceLockActive()

No description

Return Value

bool

protected string getWorkerExpiry()

Get expiry time for a worker to be operating on a job, helps to identify jobs that have stalled more accurately.

Return Value

string

Exceptions

Exception

protected string getInitStateExpiry()

Get expiry time for a INIT state of a queued job this helps to identify jobs that have stalled more accurately

Return Value

string

Exceptions

Exception

protected void releaseJobLock(QueuedJobDescriptor $descriptor)

Release job lock on the descriptor so it can run again

Parameters

QueuedJobDescriptor $descriptor

Return Value

void

protected void markJobAsBroken(QueuedJobDescriptor $descriptor)

Mark a Job as Broken and release the lock so it can be resumed

Parameters

QueuedJobDescriptor $descriptor

Return Value

void