fix: prevent tdengine raw frame overwrite
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
lingniu
2026-06-29 18:41:58 +08:00
parent 5c1c61f29b
commit 8804c01d99
9 changed files with 422 additions and 6 deletions

View File

@@ -30,7 +30,7 @@ public final class TdengineEnvelopeRows {
metadata.putAll(envelope.getMetadataMap());
metadata.putAll(raw.getMetadataMap());
return Optional.of(new TdengineRawFrameRow(
instant(envelope.getEventTimeMs()),
rawFrameTs(envelope, metadata),
raw.getFrameId(),
instant(envelope.getIngestTimeMs()),
raw.getMessageId(),
@@ -142,6 +142,24 @@ public final class TdengineEnvelopeRows {
return Instant.ofEpochMilli(epochMillis);
}
private static Instant rawFrameTs(VehicleEnvelope envelope, Map<String, String> metadata) {
String rawArchiveEventId = firstNonBlank(metadata.get("rawArchiveEventId"), envelope.getEventId());
if (rawArchiveEventId == null || rawArchiveEventId.isBlank()) {
return instant(envelope.getEventTimeMs());
}
try {
long sequenceId = Long.parseLong(rawArchiveEventId);
long baseMillis = sequenceId / 1000L;
long sameMillisecondOffset = sequenceId % 1000L;
if (Math.abs(baseMillis - envelope.getEventTimeMs()) > 60_000L) {
return instant(envelope.getEventTimeMs());
}
return Instant.ofEpochMilli(baseMillis + sameMillisecondOffset);
} catch (NumberFormatException ignored) {
return instant(envelope.getEventTimeMs());
}
}
private static String protocol(VehicleEnvelope envelope) {
return firstNonBlank(envelope.getSource(), "UNKNOWN");
}