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(); Object getValue();
long getLatestTs();
boolean updateEntry(ArgumentEntry entry); boolean updateEntry(ArgumentEntry entry);
boolean isEmpty(); 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 Map<String, ArgumentEntry> arguments;
protected boolean sizeExceedsLimit; protected boolean sizeExceedsLimit;
protected long latestTimestamp = DEFAULT_LAST_UPDATE_TS;
public BaseCalculatedFieldState(List<String> requiredArguments) { public BaseCalculatedFieldState(List<String> requiredArguments) {
this.requiredArguments = requiredArguments; this.requiredArguments = requiredArguments;
this.arguments = new HashMap<>(); this.arguments = new HashMap<>();
} }
public BaseCalculatedFieldState() { public BaseCalculatedFieldState() {
this(new ArrayList<>(), new HashMap<>(), false, DEFAULT_LAST_UPDATE_TS); this(new ArrayList<>(), new HashMap<>(), false);
} }
@Override @Override
@ -111,12 +109,28 @@ public abstract class BaseCalculatedFieldState implements CalculatedFieldState {
protected abstract void validateNewEntry(ArgumentEntry newEntry); protected abstract void validateNewEntry(ArgumentEntry newEntry);
public long getLatestTimestamp() { public long getLatestTimestamp() {
long currentLatestTs = arguments.values().stream() long latestTs = DEFAULT_LAST_UPDATE_TS;
.mapToLong(ArgumentEntry::getLatestTs)
.max() boolean allDefault = arguments.values().stream().allMatch(entry -> {
.orElse(DEFAULT_LAST_UPDATE_TS); if (entry instanceof SingleValueArgumentEntry single) {
latestTimestamp = Math.max(currentLatestTs, latestTimestamp); return single.isDefaultValue();
return latestTimestamp; }
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(); return isEmpty() ? null : kvEntryValue.getValue();
} }
@Override
public long getLatestTs() {
return !isDefaultValue() ? ts : DEFAULT_LAST_UPDATE_TS;
}
@Override @Override
public TbelCfArg toTbelCfArg() { public TbelCfArg toTbelCfArg() {
Object value = kvEntryValue.getValue(); 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; return tsRecords;
} }
@Override
public long getLatestTs() { public long getLatestTs() {
var lastEntry = tsRecords.lastEntry(); var lastEntry = tsRecords.lastEntry();
return (lastEntry != null) ? lastEntry.getKey() : DEFAULT_LAST_UPDATE_TS; return (lastEntry != null) ? lastEntry.getKey() : DEFAULT_LAST_UPDATE_TS;

Loading…
Cancel
Save