Showing
5 changed files
with
70 additions
and
18 deletions
@@ -124,17 +124,27 @@ BEGIN | @@ -124,17 +124,27 @@ BEGIN | ||
124 | END | 124 | END |
125 | $$; | 125 | $$; |
126 | 126 | ||
127 | -CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN system_ttl bigint, INOUT deleted bigint) | 127 | +CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN ttl bigint, IN debug_ttl bigint, INOUT deleted bigint) |
128 | LANGUAGE plpgsql AS | 128 | LANGUAGE plpgsql AS |
129 | $$ | 129 | $$ |
130 | - DECLARE | ||
131 | - ttl_ts bigint; | 130 | +DECLARE |
131 | + ttl_ts bigint; | ||
132 | + debug_ttl_ts bigint; | ||
133 | + ttl_deleted_count bigint DEFAULT 0; | ||
134 | + debug_ttl_deleted_count bigint DEFAULT 0; | ||
132 | BEGIN | 135 | BEGIN |
133 | - IF system_ttl > 0 THEN | ||
134 | - ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - system_ttl::bigint * 1000)::bigint; | 136 | + IF ttl > 0 THEN |
137 | + ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - ttl::bigint * 1000)::bigint; | ||
138 | + EXECUTE format( | ||
139 | + 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type != %L::varchar AND event_type != %L::varchar) RETURNING *) SELECT count(*) FROM deleted', ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into ttl_deleted_count; | ||
140 | + END IF; | ||
141 | + IF debug_ttl > 0 THEN | ||
142 | + debug_ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - debug_ttl::bigint * 1000)::bigint; | ||
135 | EXECUTE format( | 143 | EXECUTE format( |
136 | - 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint RETURNING *) SELECT count(*) FROM deleted', ttl_ts) into deleted; | 144 | + 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type = %L::varchar OR event_type = %L::varchar) RETURNING *) SELECT count(*) FROM deleted', debug_ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into debug_ttl_deleted_count; |
137 | END IF; | 145 | END IF; |
146 | + RAISE NOTICE 'Events removed by ttl: %', ttl_deleted_count; | ||
147 | + RAISE NOTICE 'Debug Events removed by ttl: %', debug_ttl_deleted_count; | ||
148 | + deleted := ttl_deleted_count + debug_ttl_deleted_count; | ||
138 | END | 149 | END |
139 | $$; | 150 | $$; |
140 | - |
@@ -31,9 +31,12 @@ import java.sql.SQLException; | @@ -31,9 +31,12 @@ import java.sql.SQLException; | ||
31 | @Service | 31 | @Service |
32 | public class EventsCleanUpService extends AbstractCleanUpService { | 32 | public class EventsCleanUpService extends AbstractCleanUpService { |
33 | 33 | ||
34 | - @Value("${sql.ttl.events.events_key_value_ttl}") | 34 | + @Value("${sql.ttl.events.events_ttl}") |
35 | private long ttl; | 35 | private long ttl; |
36 | 36 | ||
37 | + @Value("${sql.ttl.events.debug_events_ttl}") | ||
38 | + private long debugTtl; | ||
39 | + | ||
37 | @Value("${sql.ttl.events.enabled}") | 40 | @Value("${sql.ttl.events.enabled}") |
38 | private boolean ttlTaskExecutionEnabled; | 41 | private boolean ttlTaskExecutionEnabled; |
39 | 42 | ||
@@ -50,7 +53,7 @@ public class EventsCleanUpService extends AbstractCleanUpService { | @@ -50,7 +53,7 @@ public class EventsCleanUpService extends AbstractCleanUpService { | ||
50 | 53 | ||
51 | @Override | 54 | @Override |
52 | protected void doCleanUp(Connection connection) { | 55 | protected void doCleanUp(Connection connection) { |
53 | - long totalEventsRemoved = executeQuery(connection, "call cleanup_events_by_ttl(" + ttl + ", 0);"); | 56 | + long totalEventsRemoved = executeQuery(connection, "call cleanup_events_by_ttl(" + ttl + ", " + debugTtl + ", 0);"); |
54 | log.info("Total events removed by TTL: [{}]", totalEventsRemoved); | 57 | log.info("Total events removed by TTL: [{}]", totalEventsRemoved); |
55 | } | 58 | } |
56 | } | 59 | } |
@@ -205,12 +205,13 @@ sql: | @@ -205,12 +205,13 @@ sql: | ||
205 | ttl: | 205 | ttl: |
206 | ts: | 206 | ts: |
207 | enabled: "${SQL_TTL_TS_ENABLED:true}" | 207 | enabled: "${SQL_TTL_TS_ENABLED:true}" |
208 | - execution_interval_ms: "${SQL_TTL_TS_EXECUTION_INTERVAL:86400000}" # Number of miliseconds. The current value corresponds to one day | 208 | + execution_interval_ms: "${SQL_TTL_TS_EXECUTION_INTERVAL:10000}" # Number of miliseconds. The current value corresponds to one day |
209 | ts_key_value_ttl: "${SQL_TTL_TS_TS_KEY_VALUE_TTL:0}" # Number of seconds | 209 | ts_key_value_ttl: "${SQL_TTL_TS_TS_KEY_VALUE_TTL:0}" # Number of seconds |
210 | events: | 210 | events: |
211 | enabled: "${SQL_TTL_EVENTS_ENABLED:true}" | 211 | enabled: "${SQL_TTL_EVENTS_ENABLED:true}" |
212 | - execution_interval_ms: "${SQL_TTL_EVENTS_EXECUTION_INTERVAL:86400000}" # Number of miliseconds. The current value corresponds to one day | ||
213 | - events_key_value_ttl: "${SQL_TTL_EVENTS_EVENTS_KEY_VALUE_TTL:0}" # Number of seconds | 212 | + execution_interval_ms: "${SQL_TTL_EVENTS_EXECUTION_INTERVAL:10000}" # Number of miliseconds. The current value corresponds to one day |
213 | + events_ttl: "${SQL_TTL_EVENTS_EVENTS_TTL:900}" # Number of seconds | ||
214 | + debug_events_ttl: "${SQL_TTL_EVENTS_DEBUG_EVENTS_TTL:900}" # Number of seconds. The current value corresponds to one week | ||
214 | 215 | ||
215 | # Actor system parameters | 216 | # Actor system parameters |
216 | actors: | 217 | actors: |
@@ -371,7 +372,7 @@ spring: | @@ -371,7 +372,7 @@ spring: | ||
371 | database-platform: "${SPRING_JPA_DATABASE_PLATFORM:org.hibernate.dialect.PostgreSQLDialect}" | 372 | database-platform: "${SPRING_JPA_DATABASE_PLATFORM:org.hibernate.dialect.PostgreSQLDialect}" |
372 | datasource: | 373 | datasource: |
373 | driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}" | 374 | driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}" |
374 | - url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}" | 375 | + url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard_ttl_test}" |
375 | username: "${SPRING_DATASOURCE_USERNAME:postgres}" | 376 | username: "${SPRING_DATASOURCE_USERNAME:postgres}" |
376 | password: "${SPRING_DATASOURCE_PASSWORD:postgres}" | 377 | password: "${SPRING_DATASOURCE_PASSWORD:postgres}" |
377 | hikari: | 378 | hikari: |
@@ -144,6 +144,7 @@ CREATE TABLE IF NOT EXISTS event ( | @@ -144,6 +144,7 @@ CREATE TABLE IF NOT EXISTS event ( | ||
144 | event_type varchar(255), | 144 | event_type varchar(255), |
145 | event_uid varchar(255), | 145 | event_uid varchar(255), |
146 | tenant_id varchar(31), | 146 | tenant_id varchar(31), |
147 | + ts bigint NOT NULL, | ||
147 | CONSTRAINT event_unq_key UNIQUE (tenant_id, entity_type, entity_id, event_type, event_uid) | 148 | CONSTRAINT event_unq_key UNIQUE (tenant_id, entity_type, entity_id, event_type, event_uid) |
148 | ); | 149 | ); |
149 | 150 | ||
@@ -251,3 +252,29 @@ CREATE TABLE IF NOT EXISTS entity_view ( | @@ -251,3 +252,29 @@ CREATE TABLE IF NOT EXISTS entity_view ( | ||
251 | search_text varchar(255), | 252 | search_text varchar(255), |
252 | additional_info varchar | 253 | additional_info varchar |
253 | ); | 254 | ); |
255 | + | ||
256 | +CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN ttl bigint, IN debug_ttl bigint, INOUT deleted bigint) | ||
257 | + LANGUAGE plpgsql AS | ||
258 | +$$ | ||
259 | +DECLARE | ||
260 | + ttl_ts bigint; | ||
261 | + debug_ttl_ts bigint; | ||
262 | + ttl_deleted_count bigint DEFAULT 0; | ||
263 | + debug_ttl_deleted_count bigint DEFAULT 0; | ||
264 | +BEGIN | ||
265 | + IF ttl > 0 THEN | ||
266 | + ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - ttl::bigint * 1000)::bigint; | ||
267 | + EXECUTE format( | ||
268 | + 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type != %L::varchar AND event_type != %L::varchar) RETURNING *) SELECT count(*) FROM deleted', ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into ttl_deleted_count; | ||
269 | + END IF; | ||
270 | + IF debug_ttl > 0 THEN | ||
271 | + debug_ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - debug_ttl::bigint * 1000)::bigint; | ||
272 | + EXECUTE format( | ||
273 | + 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type = %L::varchar OR event_type = %L::varchar) RETURNING *) SELECT count(*) FROM deleted', debug_ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into debug_ttl_deleted_count; | ||
274 | + END IF; | ||
275 | + RAISE NOTICE 'Events removed by ttl: %', ttl_deleted_count; | ||
276 | + RAISE NOTICE 'Debug Events removed by ttl: %', debug_ttl_deleted_count; | ||
277 | + deleted := ttl_deleted_count + debug_ttl_deleted_count; | ||
278 | +END | ||
279 | +$$; | ||
280 | + |
@@ -144,7 +144,7 @@ CREATE TABLE IF NOT EXISTS event ( | @@ -144,7 +144,7 @@ CREATE TABLE IF NOT EXISTS event ( | ||
144 | event_type varchar(255), | 144 | event_type varchar(255), |
145 | event_uid varchar(255), | 145 | event_uid varchar(255), |
146 | tenant_id varchar(31), | 146 | tenant_id varchar(31), |
147 | - ts bigint, | 147 | + ts bigint NOT NULL, |
148 | CONSTRAINT event_unq_key UNIQUE (tenant_id, entity_type, entity_id, event_type, event_uid) | 148 | CONSTRAINT event_unq_key UNIQUE (tenant_id, entity_type, entity_id, event_type, event_uid) |
149 | ); | 149 | ); |
150 | 150 | ||
@@ -253,16 +253,27 @@ CREATE TABLE IF NOT EXISTS entity_view ( | @@ -253,16 +253,27 @@ CREATE TABLE IF NOT EXISTS entity_view ( | ||
253 | additional_info varchar | 253 | additional_info varchar |
254 | ); | 254 | ); |
255 | 255 | ||
256 | -CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN system_ttl bigint, INOUT deleted bigint) | 256 | +CREATE OR REPLACE PROCEDURE cleanup_events_by_ttl(IN ttl bigint, IN debug_ttl bigint, INOUT deleted bigint) |
257 | LANGUAGE plpgsql AS | 257 | LANGUAGE plpgsql AS |
258 | $$ | 258 | $$ |
259 | DECLARE | 259 | DECLARE |
260 | ttl_ts bigint; | 260 | ttl_ts bigint; |
261 | + debug_ttl_ts bigint; | ||
262 | + ttl_deleted_count bigint DEFAULT 0; | ||
263 | + debug_ttl_deleted_count bigint DEFAULT 0; | ||
261 | BEGIN | 264 | BEGIN |
262 | - IF system_ttl > 0 THEN | ||
263 | - ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - system_ttl::bigint * 1000)::bigint; | 265 | + IF ttl > 0 THEN |
266 | + ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - ttl::bigint * 1000)::bigint; | ||
264 | EXECUTE format( | 267 | EXECUTE format( |
265 | - 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint RETURNING *) SELECT count(*) FROM deleted', ttl_ts) into deleted; | 268 | + 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type != %L::varchar AND event_type != %L::varchar) RETURNING *) SELECT count(*) FROM deleted', ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into ttl_deleted_count; |
266 | END IF; | 269 | END IF; |
270 | + IF debug_ttl > 0 THEN | ||
271 | + debug_ttl_ts := (EXTRACT(EPOCH FROM current_timestamp) * 1000 - debug_ttl::bigint * 1000)::bigint; | ||
272 | + EXECUTE format( | ||
273 | + 'WITH deleted AS (DELETE FROM event WHERE ts < %L::bigint AND (event_type = %L::varchar OR event_type = %L::varchar) RETURNING *) SELECT count(*) FROM deleted', debug_ttl_ts, 'DEBUG_RULE_NODE', 'DEBUG_RULE_CHAIN') into debug_ttl_deleted_count; | ||
274 | + END IF; | ||
275 | + RAISE NOTICE 'Events removed by ttl: %', ttl_deleted_count; | ||
276 | + RAISE NOTICE 'Debug Events removed by ttl: %', debug_ttl_deleted_count; | ||
277 | + deleted := ttl_deleted_count + debug_ttl_deleted_count; | ||
267 | END | 278 | END |
268 | $$; | 279 | $$; |