fixed server failure when cf configuration is invalid
This commit is contained in:
		
							parent
							
								
									dfc0183c41
								
							
						
					
					
						commit
						7ba8e1366c
					
				@ -70,7 +70,6 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache {
 | 
			
		||||
 | 
			
		||||
    @AfterStartUp(order = AfterStartUp.CF_READ_CF_SERVICE)
 | 
			
		||||
    public void init() {
 | 
			
		||||
        //TODO: move to separate place to avoid circular references with the ActorSystemContext (@Lazy for tsSubService)
 | 
			
		||||
        PageDataIterable<CalculatedField> cfs = new PageDataIterable<>(calculatedFieldService::findAllCalculatedFields, initFetchPackSize);
 | 
			
		||||
        cfs.forEach(cf -> {
 | 
			
		||||
            calculatedFields.putIfAbsent(cf.getId(), cf);
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@
 | 
			
		||||
package org.thingsboard.server.common.data.cf.configuration;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonSubTypes;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.cf.CalculatedFieldLink;
 | 
			
		||||
@ -36,6 +37,7 @@ import java.util.Map;
 | 
			
		||||
        @JsonSubTypes.Type(value = SimpleCalculatedFieldConfiguration.class, name = "SIMPLE"),
 | 
			
		||||
        @JsonSubTypes.Type(value = ScriptCalculatedFieldConfiguration.class, name = "SCRIPT")
 | 
			
		||||
})
 | 
			
		||||
@JsonIgnoreProperties(ignoreUnknown = true)
 | 
			
		||||
public interface CalculatedFieldConfiguration {
 | 
			
		||||
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,7 @@ import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
@ -79,7 +80,6 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
 | 
			
		||||
                JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
 | 
			
		||||
                long version = row.get("version") != null ? (long) row.get("version") : 0;
 | 
			
		||||
                String debugSettings = (String) row.get("debug_settings");
 | 
			
		||||
                Object externalIdObj = row.get("external_id");
 | 
			
		||||
 | 
			
		||||
                CalculatedField calculatedField = new CalculatedField();
 | 
			
		||||
                calculatedField.setId(new CalculatedFieldId(id));
 | 
			
		||||
@ -89,12 +89,17 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
 | 
			
		||||
                calculatedField.setType(type);
 | 
			
		||||
                calculatedField.setName(name);
 | 
			
		||||
                calculatedField.setConfigurationVersion(configurationVersion);
 | 
			
		||||
                try {
 | 
			
		||||
                    calculatedField.setConfiguration(JacksonUtil.treeToValue(configuration, CalculatedFieldConfiguration.class));
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    log.error("Invalid configuration for CalculatedField [{}]. Skipping.", id, e);
 | 
			
		||||
                    return null;
 | 
			
		||||
                }
 | 
			
		||||
                calculatedField.setVersion(version);
 | 
			
		||||
                calculatedField.setDebugSettings(JacksonUtil.fromString(debugSettings, DebugSettings.class));
 | 
			
		||||
 | 
			
		||||
                return calculatedField;
 | 
			
		||||
            }).collect(Collectors.toList());
 | 
			
		||||
            }).filter(Objects::nonNull).collect(Collectors.toList());
 | 
			
		||||
            return new PageData<>(data, totalPages, totalElements, hasNext);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
@ -118,7 +123,6 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
 | 
			
		||||
                EntityType entityType = EntityType.valueOf((String) row.get("entity_type"));
 | 
			
		||||
                UUID entityId = (UUID) row.get("entity_id");
 | 
			
		||||
                UUID calculatedFieldId = (UUID) row.get("calculated_field_id");
 | 
			
		||||
                JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
 | 
			
		||||
 | 
			
		||||
                CalculatedFieldLink calculatedFieldLink = new CalculatedFieldLink();
 | 
			
		||||
                calculatedFieldLink.setId(new CalculatedFieldLinkId(id));
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user