chore: clarify current history path naming
This commit is contained in:
@@ -10,10 +10,10 @@
|
|||||||
|
|
||||||
`vehicle-history-app` 的生产高吞吐模板是 TDengine-only:
|
`vehicle-history-app` 的生产高吞吐模板是 TDengine-only:
|
||||||
|
|
||||||
- 不暴露 DuckDB/EventFileStore 启动变量,避免文件型明细库进入实时消费热路径。
|
- 不暴露 DuckDB 或文件型明细库启动变量,避免本地文件索引进入实时消费热路径。
|
||||||
- `TDENGINE_TELEMETRY_FIELDS_ENABLED=false`:默认只写 `raw_frames` 和协议位置表,避免逐字段写放大。
|
- `TDENGINE_TELEMETRY_FIELDS_ENABLED=false`:默认只写 `raw_frames` 和协议位置表,避免逐字段写放大。
|
||||||
- 通用 RAW 查询默认直接返回 TDengine `raw_frames` 中的 `parsedJson`/`parsedFields`;后续解析器新增字段后,优先通过 replay 或专用解析任务补写 TDengine,而不是让 history 服务依赖本地 archive 挂载。
|
- 通用 RAW 查询默认直接返回 TDengine `raw_frames` 中的 `parsedJson`/`parsedFields`;后续解析器新增字段后,优先通过 replay 或专用解析任务补写 TDengine,而不是让 history 服务依赖本地 archive 挂载。
|
||||||
- 如果需要兼容旧 `/api/event-history/records` 低层记录接口或逐字段趋势宽表,可以显式打开对应开关;开启后要重新压测 Kafka lag 和 TDengine 写入吞吐。
|
- 如果需要逐字段趋势宽表,可以显式打开 `TDENGINE_TELEMETRY_FIELDS_ENABLED`;开启后要重新压测 Kafka lag 和 TDengine 写入吞吐。
|
||||||
|
|
||||||
## 生成 plist
|
## 生成 plist
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import static org.mockito.Mockito.mock;
|
|||||||
class VehicleAnalyticsAppCompositionTest {
|
class VehicleAnalyticsAppCompositionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void createsStatsBeansWithoutProtocolListenerOrEventFileStore() {
|
void createsStatsBeansWithoutProtocolListenerOrFileHistoryStore() {
|
||||||
new ApplicationContextRunner()
|
new ApplicationContextRunner()
|
||||||
.withConfiguration(AutoConfigurations.of(
|
.withConfiguration(AutoConfigurations.of(
|
||||||
KafkaSinkAutoConfiguration.class,
|
KafkaSinkAutoConfiguration.class,
|
||||||
|
|||||||
@@ -101,7 +101,9 @@ class PortainerComposeResourceLimitsTest {
|
|||||||
.doesNotContain("__SHARED_ARCHIVE_PATH__");
|
.doesNotContain("__SHARED_ARCHIVE_PATH__");
|
||||||
assertThat(readme)
|
assertThat(readme)
|
||||||
.doesNotContain("三个服务必须使用同一个 `SINK_ARCHIVE_PATH`")
|
.doesNotContain("三个服务必须使用同一个 `SINK_ARCHIVE_PATH`")
|
||||||
.doesNotContain("history 服务按同一个 archive root 读取原始帧");
|
.doesNotContain("history 服务按同一个 archive root 读取原始帧")
|
||||||
|
.doesNotContain("EventFileStore")
|
||||||
|
.doesNotContain("/api/event-history/records");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -137,7 +139,7 @@ class PortainerComposeResourceLimitsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void splitRunbookUsesTdengineHistoryVerificationInsteadOfEventFileStore() throws IOException {
|
void splitRunbookUsesTdengineHistoryVerificationInsteadOfLegacyRecordApi() throws IOException {
|
||||||
String splitRunbook = Files.readString(repositoryRoot()
|
String splitRunbook = Files.readString(repositoryRoot()
|
||||||
.resolve("docs/operations/gb32960-service-split-runbook.md"));
|
.resolve("docs/operations/gb32960-service-split-runbook.md"));
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class VehicleHistoryAppCompositionTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void createsTdengineHistoryStorageAndQueryBeansWithoutGb32960TcpServerEventFileStoreOrLocalArchiveSink() {
|
void createsTdengineHistoryStorageAndQueryBeansWithoutGb32960TcpServerOrLocalArchiveSink() {
|
||||||
new ApplicationContextRunner()
|
new ApplicationContextRunner()
|
||||||
.withConfiguration(AutoConfigurations.of(
|
.withConfiguration(AutoConfigurations.of(
|
||||||
TdengineHistoryAutoConfiguration.class,
|
TdengineHistoryAutoConfiguration.class,
|
||||||
@@ -118,7 +118,7 @@ class VehicleHistoryAppCompositionTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void createsHistoryIngestorWithoutEventFileStoreForTdengineOnlyRuntime() {
|
void createsHistoryIngestorForTdengineOnlyRuntime() {
|
||||||
new ApplicationContextRunner()
|
new ApplicationContextRunner()
|
||||||
.withConfiguration(AutoConfigurations.of(EventHistoryAutoConfiguration.class))
|
.withConfiguration(AutoConfigurations.of(EventHistoryAutoConfiguration.class))
|
||||||
.withUserConfiguration(VehicleHistoryKafkaConsumerConfiguration.class)
|
.withUserConfiguration(VehicleHistoryKafkaConsumerConfiguration.class)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class DisruptorEventBusAwaitTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void publishAndAwaitDoesNotInvokeOptionalSinksWhenRequiredSinkIsAbsent() throws Exception {
|
void publishAndAwaitDoesNotInvokeOptionalSinksWhenRequiredSinkIsAbsent() throws Exception {
|
||||||
CapturingSink optionalSink = new CapturingSink("event-file-store");
|
CapturingSink optionalSink = new CapturingSink("raw-archive");
|
||||||
|
|
||||||
try (DisruptorEventBus bus = new DisruptorEventBus(1024, "blocking", List.of(optionalSink))) {
|
try (DisruptorEventBus bus = new DisruptorEventBus(1024, "blocking", List.of(optionalSink))) {
|
||||||
assertThatThrownBy(() -> bus.publishAndAwait(event(), "kafka").join())
|
assertThatThrownBy(() -> bus.publishAndAwait(event(), "kafka").join())
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ class DispatcherDurableAckBoundaryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void dispatchAndAwaitFailsWhenNoKafkaSinkAcceptsEvent() throws Exception {
|
void dispatchAndAwaitFailsWhenNoKafkaSinkAcceptsEvent() throws Exception {
|
||||||
EventSink fileSink = new NamedSink("event-file-store", true);
|
EventSink rawArchiveSink = new NamedSink("raw-archive", true);
|
||||||
|
|
||||||
try (Harness harness = new Harness(registryWithHeartbeatHandler(), List.of(fileSink), List.of())) {
|
try (Harness harness = new Harness(registryWithHeartbeatHandler(), List.of(rawArchiveSink), List.of())) {
|
||||||
CompletionStage<Void> future = harness.dispatcher.dispatchAndAwait(frame(0x07, "payload"));
|
CompletionStage<Void> future = harness.dispatcher.dispatchAndAwait(frame(0x07, "payload"));
|
||||||
|
|
||||||
assertThatThrownBy(() -> future.toCompletableFuture().join())
|
assertThatThrownBy(() -> future.toCompletableFuture().join())
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ class EventHistoryEnvelopeIngestorTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void tryIngestCanWriteTdengineFactsWithoutEventFileStore() {
|
void tryIngestCanWriteTdengineFactsDirectly() {
|
||||||
CapturingTdengineWriter tdengineWriter = new CapturingTdengineWriter();
|
CapturingTdengineWriter tdengineWriter = new CapturingTdengineWriter();
|
||||||
EventHistoryEnvelopeIngestor ingestor = new EventHistoryEnvelopeIngestor(tdengineWriter);
|
EventHistoryEnvelopeIngestor ingestor = new EventHistoryEnvelopeIngestor(tdengineWriter);
|
||||||
|
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ class Gb32960DecodedFrameServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void snapshotsCanUseTdengineRawFramesWhenEventFileStoreIsDisabled() throws Exception {
|
void snapshotsUseTdengineRawFrames() throws Exception {
|
||||||
String vin = "LNVFC000000000001";
|
String vin = "LNVFC000000000001";
|
||||||
String key = "2026/06/22/GB32960/" + vin + "/tdengine-raw.bin";
|
String key = "2026/06/22/GB32960/" + vin + "/tdengine-raw.bin";
|
||||||
String uri = "archive://" + key;
|
String uri = "archive://" + key;
|
||||||
|
|||||||
Reference in New Issue
Block a user