Showing
5 changed files
with
70 additions
and
18 deletions
... | ... | @@ -124,17 +124,27 @@ BEGIN |
124 | 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 | 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 | 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 | 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 | 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 | 149 | END |
139 | 150 | $$; |
140 | - | ... | ... |
... | ... | @@ -31,9 +31,12 @@ import java.sql.SQLException; |
31 | 31 | @Service |
32 | 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 | 35 | private long ttl; |
36 | 36 | |
37 | + @Value("${sql.ttl.events.debug_events_ttl}") | |
38 | + private long debugTtl; | |
39 | + | |
37 | 40 | @Value("${sql.ttl.events.enabled}") |
38 | 41 | private boolean ttlTaskExecutionEnabled; |
39 | 42 | |
... | ... | @@ -50,7 +53,7 @@ public class EventsCleanUpService extends AbstractCleanUpService { |
50 | 53 | |
51 | 54 | @Override |
52 | 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 | 57 | log.info("Total events removed by TTL: [{}]", totalEventsRemoved); |
55 | 58 | } |
56 | 59 | } |
\ No newline at end of file | ... | ... |
... | ... | @@ -205,12 +205,13 @@ sql: |
205 | 205 | ttl: |
206 | 206 | ts: |
207 | 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 | 209 | ts_key_value_ttl: "${SQL_TTL_TS_TS_KEY_VALUE_TTL:0}" # Number of seconds |
210 | 210 | events: |
211 | 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 | 216 | # Actor system parameters |
216 | 217 | actors: |
... | ... | @@ -371,7 +372,7 @@ spring: |
371 | 372 | database-platform: "${SPRING_JPA_DATABASE_PLATFORM:org.hibernate.dialect.PostgreSQLDialect}" |
372 | 373 | datasource: |
373 | 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 | 376 | username: "${SPRING_DATASOURCE_USERNAME:postgres}" |
376 | 377 | password: "${SPRING_DATASOURCE_PASSWORD:postgres}" |
377 | 378 | hikari: | ... | ... |
... | ... | @@ -144,6 +144,7 @@ CREATE TABLE IF NOT EXISTS event ( |
144 | 144 | event_type varchar(255), |
145 | 145 | event_uid varchar(255), |
146 | 146 | tenant_id varchar(31), |
147 | + ts bigint NOT NULL, | |
147 | 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 | 252 | search_text varchar(255), |
252 | 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 | 144 | event_type varchar(255), |
145 | 145 | event_uid varchar(255), |
146 | 146 | tenant_id varchar(31), |
147 | - ts bigint, | |
147 | + ts bigint NOT NULL, | |
148 | 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 | 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 | 257 | LANGUAGE plpgsql AS |
258 | 258 | $$ |
259 | 259 | DECLARE |
260 | 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 | 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 | 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 | 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 | 278 | END |
268 | 279 | $$; | ... | ... |