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)
|
@AfterStartUp(order = AfterStartUp.CF_READ_CF_SERVICE)
|
||||||
public void init() {
|
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);
|
PageDataIterable<CalculatedField> cfs = new PageDataIterable<>(calculatedFieldService::findAllCalculatedFields, initFetchPackSize);
|
||||||
cfs.forEach(cf -> {
|
cfs.forEach(cf -> {
|
||||||
calculatedFields.putIfAbsent(cf.getId(), cf);
|
calculatedFields.putIfAbsent(cf.getId(), cf);
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
package org.thingsboard.server.common.data.cf.configuration;
|
package org.thingsboard.server.common.data.cf.configuration;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
import org.thingsboard.server.common.data.cf.CalculatedFieldLink;
|
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 = SimpleCalculatedFieldConfiguration.class, name = "SIMPLE"),
|
||||||
@JsonSubTypes.Type(value = ScriptCalculatedFieldConfiguration.class, name = "SCRIPT")
|
@JsonSubTypes.Type(value = ScriptCalculatedFieldConfiguration.class, name = "SCRIPT")
|
||||||
})
|
})
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public interface CalculatedFieldConfiguration {
|
public interface CalculatedFieldConfiguration {
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
|
|||||||
@ -38,6 +38,7 @@ import org.thingsboard.server.common.data.page.PageData;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -79,7 +80,6 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
|
|||||||
JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
|
JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
|
||||||
long version = row.get("version") != null ? (long) row.get("version") : 0;
|
long version = row.get("version") != null ? (long) row.get("version") : 0;
|
||||||
String debugSettings = (String) row.get("debug_settings");
|
String debugSettings = (String) row.get("debug_settings");
|
||||||
Object externalIdObj = row.get("external_id");
|
|
||||||
|
|
||||||
CalculatedField calculatedField = new CalculatedField();
|
CalculatedField calculatedField = new CalculatedField();
|
||||||
calculatedField.setId(new CalculatedFieldId(id));
|
calculatedField.setId(new CalculatedFieldId(id));
|
||||||
@ -89,12 +89,17 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
|
|||||||
calculatedField.setType(type);
|
calculatedField.setType(type);
|
||||||
calculatedField.setName(name);
|
calculatedField.setName(name);
|
||||||
calculatedField.setConfigurationVersion(configurationVersion);
|
calculatedField.setConfigurationVersion(configurationVersion);
|
||||||
|
try {
|
||||||
calculatedField.setConfiguration(JacksonUtil.treeToValue(configuration, CalculatedFieldConfiguration.class));
|
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.setVersion(version);
|
||||||
calculatedField.setDebugSettings(JacksonUtil.fromString(debugSettings, DebugSettings.class));
|
calculatedField.setDebugSettings(JacksonUtil.fromString(debugSettings, DebugSettings.class));
|
||||||
|
|
||||||
return calculatedField;
|
return calculatedField;
|
||||||
}).collect(Collectors.toList());
|
}).filter(Objects::nonNull).collect(Collectors.toList());
|
||||||
return new PageData<>(data, totalPages, totalElements, hasNext);
|
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"));
|
EntityType entityType = EntityType.valueOf((String) row.get("entity_type"));
|
||||||
UUID entityId = (UUID) row.get("entity_id");
|
UUID entityId = (UUID) row.get("entity_id");
|
||||||
UUID calculatedFieldId = (UUID) row.get("calculated_field_id");
|
UUID calculatedFieldId = (UUID) row.get("calculated_field_id");
|
||||||
JsonNode configuration = JacksonUtil.toJsonNode((String) row.get("configuration"));
|
|
||||||
|
|
||||||
CalculatedFieldLink calculatedFieldLink = new CalculatedFieldLink();
|
CalculatedFieldLink calculatedFieldLink = new CalculatedFieldLink();
|
||||||
calculatedFieldLink.setId(new CalculatedFieldLinkId(id));
|
calculatedFieldLink.setId(new CalculatedFieldLinkId(id));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user