nautechsystems/nautilus_trader · error · anyhow::Error

Failed to determine ts_init range for {feather_path}: {e}

Error message

Failed to determine ts_init range for {feather_path}: {e}

What it means

Wrapper in convert_feather_batches_to_parquet: computing the ts_init min/max range over the record batch failed (schema/type issue in the converted Feather data), and the error is re-wrapped with the offending Feather path for diagnosis.

Source

Thrown at crates/persistence/src/backend/catalog.rs:3992

        &self,
        data_name: &str,
        feather_path: &str,
        batches: Vec<RecordBatch>,
        use_ts_event_for_ts_init: bool,
    ) -> anyhow::Result<()> {
        let Some(batch) = Self::apply_stream_conversion_transforms(
            batches,
            use_ts_event_for_ts_init,
        )
        .map_err(|e| {
            anyhow::anyhow!("Failed to apply stream conversion transforms for {feather_path}: {e}")
        })?
        else {
            return Ok(());
        };

        let (start_ts, end_ts) = Self::ts_init_range(&batch).map_err(|e| {
            anyhow::anyhow!("Failed to determine ts_init range for {feather_path}: {e}")
        })?;
        let identifier = Self::identifier_from_batch_or_path(&batch, data_name, feather_path);
        let directory = if let Some(type_name) = data_name.strip_prefix("custom/") {
            self.make_path_custom_data(type_name, identifier.as_deref())?
        } else {
            self.make_path(data_name, identifier.as_deref())?
        };
        let filename = timestamps_to_filename(UnixNanos::from(start_ts), UnixNanos::from(end_ts));
        let path = PathBuf::from(format!("{directory}/{filename}"));
        let object_path = self.to_object_path(&path.to_string_lossy())?;

        let file_exists = self.execute_async(async {
            let exists = self.object_store.head(&object_path).await.is_ok();
            Ok::<_, anyhow::Error>(exists)
        })?;

        if file_exists {
            log::info!("File {} already exists, skipping write", path.display());

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Verify the Feather file at the reported path is readable and was produced by a compatible NautilusTrader writer
  2. Check the batch schema has a valid ts_init column with the expected integer/timestamp type
  3. Re-export or re-convert the source data and retry the stream conversion
  4. Upgrade or align the persistence backend version if the batch schema is from an older data format
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at crates/persistence/src/backend/catalog.rs:3992 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/862dc8e1b0123ab3. Report an issue: GitHub.