@@ -65,6 +65,7 @@ public function __construct(IDBConnection $connection, IConfig $config, ITimeFac
6565 * @param mixed $argument
6666 */
6767 public function add ($ job , $ argument = null ) {
68+ $ query = $ this ->connection ->getQueryBuilder ();
6869 if (!$ this ->has ($ job , $ argument )) {
6970 if ($ job instanceof IJob) {
7071 $ class = get_class ($ job );
@@ -77,7 +78,6 @@ public function add($job, $argument = null) {
7778 throw new \InvalidArgumentException ('Background job arguments can \'t exceed 4000 characters (json encoded) ' );
7879 }
7980
80- $ query = $ this ->connection ->getQueryBuilder ();
8181 $ query ->insert ('jobs ' )
8282 ->values ([
8383 'class ' => $ query ->createNamedParameter ($ class ),
@@ -86,6 +86,25 @@ public function add($job, $argument = null) {
8686 'last_checked ' => $ query ->createNamedParameter ($ this ->timeFactory ->getTime (), IQueryBuilder::PARAM_INT ),
8787 ]);
8888 $ query ->execute ();
89+ } else {
90+ if ($ job instanceof IJob) {
91+ $ class = get_class ($ job );
92+ } else {
93+ $ class = $ job ;
94+ }
95+
96+ $ argument = json_encode ($ argument );
97+ if (strlen ($ argument ) > 4000 ) {
98+ throw new \InvalidArgumentException ('Background job arguments can \'t exceed 4000 characters (json encoded) ' );
99+ }
100+
101+ $ reset = $ this ->connection ->getQueryBuilder ();
102+ $ reset ->update ('jobs ' )
103+ ->set ('reserved_at ' , $ reset ->expr ()->literal (0 , IQueryBuilder::PARAM_INT ))
104+ ->set ('last_checked ' , $ reset ->createNamedParameter ($ this ->timeFactory ->getTime (), IQueryBuilder::PARAM_INT ))
105+ ->where ($ query ->expr ()->eq ('class ' , $ reset ->createNamedParameter ($ class )))
106+ ->andWhere ($ query ->expr ()->eq ('argument ' , $ reset ->createNamedParameter ($ argument )));
107+ $ reset ->execute ();
89108 }
90109 }
91110
0 commit comments