Skip to content

Commit

Permalink
Add multisite support
Browse files Browse the repository at this point in the history
* Add new parameters for multisite support
* give each multisite its own queue to prevent starvation
  • Loading branch information
jonathangreen committed Jul 26, 2017
1 parent a1cb4ca commit 65166fa
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
24 changes: 24 additions & 0 deletions includes/utilities.inc
Expand Up @@ -19,6 +19,26 @@ function islandora_job_get_client() {
return $client;
}

/**
* Get job function name.
*
* This function allows support for multisites by adding the site
* name to each job function.
*
* @param string $job_name
* Name of the job without site.
*
* @return string
* Job name with site added.
*/
function islandora_job_function_name($job_name) {
// Chop the 'sites/' part of the path off. This gives you the name of the
// site dir for the multisite, for example sites/example would be example
// we use this to create the queue for this multisite.
$site = substr(conf_path(),6);
return $site == 'default' ? $job_name : "{$site}_{$job_name}";
}

/**
* Constructs a payload from arguments passed to various API functions.
*
Expand All @@ -32,11 +52,15 @@ function islandora_job_get_client() {
* A JSON encoded payload for Gearman.
*/
function islandora_job_format_payload($job_name, $args) {
global $user;
global $base_url;
array_shift($args);
return json_encode(
array(
"func" => $job_name,
"args" => $args,
"site" => $base_url,
"uid" => $user->uid,
)
);
}
Expand Down
6 changes: 3 additions & 3 deletions islandora_job.module
Expand Up @@ -38,7 +38,7 @@ function islandora_job_submit($job_name) {
module_load_include('inc', 'islandora_job', 'includes/utilities');
$payload = islandora_job_format_payload($job_name, func_get_args());
$client = islandora_job_get_client();
return $client->doNormal($job_name, $payload);
return $client->doNormal(islandora_job_function_name($job_name), $payload);
}

/**
Expand All @@ -58,7 +58,7 @@ function islandora_job_submit_background($job_name) {
module_load_include('inc', 'islandora_job', 'includes/utilities');
$payload = islandora_job_format_payload($job_name, func_get_args());
$client = islandora_job_get_client();
return $client->doBackground($job_name, $payload);
return $client->doBackground(islandora_job_function_name($job_name), $payload);
}

/**
Expand Down Expand Up @@ -92,7 +92,7 @@ function islandora_job_submit_batch($tasks, $callback = NULL) {
// Push on a dummy arg as if this array came from func_get_args().
array_unshift($args, '');
$payload = islandora_job_format_payload($job_name, $args);
$client->addTask($job_name, $payload);
$client->addTask(islandora_job_function_name($job_name), $payload);
}
return $client->runTasks();
}

0 comments on commit 65166fa

Please sign in to comment.