}
private Optional<CeQueueDto> tryToPeek(DbSession session, String taskUuid) {
- int touchedRows = mapper(session).updateIfStatus(taskUuid, IN_PROGRESS, system2.now(), system2.now(), PENDING);
+ int touchedRows = mapper(session).updateIf(taskUuid,
+ new UpdateIf.NewProperties(IN_PROGRESS, system2.now(), system2.now()),
+ new UpdateIf.OldProperties(PENDING));
if (touchedRows != 1) {
return Optional.absent();
}
void resetAllToPendingStatus(@Param("updatedAt") long updatedAt);
- int updateIfStatus(@Param("uuid") String uuid,
- @Param("newStatus") CeQueueDto.Status newStatus,
- @Nullable @Param("startedAt") Long startedAt,
- @Param("updatedAt") long updatedAt,
- @Param("oldStatus") CeQueueDto.Status oldStatus);
+ int updateIf(@Param("uuid") String uuid,
+ @Param("new") UpdateIf.NewProperties newProperties,
+ @Param("old") UpdateIf.OldProperties oldProperties);
void deleteByUuid(@Param("uuid") String uuid);
+
}
--- /dev/null
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.db.ce;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.concurrent.Immutable;
+
+import static java.util.Objects.requireNonNull;
+
+final class UpdateIf {
+ private UpdateIf() {
+ // just a wrapping class, prevent instantiation
+ }
+
+ @Immutable
+ public static class NewProperties {
+ private final CeQueueDto.Status status;
+ private final Long startedAt;
+ private final long updatedAt;
+
+ NewProperties(CeQueueDto.Status status, Long startedAt, long updatedAt) {
+ this.status = requireNonNull(status, "status can't be null");
+ this.startedAt = startedAt;
+ this.updatedAt = updatedAt;
+ }
+
+ public CeQueueDto.Status getStatus() {
+ return status;
+ }
+
+ @CheckForNull
+ public Long getStartedAt() {
+ return startedAt;
+ }
+
+ public long getUpdatedAt() {
+ return updatedAt;
+ }
+ }
+
+ @Immutable
+ public static class OldProperties {
+ private final CeQueueDto.Status status;
+
+ OldProperties(CeQueueDto.Status status) {
+ this.status = requireNonNull(status, "status can't be null");
+ }
+
+ public CeQueueDto.Status getStatus() {
+ return status;
+ }
+ }
+
+}
status <> 'PENDING'
</update>
- <update id="updateIfStatus" parameterType="map">
+ <update id="updateIf" parameterType="map">
update ce_queue set
- status=#{newStatus,jdbcType=VARCHAR},
- started_at=#{startedAt,jdbcType=BIGINT},
- updated_at=#{updatedAt,jdbcType=BIGINT}
+ status=#{new.status,jdbcType=VARCHAR},
+ started_at=#{new.startedAt,jdbcType=BIGINT},
+ updated_at=#{new.updatedAt,jdbcType=BIGINT}
where
uuid=#{uuid,jdbcType=VARCHAR}
- and status=#{oldStatus,jdbcType=VARCHAR}
+ and status=#{old.status,jdbcType=VARCHAR}
</update>
<delete id="deleteByUuid">