Added sort by ID for edge event to properly fetch events by page in case of repeated createdTime
This commit is contained in:
		
							parent
							
								
									6b9bdba92f
								
							
						
					
					
						commit
						5cbc78fbf4
					
				@ -15,25 +15,13 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
package org.thingsboard.server.service.edge.rpc.fetch;
 | 
					package org.thingsboard.server.service.edge.rpc.fetch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
					 | 
				
			||||||
import lombok.extern.slf4j.Slf4j;
 | 
					import lombok.extern.slf4j.Slf4j;
 | 
				
			||||||
import org.thingsboard.server.common.data.BaseData;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
					import org.thingsboard.server.common.data.edge.Edge;
 | 
				
			||||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
 | 
					import org.thingsboard.server.common.data.edge.EdgeEvent;
 | 
				
			||||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.EventId;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.HasId;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.HasUUID;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.IdBased;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.RuleChainId;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
					import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.UUIDBased;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.page.PageData;
 | 
					import org.thingsboard.server.common.data.page.PageData;
 | 
				
			||||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
					import org.thingsboard.server.common.data.page.PageLink;
 | 
				
			||||||
import org.thingsboard.server.common.data.rule.RuleChain;
 | 
					import org.thingsboard.server.common.data.page.SortOrder;
 | 
				
			||||||
import org.thingsboard.server.service.edge.rpc.EdgeEventUtils;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@ -43,7 +31,7 @@ public abstract class BasePageableEdgeEventFetcher<T> implements EdgeEventFetche
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public PageLink getPageLink(int pageSize) {
 | 
					    public PageLink getPageLink(int pageSize) {
 | 
				
			||||||
        return new PageLink(pageSize);
 | 
					        return new PageLink(pageSize, 0, null, new SortOrder("createdTime", SortOrder.Direction.ASC));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
				
			|||||||
@ -16,29 +16,28 @@
 | 
				
			|||||||
package org.thingsboard.server.dao.sql.edge;
 | 
					package org.thingsboard.server.dao.sql.edge;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.datastax.oss.driver.api.core.uuid.Uuids;
 | 
					import com.datastax.oss.driver.api.core.uuid.Uuids;
 | 
				
			||||||
import com.google.common.util.concurrent.ListenableFuture;
 | 
					 | 
				
			||||||
import lombok.extern.slf4j.Slf4j;
 | 
					import lombok.extern.slf4j.Slf4j;
 | 
				
			||||||
import org.apache.commons.lang3.StringUtils;
 | 
					import org.apache.commons.lang3.StringUtils;
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.data.repository.CrudRepository;
 | 
					import org.springframework.data.repository.CrudRepository;
 | 
				
			||||||
import org.springframework.stereotype.Component;
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
 | 
					import org.thingsboard.server.common.data.edge.EdgeEvent;
 | 
				
			||||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.id.EdgeEventId;
 | 
					import org.thingsboard.server.common.data.id.EdgeEventId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.EdgeId;
 | 
					import org.thingsboard.server.common.data.id.EdgeId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.EventId;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.page.PageData;
 | 
					import org.thingsboard.server.common.data.page.PageData;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.page.SortOrder;
 | 
				
			||||||
import org.thingsboard.server.common.data.page.TimePageLink;
 | 
					import org.thingsboard.server.common.data.page.TimePageLink;
 | 
				
			||||||
import org.thingsboard.server.dao.DaoUtil;
 | 
					import org.thingsboard.server.dao.DaoUtil;
 | 
				
			||||||
import org.thingsboard.server.dao.edge.EdgeEventDao;
 | 
					import org.thingsboard.server.dao.edge.EdgeEventDao;
 | 
				
			||||||
import org.thingsboard.server.dao.model.sql.EdgeEventEntity;
 | 
					import org.thingsboard.server.dao.model.sql.EdgeEventEntity;
 | 
				
			||||||
import org.thingsboard.server.dao.model.sql.EventEntity;
 | 
					 | 
				
			||||||
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
 | 
					import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.sql.Connection;
 | 
					import java.sql.Connection;
 | 
				
			||||||
import java.sql.PreparedStatement;
 | 
					import java.sql.PreparedStatement;
 | 
				
			||||||
import java.sql.ResultSet;
 | 
					import java.sql.ResultSet;
 | 
				
			||||||
import java.sql.SQLException;
 | 
					import java.sql.SQLException;
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Objects;
 | 
					import java.util.Objects;
 | 
				
			||||||
import java.util.Optional;
 | 
					import java.util.Optional;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
@ -100,6 +99,11 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao<EdgeEventEntit
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public PageData<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) {
 | 
					    public PageData<EdgeEvent> findEdgeEvents(UUID tenantId, EdgeId edgeId, TimePageLink pageLink, boolean withTsUpdate) {
 | 
				
			||||||
 | 
					        List<SortOrder> sortOrders = new ArrayList<>();
 | 
				
			||||||
 | 
					        sortOrders.add(new SortOrder("id", SortOrder.Direction.ASC));
 | 
				
			||||||
 | 
					        if (pageLink.getSortOrder() != null) {
 | 
				
			||||||
 | 
					            sortOrders.add(pageLink.getSortOrder());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        final Lock readWriteLock = readWriteLocks.computeIfAbsent(edgeId, id -> new ReentrantLock());
 | 
					        final Lock readWriteLock = readWriteLocks.computeIfAbsent(edgeId, id -> new ReentrantLock());
 | 
				
			||||||
        readWriteLock.lock();
 | 
					        readWriteLock.lock();
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
@ -112,7 +116,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao<EdgeEventEntit
 | 
				
			|||||||
                                        Objects.toString(pageLink.getTextSearch(), ""),
 | 
					                                        Objects.toString(pageLink.getTextSearch(), ""),
 | 
				
			||||||
                                        pageLink.getStartTime(),
 | 
					                                        pageLink.getStartTime(),
 | 
				
			||||||
                                        pageLink.getEndTime(),
 | 
					                                        pageLink.getEndTime(),
 | 
				
			||||||
                                        DaoUtil.toPageable(pageLink)));
 | 
					                                        DaoUtil.toPageable(pageLink, sortOrders)));
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                return DaoUtil.toPageData(
 | 
					                return DaoUtil.toPageData(
 | 
				
			||||||
                        edgeEventRepository
 | 
					                        edgeEventRepository
 | 
				
			||||||
@ -122,7 +126,7 @@ public class JpaBaseEdgeEventDao extends JpaAbstractSearchTextDao<EdgeEventEntit
 | 
				
			|||||||
                                        Objects.toString(pageLink.getTextSearch(), ""),
 | 
					                                        Objects.toString(pageLink.getTextSearch(), ""),
 | 
				
			||||||
                                        pageLink.getStartTime(),
 | 
					                                        pageLink.getStartTime(),
 | 
				
			||||||
                                        pageLink.getEndTime(),
 | 
					                                        pageLink.getEndTime(),
 | 
				
			||||||
                                        DaoUtil.toPageable(pageLink)));
 | 
					                                        DaoUtil.toPageable(pageLink, sortOrders)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } finally {
 | 
					        } finally {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user