From d1855ee400066a6db051fa3c761569499d02ac08 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Tue, 6 Jul 2021 20:51:11 +0300 Subject: [PATCH 1/6] javax.persistence.query.timeout with slowQuery repository for manual testing --- application/src/main/resources/thingsboard.yml | 2 ++ .../thingsboard/server/dao/sql/event/EventRepository.java | 6 ++++++ .../thingsboard/server/dao/sql/event/JpaBaseEventDao.java | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index 05f3f1e825..5433aa2e0b 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -472,6 +472,8 @@ spring: repositories: enabled: "true" jpa: + properties: + javax.persistence.query.timeout: "${JAVAX_PERSISTENCE_QUERY_TIMEOUT:29000}" open-in-view: "false" hibernate: ddl-auto: "none" diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java index 270ab26329..5f6cf91ab3 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java @@ -241,4 +241,10 @@ public interface EventRepository extends PagingAndSortingRepository implemen @Override public PageData findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { + log.warn("going to run slow query"); + try { + eventRepository.slowQuery(); + } catch (Exception e) { + log.error("slowQuery" , e); + throw e; + } + log.warn("finished slow query"); return DaoUtil.toPageData( eventRepository .findEventsByTenantIdAndEntityIdAndEventType( From 3eac727557be296e0866ab80cf81e881549615e4 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Thu, 8 Jul 2021 11:03:46 +0300 Subject: [PATCH 2/6] javax.persistence.query.timeout 30 sec --- application/src/main/resources/thingsboard.yml | 2 +- .../thingsboard/server/dao/sql/event/EventRepository.java | 6 ------ .../thingsboard/server/dao/sql/event/JpaBaseEventDao.java | 8 -------- 3 files changed, 1 insertion(+), 15 deletions(-) diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index 5433aa2e0b..b9fd354760 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -473,7 +473,7 @@ spring: enabled: "true" jpa: properties: - javax.persistence.query.timeout: "${JAVAX_PERSISTENCE_QUERY_TIMEOUT:29000}" + javax.persistence.query.timeout: "${JAVAX_PERSISTENCE_QUERY_TIMEOUT:30000}" open-in-view: "false" hibernate: ddl-auto: "none" diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java index 5f6cf91ab3..270ab26329 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java @@ -241,10 +241,4 @@ public interface EventRepository extends PagingAndSortingRepository implemen @Override public PageData findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { - log.warn("going to run slow query"); - try { - eventRepository.slowQuery(); - } catch (Exception e) { - log.error("slowQuery" , e); - throw e; - } - log.warn("finished slow query"); return DaoUtil.toPageData( eventRepository .findEventsByTenantIdAndEntityIdAndEventType( From 9c0aabdcd60e6ac1e50a47376e3ed604734da983 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Thu, 8 Jul 2021 19:26:53 +0300 Subject: [PATCH 3/6] enabled long query for cleanup services stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); --- .../java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java | 2 ++ .../org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java | 2 ++ .../thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java | 1 + .../thingsboard/server/dao/sqlts/psql/JpaPsqlTimeseriesDao.java | 2 ++ 4 files changed, 7 insertions(+) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java index 2249de109f..8373247fc5 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java @@ -50,6 +50,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.UUID; +import java.util.concurrent.TimeUnit; @Component @Slf4j @@ -205,6 +206,7 @@ public class JpaEdgeDao extends JpaAbstractSearchTextDao imple PreparedStatement stmt = connection.prepareStatement("call cleanup_edge_events_by_ttl(?,?)")) { stmt.setLong(1, ttl); stmt.setLong(2, 0); + stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); stmt.execute(); printWarnings(stmt); try (ResultSet resultSet = stmt.getResultSet()) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java index ee09bb7a90..dc1640c92e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java @@ -47,6 +47,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.UUID; +import java.util.concurrent.TimeUnit; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; @@ -267,6 +268,7 @@ public class JpaBaseEventDao extends JpaAbstractDao implemen stmt.setLong(1, otherEventsTtl); stmt.setLong(2, debugEventsTtl); stmt.setLong(3, 0); + stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); stmt.execute(); printWarnings(stmt); try (ResultSet resultSet = stmt.getResultSet()){ diff --git a/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java index eb12984753..a5eee9c0f4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java @@ -74,6 +74,7 @@ public abstract class AbstractSqlTimeseriesDao extends BaseAbstractSqlTimeseries stmt.setObject(1, ModelConstants.NULL_UUID); stmt.setLong(2, systemTtl); stmt.setLong(3, 0); + stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); stmt.execute(); printWarnings(stmt); try (ResultSet resultSet = stmt.getResultSet()) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/sqlts/psql/JpaPsqlTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sqlts/psql/JpaPsqlTimeseriesDao.java index c23e615548..6b9078a3b8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sqlts/psql/JpaPsqlTimeseriesDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sqlts/psql/JpaPsqlTimeseriesDao.java @@ -47,6 +47,7 @@ import java.time.format.DateTimeFormatter; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @Component @@ -111,6 +112,7 @@ public class JpaPsqlTimeseriesDao extends AbstractChunkedAggregationTimeseriesDa stmt.setString(1, partitioning); stmt.setLong(2, systemTtl); stmt.setLong(3, 0); + stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); stmt.execute(); printWarnings(stmt); try (ResultSet resultSet = stmt.getResultSet()) { From 305409a0dc4c46593ae6478d815b5b2d10e21356 Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Tue, 12 Oct 2021 14:24:50 +0300 Subject: [PATCH 4/6] JpaBaseEdgeEventDao: sql query timeout 1 hour --- .../thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java index 050d0181f0..c9795782ec 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java @@ -43,6 +43,7 @@ import java.util.Optional; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -145,6 +146,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao Date: Tue, 12 Oct 2021 14:25:24 +0300 Subject: [PATCH 5/6] PsqlEventCleanupRepository.java: sql query timeout 1 hour --- .../server/dao/sql/event/PsqlEventCleanupRepository.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/PsqlEventCleanupRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/PsqlEventCleanupRepository.java index b19c8b0712..7577e0730a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/PsqlEventCleanupRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/PsqlEventCleanupRepository.java @@ -24,6 +24,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.concurrent.TimeUnit; @Slf4j @PsqlDao @@ -37,6 +38,7 @@ public class PsqlEventCleanupRepository extends JpaAbstractDaoListeningExecutorS stmt.setLong(1, otherEventsTtl); stmt.setLong(2, debugEventsTtl); stmt.setLong(3, 0); + stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); stmt.execute(); printWarnings(stmt); try (ResultSet resultSet = stmt.getResultSet()){ From 2dc1f18a2d396068850a0c36d2a18571e4eea62b Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Tue, 12 Oct 2021 14:27:02 +0300 Subject: [PATCH 6/6] HsqlEventCleanupRepository: sql query timeout 1 hour --- .../server/dao/sql/event/HsqlEventCleanupRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/HsqlEventCleanupRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/HsqlEventCleanupRepository.java index 7ea832ee32..38299e9443 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/HsqlEventCleanupRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/HsqlEventCleanupRepository.java @@ -23,6 +23,7 @@ import org.thingsboard.server.dao.util.HsqlDao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.concurrent.TimeUnit; @Slf4j @HsqlDao @@ -35,6 +36,7 @@ public class HsqlEventCleanupRepository extends JpaAbstractDaoListeningExecutorS try (Connection connection = dataSource.getConnection(); PreparedStatement stmt = connection.prepareStatement("DELETE FROM event WHERE ts < ? AND event_type != 'DEBUG_RULE_NODE' AND event_type != 'DEBUG_RULE_CHAIN'")) { stmt.setLong(1, otherExpirationTime); + stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); stmt.execute(); } catch (SQLException e) { log.error("SQLException occurred during events TTL task execution ", e); @@ -43,6 +45,7 @@ public class HsqlEventCleanupRepository extends JpaAbstractDaoListeningExecutorS try (Connection connection = dataSource.getConnection(); PreparedStatement stmt = connection.prepareStatement("DELETE FROM event WHERE ts < ? AND (event_type = 'DEBUG_RULE_NODE' OR event_type = 'DEBUG_RULE_CHAIN')")) { stmt.setLong(1, debugExpirationTime); + stmt.setQueryTimeout((int) TimeUnit.HOURS.toSeconds(1)); stmt.execute(); } catch (SQLException e) { log.error("SQLException occurred during events TTL task execution ", e);