Skip to content

Instantly share code, notes, and snippets.

/json.diff Secret

Created January 3, 2015 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/f535136fdf0eacce4594 to your computer and use it in GitHub Desktop.
Save anonymous/f535136fdf0eacce4594 to your computer and use it in GitHub Desktop.
diff --git a/lib/Minion/Backend/Pg.pm b/lib/Minion/Backend/Pg.pm
index a110d93..bd92b49 100644
--- a/lib/Minion/Backend/Pg.pm
+++ b/lib/Minion/Backend/Pg.pm
@@ -2,7 +2,6 @@ package Minion::Backend::Pg;
use Mojo::Base 'Minion::Backend';
use Mojo::IOLoop;
-use Mojo::JSON qw(decode_json encode_json);
use Mojo::Pg;
use Sys::Hostname 'hostname';
@@ -29,13 +28,13 @@ sub enqueue {
my $options = shift // {};
my $db = $self->pg->db;
- return $db->query(
+ return $db->json($args)->query(
"insert into minion_jobs
(args, created, delayed, priority, retries, state, task)
values
(?, now(), (now() + (interval '1 second' * ?)), ?, ?, ?, ?)
- returning id", encode_json($args), $options->{delay} // 0,
- $options->{priority} // 0, 0, 'inactive', $task
+ returning id", $options->{delay} // 0, $options->{priority} // 0, 0,
+ 'inactive', $task
)->hash->{id};
}
@@ -43,17 +42,14 @@ sub fail_job { shift->_update(1, @_) }
sub finish_job { shift->_update(0, @_) }
sub job_info {
- return undef
- unless my $job = shift->pg->db->query(
+ return shift->pg->db->query(
'select id, args, extract(epoch from created) as created,
extract(epoch from delayed) as delayed,
extract(epoch from finished) as finished, priority, result,
extract(epoch from retried) as retried, retries,
extract(epoch from started) as started, state, task, worker
from minion_jobs where id = ?', shift
- )->hash;
- map { $job->{$_} and $job->{$_} = decode_json $job->{$_} } qw(args result);
- return $job;
+ )->hash;
}
sub list_jobs {
@@ -187,7 +183,7 @@ sub worker_info {
sub _try {
my ($self, $id) = @_;
- return undef unless my $job = $self->pg->db->query(
+ return $self->pg->db->query(
"update minion_jobs
set started = now(), state = 'active', worker = ?
from (
@@ -201,19 +197,16 @@ sub _try {
where minion_jobs.id = job.id
returning minion_jobs.id, args, task", $id, [keys %{$self->minion->tasks}]
)->hash;
- $job->{args} = decode_json $job->{args};
-
- return $job;
}
sub _update {
my ($self, $fail, $id, $result) = @_;
- return !!$self->pg->db->query(
+ return !!$self->pg->db->json($result)->query(
"update minion_jobs
set finished = now(), result = ?, state = ?
where id = ? and state = 'active'
- returning 1", encode_json($result), $fail ? 'failed' : 'finished', $id
+ returning 1", $fail ? 'failed' : 'finished', $id
)->rows;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment