From 90d0846bad8952f116e505cfc36a8834f77d0d62 Mon Sep 17 00:00:00 2001 From: Athou Date: Sat, 31 Oct 2026 08:46:39 +0100 Subject: [PATCH] apply timeout to all queries --- .../com/commafeed/backend/dao/FeedCategoryDAO.java | 5 +++-- .../main/java/com/commafeed/backend/dao/FeedDAO.java | 5 +++-- .../commafeed/backend/dao/FeedEntryContentDAO.java | 5 +++-- .../java/com/commafeed/backend/dao/FeedEntryDAO.java | 5 +++-- .../commafeed/backend/dao/FeedEntryStatusDAO.java | 8 +------- .../com/commafeed/backend/dao/FeedEntryTagDAO.java | 5 +++-- .../commafeed/backend/dao/FeedSubscriptionDAO.java | 5 +++-- .../java/com/commafeed/backend/dao/GenericDAO.java | 12 ++++++++++-- .../main/java/com/commafeed/backend/dao/UserDAO.java | 5 +++-- .../java/com/commafeed/backend/dao/UserRoleDAO.java | 5 +++-- .../com/commafeed/backend/dao/UserSettingsDAO.java | 5 +++-- 11 files changed, 38 insertions(+), 27 deletions(-) diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java index 58bded57..f39222d3 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedCategoryDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.QFeedCategory; import com.commafeed.backend.model.QUser; @@ -17,8 +18,8 @@ public class FeedCategoryDAO extends GenericDAO { private static final QFeedCategory CATEGORY = QFeedCategory.feedCategory; - public FeedCategoryDAO(EntityManager entityManager) { - super(entityManager, FeedCategory.class); + public FeedCategoryDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, FeedCategory.class, config); } public List findAll(User user) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedDAO.java index 2a9ce5c2..ba9d292a 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.QFeed; import com.commafeed.backend.model.QFeedSubscription; @@ -20,8 +21,8 @@ public class FeedDAO extends GenericDAO { private static final QFeed FEED = QFeed.feed; private static final QFeedSubscription SUBSCRIPTION = QFeedSubscription.feedSubscription; - public FeedDAO(EntityManager entityManager) { - super(entityManager, Feed.class); + public FeedDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, Feed.class, config); } public List findByIds(List id) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java index b1f0a886..c287e9e0 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryContentDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.FeedEntryContent; import com.commafeed.backend.model.QFeedEntry; import com.commafeed.backend.model.QFeedEntryContent; @@ -15,8 +16,8 @@ public class FeedEntryContentDAO extends GenericDAO { private static final QFeedEntryContent CONTENT = QFeedEntryContent.feedEntryContent; private static final QFeedEntry ENTRY = QFeedEntry.feedEntry; - public FeedEntryContentDAO(EntityManager entityManager) { - super(entityManager, FeedEntryContent.class); + public FeedEntryContentDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, FeedEntryContent.class, config); } public List findExisting(String contentHash, String titleHash) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java index 7e77ae8c..66685687 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.QFeedEntry; @@ -23,8 +24,8 @@ public class FeedEntryDAO extends GenericDAO { private static final QFeedEntry ENTRY = QFeedEntry.feedEntry; private static final int IN_CLAUSE_BATCH_SIZE = 1000; - public FeedEntryDAO(EntityManager entityManager) { - super(entityManager, FeedEntry.class); + public FeedEntryDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, FeedEntry.class, config); } public FeedEntry findExisting(String guidHash, Feed feed) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index ef18f600..7d0ecd71 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -51,7 +51,7 @@ public class FeedEntryStatusDAO extends GenericDAO { EntityManager entityManager, FeedEntryTagDAO feedEntryTagDAO, CommaFeedConfiguration config) { - super(entityManager, FeedEntryStatus.class); + super(entityManager, FeedEntryStatus.class, config); this.feedEntryTagDAO = feedEntryTagDAO; this.config = config; } @@ -130,8 +130,6 @@ public class FeedEntryStatusDAO extends GenericDAO { query.limit(limit); } - setTimeout(query, config.database().queryTimeout()); - List statuses = query.fetch(); statuses.forEach(s -> s.setMarkable(true)); if (includeContent) { @@ -208,8 +206,6 @@ public class FeedEntryStatusDAO extends GenericDAO { query.limit(limit); } - setTimeout(query, config.database().queryTimeout()); - List statuses = new ArrayList<>(); List tuples = query.fetch(); for (Tuple tuple : tuples) { @@ -256,8 +252,6 @@ public class FeedEntryStatusDAO extends GenericDAO { .where(buildUnreadPredicate()) .groupBy(ENTRY.feed.id); - setTimeout(query, config.database().queryTimeout()); - Map result = new HashMap<>(); for (Tuple tuple : query.fetch()) { Long feedId = tuple.get(ENTRY.feed.id); diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java index 807ba986..6b8c6531 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryTagDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntryTag; import com.commafeed.backend.model.QFeedEntryTag; @@ -17,8 +18,8 @@ public class FeedEntryTagDAO extends GenericDAO { private static final QFeedEntryTag TAG = QFeedEntryTag.feedEntryTag; - public FeedEntryTagDAO(EntityManager entityManager) { - super(entityManager, FeedEntryTag.class); + public FeedEntryTagDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, FeedEntryTag.class, config); } public List findByUser(User user) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java index f8fdc4c1..0631ca5d 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedSubscriptionDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.AbstractModel; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedCategory; @@ -31,8 +32,8 @@ public class FeedSubscriptionDAO extends GenericDAO { private final EntityManager entityManager; - public FeedSubscriptionDAO(EntityManager entityManager) { - super(entityManager, FeedSubscription.class); + public FeedSubscriptionDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, FeedSubscription.class, config); this.entityManager = entityManager; } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/GenericDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/GenericDAO.java index 62774147..b8e4b357 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/GenericDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/GenericDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.AbstractModel; import com.querydsl.core.types.EntityPath; import com.querydsl.jpa.impl.JPADeleteClause; @@ -21,9 +22,15 @@ public abstract class GenericDAO { private final EntityManager entityManager; private final Class entityClass; + private final CommaFeedConfiguration config; protected JPAQueryFactory query() { - return new JPAQueryFactory(entityManager); + return new JPAQueryFactory(entityManager) { + @Override + public JPAQuery query() { + return withTimeout(super.query(), config.database().queryTimeout()); + } + }; } protected JPAUpdateClause updateQuery(EntityPath entityPath) { @@ -57,9 +64,10 @@ public abstract class GenericDAO { return objects.size(); } - protected void setTimeout(JPAQuery query, Duration timeout) { + private JPAQuery withTimeout(JPAQuery query, Duration timeout) { if (!timeout.isZero()) { query.setHint(SpecHints.HINT_SPEC_QUERY_TIMEOUT, Math.toIntExact(timeout.toMillis())); } + return query; } } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserDAO.java index c1994c44..574eec1c 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.QUser; import com.commafeed.backend.model.User; @@ -11,8 +12,8 @@ public class UserDAO extends GenericDAO { private static final QUser USER = QUser.user; - public UserDAO(EntityManager entityManager) { - super(entityManager, User.class); + public UserDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, User.class, config); } public User findByName(String name) { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java index 419ba9e9..c4eecea6 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.QUserRole; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserRole; @@ -17,8 +18,8 @@ public class UserRoleDAO extends GenericDAO { private static final QUserRole ROLE = QUserRole.userRole; - public UserRoleDAO(EntityManager entityManager) { - super(entityManager, UserRole.class); + public UserRoleDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, UserRole.class, config); } public List findAll() { diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java index 86d693fd..8da04b98 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java @@ -1,5 +1,6 @@ package com.commafeed.backend.dao; +import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.model.QUserSettings; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserSettings; @@ -12,8 +13,8 @@ public class UserSettingsDAO extends GenericDAO { private static final QUserSettings SETTINGS = QUserSettings.userSettings; - public UserSettingsDAO(EntityManager entityManager) { - super(entityManager, UserSettings.class); + public UserSettingsDAO(EntityManager entityManager, CommaFeedConfiguration config) { + super(entityManager, UserSettings.class, config); } public UserSettings findByUser(User user) {