diff --git a/application/src/main/java/org/thingsboard/server/service/transaction/BaseRuleChainTransactionService.java b/application/src/main/java/org/thingsboard/server/service/transaction/BaseRuleChainTransactionService.java index eb1d59aea2..1aee532c93 100644 --- a/application/src/main/java/org/thingsboard/server/service/transaction/BaseRuleChainTransactionService.java +++ b/application/src/main/java/org/thingsboard/server/service/transaction/BaseRuleChainTransactionService.java @@ -93,6 +93,7 @@ public class BaseRuleChainTransactionService implements RuleChainTransactionServ TbTransactionTask transactionTask = new TbTransactionTask(msg, onStart, onEnd, onFailure, System.currentTimeMillis() + duration); int queueSize = queue.size(); if (queueSize >= finalQueueSize) { + log.trace("Queue has no space: {}", transactionTask); executeOnFailure(transactionTask.getOnFailure(), "Queue has no space!"); } else { addMsgToQueues(queue, transactionTask); diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index 3aaf47c524..18b77c4f41 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -250,9 +250,9 @@ actors: error_persist_frequency: "${ACTORS_RULE_NODE_ERROR_FREQUENCY:3000}" transaction: # Size of queues which store messages for transaction rule nodes - queue_size: "${ACTORS_RULE_TRANSACTION_QUEUE_SIZE:20}" + queue_size: "${ACTORS_RULE_TRANSACTION_QUEUE_SIZE:15000}" # Time in milliseconds for transaction to complete - duration: "${ACTORS_RULE_TRANSACTION_DURATION:15000}" + duration: "${ACTORS_RULE_TRANSACTION_DURATION:60000}" statistics: # Enable/disable actor statistics enabled: "${ACTORS_STATISTICS_ENABLED:true}" diff --git a/rest-client/src/main/java/org/thingsboard/rest/client/utils/RestJsonConverter.java b/rest-client/src/main/java/org/thingsboard/rest/client/utils/RestJsonConverter.java index d6e7ad9e6c..65838fb5bd 100644 --- a/rest-client/src/main/java/org/thingsboard/rest/client/utils/RestJsonConverter.java +++ b/rest-client/src/main/java/org/thingsboard/rest/client/utils/RestJsonConverter.java @@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; import org.thingsboard.server.common.data.kv.BasicTsKvEntry; import org.thingsboard.server.common.data.kv.BooleanDataEntry; import org.thingsboard.server.common.data.kv.DoubleDataEntry; +import org.thingsboard.server.common.data.kv.JsonDataEntry; import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.data.kv.LongDataEntry; import org.thingsboard.server.common.data.kv.StringDataEntry; @@ -73,15 +74,28 @@ public class RestJsonConverter { if (!value.isObject()) { if (value.isBoolean()) { return new BooleanDataEntry(key, value.asBoolean()); - } else if (value.isDouble()) { - return new DoubleDataEntry(key, value.asDouble()); - } else if (value.isLong()) { - return new LongDataEntry(key, value.asLong()); - } else { + } else if (value.isNumber()) { + return parseNumericValue(key, value); + } else if (value.isTextual()) { return new StringDataEntry(key, value.asText()); + } else { + throw new RuntimeException(CAN_T_PARSE_VALUE + value); } } else { - throw new RuntimeException(CAN_T_PARSE_VALUE + value); + return new JsonDataEntry(key, value.toString()); + } + } + + private static KvEntry parseNumericValue(String key, JsonNode value) { + if (value.isFloatingPointNumber()) { + return new DoubleDataEntry(key, value.asDouble()); + } else { + try { + long longValue = Long.parseLong(value.toString()); + return new LongDataEntry(key, longValue); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Big integer values are not supported!"); + } } } }