chore: clarify current history path naming
This commit is contained in:
@@ -10,10 +10,10 @@
|
||||
|
||||
`vehicle-history-app` 的生产高吞吐模板是 TDengine-only:
|
||||
|
||||
- 不暴露 DuckDB/EventFileStore 启动变量,避免文件型明细库进入实时消费热路径。
|
||||
- 不暴露 DuckDB 或文件型明细库启动变量,避免本地文件索引进入实时消费热路径。
|
||||
- `TDENGINE_TELEMETRY_FIELDS_ENABLED=false`:默认只写 `raw_frames` 和协议位置表,避免逐字段写放大。
|
||||
- 通用 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
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ import static org.mockito.Mockito.mock;
|
||||
class VehicleAnalyticsAppCompositionTest {
|
||||
|
||||
@Test
|
||||
void createsStatsBeansWithoutProtocolListenerOrEventFileStore() {
|
||||
void createsStatsBeansWithoutProtocolListenerOrFileHistoryStore() {
|
||||
new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(
|
||||
KafkaSinkAutoConfiguration.class,
|
||||
|
||||
@@ -101,7 +101,9 @@ class PortainerComposeResourceLimitsTest {
|
||||
.doesNotContain("__SHARED_ARCHIVE_PATH__");
|
||||
assertThat(readme)
|
||||
.doesNotContain("三个服务必须使用同一个 `SINK_ARCHIVE_PATH`")
|
||||
.doesNotContain("history 服务按同一个 archive root 读取原始帧");
|
||||
.doesNotContain("history 服务按同一个 archive root 读取原始帧")
|
||||
.doesNotContain("EventFileStore")
|
||||
.doesNotContain("/api/event-history/records");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -137,7 +139,7 @@ class PortainerComposeResourceLimitsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void splitRunbookUsesTdengineHistoryVerificationInsteadOfEventFileStore() throws IOException {
|
||||
void splitRunbookUsesTdengineHistoryVerificationInsteadOfLegacyRecordApi() throws IOException {
|
||||
String splitRunbook = Files.readString(repositoryRoot()
|
||||
.resolve("docs/operations/gb32960-service-split-runbook.md"));
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ class VehicleHistoryAppCompositionTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void createsTdengineHistoryStorageAndQueryBeansWithoutGb32960TcpServerEventFileStoreOrLocalArchiveSink() {
|
||||
void createsTdengineHistoryStorageAndQueryBeansWithoutGb32960TcpServerOrLocalArchiveSink() {
|
||||
new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(
|
||||
TdengineHistoryAutoConfiguration.class,
|
||||
@@ -118,7 +118,7 @@ class VehicleHistoryAppCompositionTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void createsHistoryIngestorWithoutEventFileStoreForTdengineOnlyRuntime() {
|
||||
void createsHistoryIngestorForTdengineOnlyRuntime() {
|
||||
new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(EventHistoryAutoConfiguration.class))
|
||||
.withUserConfiguration(VehicleHistoryKafkaConsumerConfiguration.class)
|
||||
|
||||
@@ -33,7 +33,7 @@ class DisruptorEventBusAwaitTest {
|
||||
|
||||
@Test
|
||||
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))) {
|
||||
assertThatThrownBy(() -> bus.publishAndAwait(event(), "kafka").join())
|
||||
|
||||
@@ -31,9 +31,9 @@ class DispatcherDurableAckBoundaryTest {
|
||||
|
||||
@Test
|
||||
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"));
|
||||
|
||||
assertThatThrownBy(() -> future.toCompletableFuture().join())
|
||||
|
||||
@@ -105,7 +105,7 @@ class EventHistoryEnvelopeIngestorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void tryIngestCanWriteTdengineFactsWithoutEventFileStore() {
|
||||
void tryIngestCanWriteTdengineFactsDirectly() {
|
||||
CapturingTdengineWriter tdengineWriter = new CapturingTdengineWriter();
|
||||
EventHistoryEnvelopeIngestor ingestor = new EventHistoryEnvelopeIngestor(tdengineWriter);
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ class Gb32960DecodedFrameServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void snapshotsCanUseTdengineRawFramesWhenEventFileStoreIsDisabled() throws Exception {
|
||||
void snapshotsUseTdengineRawFrames() throws Exception {
|
||||
String vin = "LNVFC000000000001";
|
||||
String key = "2026/06/22/GB32960/" + vin + "/tdengine-raw.bin";
|
||||
String uri = "archive://" + key;
|
||||
|
||||
Reference in New Issue
Block a user