Skip to content

[Pinot 1.2.0] Realtime table segment reload fails with error "Snapshot of validDocIds is required to preload segment" #14067

@ajeydudhe

Description

@ajeydudhe

Steps to reproduce

  • Define REALTIME table schema and table config using Pinot 1.2.0
  • In the table config, make sure the upsertConfig has enableSnapshot = true and enablePreload = true as below:
"upsertConfig": {
        "mode": "FULL",
        "comparisonColumns": ["someField"],
        "partialUpsertStrategies": {},
        "deleteRecordColumn": "isDeleted",
        "deletedKeysTTL": 86400000,
        "enableSnapshot": true,
        "enablePreload": true
}
  • Load some records using Kafka and check that data is visible and all segments are GOOD.
  • Now, pause the Kafka consumption using following command:
curl --location --request POST 'http://localhost:9000/tables/myTable/pauseConsumption'
  • Make sure consumption is paused using following command:
curl --location 'http://localhost:9000/tables/myTable/pauseStatus'
  • Resume the consumption using following command:
curl --location --request POST 'http://localhost:9000/tables/myTable/resumeConsumption'
  • Now, check the segment status.
  • All the older segments are marked BAD and new consuming ones as GOOD.
  • The server logs has following error for segments failing to load:
2024-09-24 13:21:19 Caused by: java.lang.IllegalStateException: Snapshot of validDocIds is required to preload segment: myTable__0__0__20240924T0750Z, table: myTable_REALTIME

Note

  • Same POC runs properly without any errors on Pinot 1.1.0
  • Issue occurs only when using upsertConfig.enableSnapshot = true and upsertConfig.enablePreload = true

Exception

2024-09-24 13:21:19 2024/09/24 07:51:19.021 ERROR [HelixStateTransitionHandler] [HelixTaskExecutor-message_handle_thread_10] Exception while executing a state transition task myTable__0__0__20240924T0750Z
2024-09-24 13:21:19 java.lang.reflect.InvocationTargetException: null
2024-09-24 13:21:19     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
2024-09-24 13:21:19     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
2024-09-24 13:21:19     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
2024-09-24 13:21:19     at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
2024-09-24 13:21:19     at org.apache.helix.messaging.handling.HelixStateTransitionHandler.invoke(HelixStateTransitionHandler.java:350) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.helix.messaging.handling.HelixStateTransitionHandler.handleMessage(HelixStateTransitionHandler.java:278) [pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.helix.messaging.handling.HelixTask.call(HelixTask.java:97) [pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.helix.messaging.handling.HelixTask.call(HelixTask.java:49) [pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
2024-09-24 13:21:19     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
2024-09-24 13:21:19     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
2024-09-24 13:21:19     at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
2024-09-24 13:21:19 Caused by: java.lang.IllegalStateException: Snapshot of validDocIds is required to preload segment: myTable__0__0__20240924T0750Z, table: myTable_REALTIME
2024-09-24 13:21:19     at org.apache.pinot.shaded.com.google.common.base.Preconditions.checkState(Preconditions.java:838) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.segment.local.upsert.BasePartitionUpsertMetadataManager.doPreloadSegment(BasePartitionUpsertMetadataManager.java:513) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.segment.local.upsert.BasePartitionUpsertMetadataManager.preloadSegment(BasePartitionUpsertMetadataManager.java:498) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.core.data.manager.realtime.RealtimeTableDataManager.handleUpsert(RealtimeTableDataManager.java:585) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.core.data.manager.realtime.RealtimeTableDataManager.addSegment(RealtimeTableDataManager.java:541) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.core.data.manager.realtime.RealtimeTableDataManager.downloadAndReplaceConsumingSegment(RealtimeTableDataManager.java:628) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.core.data.manager.realtime.RealtimeSegmentDataManager.downloadSegmentAndReplace(RealtimeSegmentDataManager.java:1351) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.core.data.manager.realtime.RealtimeSegmentDataManager.goOnlineFromConsuming(RealtimeSegmentDataManager.java:1290) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.core.data.manager.realtime.RealtimeTableDataManager.doAddOnlineSegment(RealtimeTableDataManager.java:421) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.core.data.manager.BaseTableDataManager.addOnlineSegment(BaseTableDataManager.java:313) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.server.starter.helix.HelixInstanceDataManager.addOnlineSegment(HelixInstanceDataManager.java:275) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     at org.apache.pinot.server.starter.helix.SegmentOnlineOfflineStateModelFactory$SegmentOnlineOfflineStateModel.onBecomeOnlineFromConsuming(SegmentOnlineOfflineStateModelFactory.java:88) ~[pinot-all-1.2.0-jar-with-dependencies.jar:1.2.0-cc33ac502a02e2fe830fe21e556234ee99351a7a]
2024-09-24 13:21:19     ... 12 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is not working as expectedupsertRelated to upsert functionality

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions