Keep data order when getting chunked messages
This commit is contained in:
		
							parent
							
								
									4a1fc9a14a
								
							
						
					
					
						commit
						a86eb53038
					
				@ -289,7 +289,7 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
 | 
			
		||||
            return cachePut(ctx.getRequestId(), onError(e.getExternalId(), e.getCause()));
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            log.info("[{}] Failed to process request [{}] due to: ", ctx.getTenantId(), request, e);
 | 
			
		||||
            return cachePut(ctx.getRequestId(), VersionLoadResult.error(EntityLoadError.runtimeError(e.getMessage())));
 | 
			
		||||
            return cachePut(ctx.getRequestId(), VersionLoadResult.error(EntityLoadError.runtimeError(e)));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -433,7 +433,7 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private VersionLoadResult onError(EntityId externalId, Throwable e) {
 | 
			
		||||
        return analyze(e, externalId).orElse(VersionLoadResult.error(EntityLoadError.runtimeError(e.getMessage())));
 | 
			
		||||
        return analyze(e, externalId).orElse(VersionLoadResult.error(EntityLoadError.runtimeError(e)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Optional<VersionLoadResult> analyze(Throwable e, EntityId externalId) {
 | 
			
		||||
@ -605,7 +605,7 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
 | 
			
		||||
 | 
			
		||||
    private void processLoadError(EntitiesImportCtx ctx, Throwable e) {
 | 
			
		||||
        log.debug("[{}] Failed to load the commit: {}", ctx.getRequestId(), ctx.getVersionId(), e);
 | 
			
		||||
        cachePut(ctx.getRequestId(), VersionLoadResult.error(EntityLoadError.runtimeError(e.getMessage())));
 | 
			
		||||
        cachePut(ctx.getRequestId(), VersionLoadResult.error(EntityLoadError.runtimeError(e)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void cachePut(UUID requestId, VersionCreationResult result) {
 | 
			
		||||
 | 
			
		||||
@ -77,6 +77,7 @@ import org.thingsboard.server.service.sync.vc.data.VoidGitRequest;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
@ -101,7 +102,7 @@ public class DefaultGitVersionControlQueueService implements GitVersionControlQu
 | 
			
		||||
    private final SchedulerComponent scheduler;
 | 
			
		||||
 | 
			
		||||
    private final Map<UUID, PendingGitRequest<?>> pendingRequestMap = new HashMap<>();
 | 
			
		||||
    private final Map<UUID, Map<String, String[]>> chunkedMsgs = new ConcurrentHashMap<>();
 | 
			
		||||
    private final Map<UUID, LinkedHashMap<String, String[]>> chunkedMsgs = new ConcurrentHashMap<>();
 | 
			
		||||
 | 
			
		||||
    @Value("${queue.vc.request-timeout:60000}")
 | 
			
		||||
    private int requestTimeout;
 | 
			
		||||
@ -285,7 +286,7 @@ public class DefaultGitVersionControlQueueService implements GitVersionControlQu
 | 
			
		||||
    @SuppressWarnings("rawtypes")
 | 
			
		||||
    public ListenableFuture<EntityExportData> getEntity(TenantId tenantId, String versionId, EntityId entityId) {
 | 
			
		||||
        EntityContentGitRequest request = new EntityContentGitRequest(tenantId, versionId, entityId);
 | 
			
		||||
        chunkedMsgs.put(request.getRequestId(), new HashMap<>());
 | 
			
		||||
        chunkedMsgs.put(request.getRequestId(), new LinkedHashMap<>());
 | 
			
		||||
        registerAndSend(request, builder -> builder.setEntityContentRequest(EntityContentRequestMsg.newBuilder()
 | 
			
		||||
                        .setVersionId(versionId)
 | 
			
		||||
                        .setEntityType(entityId.getEntityType().name())
 | 
			
		||||
@ -327,7 +328,7 @@ public class DefaultGitVersionControlQueueService implements GitVersionControlQu
 | 
			
		||||
    @SuppressWarnings("rawtypes")
 | 
			
		||||
    public ListenableFuture<List<EntityExportData>> getEntities(TenantId tenantId, String versionId, EntityType entityType, int offset, int limit) {
 | 
			
		||||
        EntitiesContentGitRequest request = new EntitiesContentGitRequest(tenantId, versionId, entityType);
 | 
			
		||||
        chunkedMsgs.put(request.getRequestId(), new HashMap<>());
 | 
			
		||||
        chunkedMsgs.put(request.getRequestId(), new LinkedHashMap<>());
 | 
			
		||||
        registerAndSend(request, builder -> builder.setEntitiesContentRequest(EntitiesContentRequestMsg.newBuilder()
 | 
			
		||||
                        .setVersionId(versionId)
 | 
			
		||||
                        .setEntityType(entityType.name())
 | 
			
		||||
 | 
			
		||||
@ -18,10 +18,11 @@ package org.thingsboard.server.common.data.sync.vc;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonInclude;
 | 
			
		||||
import lombok.Builder;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.apache.commons.lang3.ClassUtils;
 | 
			
		||||
import org.apache.commons.lang3.StringUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
@Builder
 | 
			
		||||
@ -43,8 +44,12 @@ public class EntityLoadError implements Serializable {
 | 
			
		||||
        return EntityLoadError.builder().type("MISSING_REFERENCED_ENTITY").source(sourceId).target(targetId).build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static EntityLoadError runtimeError(String msg) {
 | 
			
		||||
        return EntityLoadError.builder().type("RUNTIME").message(msg).build();
 | 
			
		||||
    public static EntityLoadError runtimeError(Throwable e) {
 | 
			
		||||
        String message = e.getMessage();
 | 
			
		||||
        if (StringUtils.isEmpty(message)) {
 | 
			
		||||
            message = "unexpected error (" + ClassUtils.getShortClassName(e.getClass()) + ")";
 | 
			
		||||
        }
 | 
			
		||||
        return EntityLoadError.builder().type("RUNTIME").message(message).build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user