Browse Source

Refactoring after review

pull/14631/head
Andrii Landiak 7 months ago
parent
commit
c4de8926e4
  1. 23
      application/src/main/java/org/thingsboard/server/service/housekeeper/processor/EventsDeletionTaskProcessor.java
  2. 2
      common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java
  3. 12
      dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java
  4. 60
      dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java
  5. 8
      dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
  6. 2
      dao/src/main/java/org/thingsboard/server/dao/sqlts/insert/sql/SqlPartitioningRepository.java

23
application/src/main/java/org/thingsboard/server/service/housekeeper/processor/EventsDeletionTaskProcessor.java

@ -17,15 +17,13 @@ package org.thingsboard.server.service.housekeeper.processor;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.event.ErrorEventFilter;
import org.thingsboard.server.common.data.event.EventFilter;
import org.thingsboard.server.common.data.event.EventType;
import org.thingsboard.server.common.data.event.LifeCycleEventFilter;
import org.thingsboard.server.common.data.event.StatisticsEventFilter;
import org.thingsboard.server.common.data.housekeeper.HousekeeperTask;
import org.thingsboard.server.common.data.housekeeper.HousekeeperTaskType;
import org.thingsboard.server.dao.event.EventService;
import java.util.Arrays;
@Component
@RequiredArgsConstructor
public class EventsDeletionTaskProcessor extends HousekeeperTaskProcessor<HousekeeperTask> {
@ -35,21 +33,8 @@ public class EventsDeletionTaskProcessor extends HousekeeperTaskProcessor<Housek
@Override
public void process(HousekeeperTask task) throws Exception {
// Only delete non-debug events for deleted entities.
for (EventType eventType : EventType.values()) {
if (!eventType.isDebug()) {
EventFilter filter = createFilterForEventType(eventType);
eventService.removeEvents(task.getTenantId(), task.getEntityId(), filter, 0L, System.currentTimeMillis());
}
}
}
private EventFilter createFilterForEventType(EventType eventType) {
return switch (eventType) {
case ERROR -> new ErrorEventFilter();
case LC_EVENT -> new LifeCycleEventFilter();
case STATS -> new StatisticsEventFilter();
default -> throw new IllegalArgumentException("Unexpected non-debug event type: " + eventType);
};
EventType[] nonDebugEventTypes = Arrays.stream(EventType.values()).filter(eventType -> !eventType.isDebug()).toArray(EventType[]::new);
eventService.removeEvents(task.getTenantId(), task.getEntityId(), 0L, System.currentTimeMillis(), nonDebugEventTypes);
}
@Override

2
common/dao-api/src/main/java/org/thingsboard/server/dao/event/EventService.java

@ -41,6 +41,8 @@ public interface EventService {
void removeEvents(TenantId tenantId, EntityId entityId);
void removeEvents(TenantId tenantId, EntityId entityId, Long startTime, Long endTime, EventType... types);
void removeEvents(TenantId tenantId, EntityId entityId, EventFilter eventFilter, Long startTime, Long endTime);
void cleanupEvents(long regularEventExpTs, long debugEventExpTs, boolean cleanupDb);

12
dao/src/main/java/org/thingsboard/server/dao/event/BaseEventService.java

@ -47,11 +47,6 @@ import java.util.stream.Collectors;
@Slf4j
public class BaseEventService implements EventService {
@Value("${sql.ttl.events.events_ttl:0}")
private long ttlInSec;
@Value("${sql.ttl.events.debug_events_ttl:604800}")
private long debugTtlInSec;
@Value("${event.debug.max-symbols:4096}")
private int maxDebugEventSymbols;
@ -125,7 +120,12 @@ public class BaseEventService implements EventService {
@Override
public void removeEvents(TenantId tenantId, EntityId entityId) {
removeEvents(tenantId, entityId, null, null, null);
removeEvents(tenantId, entityId, null, null);
}
@Override
public void removeEvents(TenantId tenantId, EntityId entityId, Long startTime, Long endTime, EventType... types) {
eventDao.removeEvents(tenantId.getId(), entityId.getId(), startTime, endTime, types);
}
@Override

60
dao/src/main/java/org/thingsboard/server/dao/event/EventDao.java

@ -25,80 +25,24 @@ import org.thingsboard.server.common.data.page.TimePageLink;
import java.util.List;
import java.util.UUID;
/**
* The Interface EventDao.
*/
public interface EventDao {
/**
* Save or update event object async
*
* @param event the event object
* @return saved event object future
*/
ListenableFuture<Void> saveAsync(Event event);
/**
* Find events by tenantId, entityId, eventType and pageLink.
*
* @param tenantId the tenantId
* @param entityId the entityId
* @param eventType the eventType
* @param pageLink the pageLink
* @return the event list
*/
PageData<? extends Event> findEvents(UUID tenantId, UUID entityId, EventType eventType, TimePageLink pageLink);
PageData<? extends Event> findEventByFilter(UUID tenantId, UUID entityId, EventFilter eventFilter, TimePageLink pageLink);
/**
* Find latest events by tenantId, entityId and eventType.
*
* @param tenantId the tenantId
* @param entityId the entityId
* @param eventType the eventType
* @param limit the limit
* @return the event list
*/
List<? extends Event> findLatestEvents(UUID tenantId, UUID entityId, EventType eventType, int limit);
/**
* Find latest debug IN event by tenantId, entityId.
*
* @param tenantId the tenantId
* @param entityId the entityId
* @return the latest debug IN event
*/
Event findLatestDebugRuleNodeInEvent(UUID tenantId, UUID entityId);
/**
* Executes stored procedure to cleanup old events. Uses separate ttl for debug and other events.
* @param regularEventExpTs the expiration time of the regular events
* @param debugEventExpTs the expiration time of the debug events
* @param cleanupDb
*/
void cleanupEvents(long regularEventExpTs, long debugEventExpTs, boolean cleanupDb);
/**
* Removes all events for the specified entity and time interval
*
* @param tenantId
* @param entityId
* @param startTime
* @param endTime
*/
void removeEvents(UUID tenantId, UUID entityId, Long startTime, Long endTime);
/**
*
* Removes all events for the specified entity, event filter and time interval
*
* @param tenantId
* @param entityId
* @param eventFilter
* @param startTime
* @param endTime
*/
void removeEvents(UUID tenantId, UUID entityId, Long startTime, Long endTime, EventType... types);
void removeEvents(UUID tenantId, UUID entityId, EventFilter eventFilter, Long startTime, Long endTime);
}

8
dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java

@ -173,8 +173,14 @@ public class JpaBaseEventDao implements EventDao {
@Override
public void removeEvents(UUID tenantId, UUID entityId, Long startTime, Long endTime) {
removeEvents(tenantId, entityId, startTime, endTime, EventType.values());
}
@Override
public void removeEvents(UUID tenantId, UUID entityId, Long startTime, Long endTime, EventType... types) {
log.debug("[{}][{}] Remove events [{}-{}] ", tenantId, entityId, startTime, endTime);
for (EventType eventType : EventType.values()) {
EventType[] eventTypes = (types == null || types.length == 0) ? EventType.values() : types;
for (EventType eventType : eventTypes) {
getEventRepository(eventType).removeEvents(tenantId, entityId, startTime, endTime);
}
}

2
dao/src/main/java/org/thingsboard/server/dao/sqlts/insert/sql/SqlPartitioningRepository.java

@ -54,7 +54,7 @@ public class SqlPartitioningRepository {
getJdbcTemplate().execute(partition.getQuery());
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)// executing non-transactionally, so that parent transaction is not aborted on partition save error
@Transactional(propagation = Propagation.NOT_SUPPORTED) // executing non-transactionally, so that parent transaction is not aborted on partition save error
public void createPartitionIfNotExists(String table, long entityTs, long partitionDurationMs) {
long partitionStartTs = calculatePartitionStartTime(entityTs, partitionDurationMs);
Map<Long, SqlPartition> partitions = tablesPartitions.computeIfAbsent(table, t -> new ConcurrentHashMap<>());

Loading…
Cancel
Save