Browse Source

return the most recent ts of default args if all are default

pull/14526/head
IrynaMatveieva 10 months ago
parent
commit
0577d66dca
  1. 2
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/ArgumentEntry.java
  2. 32
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/BaseCalculatedFieldState.java
  3. 5
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/SingleValueArgumentEntry.java
  4. 1
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/TsRollingArgumentEntry.java

2
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/ArgumentEntry.java

@ -40,8 +40,6 @@ public interface ArgumentEntry {
Object getValue();
long getLatestTs();
boolean updateEntry(ArgumentEntry entry);
boolean isEmpty();

32
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/BaseCalculatedFieldState.java

@ -37,15 +37,13 @@ public abstract class BaseCalculatedFieldState implements CalculatedFieldState {
protected Map<String, ArgumentEntry> arguments;
protected boolean sizeExceedsLimit;
protected long latestTimestamp = DEFAULT_LAST_UPDATE_TS;
public BaseCalculatedFieldState(List<String> requiredArguments) {
this.requiredArguments = requiredArguments;
this.arguments = new HashMap<>();
}
public BaseCalculatedFieldState() {
this(new ArrayList<>(), new HashMap<>(), false, DEFAULT_LAST_UPDATE_TS);
this(new ArrayList<>(), new HashMap<>(), false);
}
@Override
@ -111,12 +109,28 @@ public abstract class BaseCalculatedFieldState implements CalculatedFieldState {
protected abstract void validateNewEntry(ArgumentEntry newEntry);
public long getLatestTimestamp() {
long currentLatestTs = arguments.values().stream()
.mapToLong(ArgumentEntry::getLatestTs)
.max()
.orElse(DEFAULT_LAST_UPDATE_TS);
latestTimestamp = Math.max(currentLatestTs, latestTimestamp);
return latestTimestamp;
long latestTs = DEFAULT_LAST_UPDATE_TS;
boolean allDefault = arguments.values().stream().allMatch(entry -> {
if (entry instanceof SingleValueArgumentEntry single) {
return single.isDefaultValue();
}
return false;
});
for (ArgumentEntry entry : arguments.values()) {
if (entry instanceof SingleValueArgumentEntry single) {
if (allDefault) {
latestTs = Math.max(latestTs, single.getTs());
} else if (!single.isDefaultValue()) {
latestTs = Math.max(latestTs, single.getTs());
}
} else if (entry instanceof TsRollingArgumentEntry rolling) {
latestTs = Math.max(latestTs, rolling.getLatestTs());
}
}
return latestTs;
}
}

5
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/SingleValueArgumentEntry.java

@ -98,11 +98,6 @@ public class SingleValueArgumentEntry implements ArgumentEntry {
return isEmpty() ? null : kvEntryValue.getValue();
}
@Override
public long getLatestTs() {
return !isDefaultValue() ? ts : DEFAULT_LAST_UPDATE_TS;
}
@Override
public TbelCfArg toTbelCfArg() {
Object value = kvEntryValue.getValue();

1
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/TsRollingArgumentEntry.java

@ -85,7 +85,6 @@ public class TsRollingArgumentEntry implements ArgumentEntry {
return tsRecords;
}
@Override
public long getLatestTs() {
var lastEntry = tsRecords.lastEntry();
return (lastEntry != null) ? lastEntry.getKey() : DEFAULT_LAST_UPDATE_TS;

Loading…
Cancel
Save