weaviate/weaviate · error

properties file names no property

Error message

properties file names no property

What it means

recordedProps() reads the list of property names persisted by the reindex tracker and refuses to continue when the stored list is empty. An empty recorded property list means the tracker's props state was never written or was lost, so Weaviate cannot know which inverted-index buckets to load/swap, and proceeding could silently skip properties. It is a defensive guard against resuming a reindex migration with incomplete state.

Source

Thrown at adapters/repos/db/inverted_reindex_task_generic.go:2341

	// renamed away.
	rt := NewFileReindexTracker(shard.pathLSM(), t.strategy.MigrationDirName(), t.keyParser)
	if rt.HasProps() {
		return nil
	}
	return rt.saveProps(props)
}

// recordedProps reads the property list the tracker holds. HasProps only
// reports a file that has content, so a list that parses to nothing means that
// content is corrupt — answering "no properties" would silently retire the
// shard's reindex instead of reporting the file.
func recordedProps(rt reindexTracker) ([]string, error) {
	props, err := rt.GetProps()
	if err != nil {
		return nil, err
	}
	if len(props) == 0 {
		return nil, fmt.Errorf("properties file names no property")
	}
	return props, nil
}

func (t *ShardReindexTaskGeneric) getPropsToReindex(shard ShardLike, rt reindexTracker) ([]string, error) {
	if rt.HasProps() {
		return recordedProps(rt)
	}
	props, save := t.findPropsToReindex(shard)
	if save {
		if err := rt.saveProps(props); err != nil {
			return nil, err
		}
	}
	return props, nil
}

func (t *ShardReindexTaskGeneric) readPropsToReindex(rt reindexTracker) ([]string, error) {

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. If no migration is actually in progress, clear the stale reindex phase/tracker state for the shard so the migration restarts and re-records props.
  2. If a migration was interrupted, restore the shard from a backup taken before the migration and re-run the reindex.
  3. Inspect the shard's tracker directory for a missing/truncated props state file and compare with other shards of the same collection.
  4. Ensure all cluster nodes run the same Weaviate version so state formats are compatible.

Example fix

// before: stale half-written tracker state blocks startup (props state missing)
// after: operator removes stale migration state so props are re-recorded
//  stop weaviate; delete the shard's reindex phase/props sentinel files;
//  restart -> migration restarts from PREPARING and re-persists props
Defensive patterns

Strategy: validation

Validate before calling

// before resuming after a crash, confirm reindex state files are complete
props, err := rt.GetProps()
if err != nil || len(props) == 0 {
	// reset stale migration state or restore from backup before restarting
}

Type guard

func hasRecordedProps(rt reindexTracker) bool {
	p, err := rt.GetProps()
	return err == nil && len(p) > 0
}

Try / catch

if err := resumeReindex(ctx, shard); err != nil {
	if strings.Contains(err.Error(), "properties file names no property") {
		// stale/lost tracker state: restore from backup or clear phase markers to restart migration
	}
	return err
}

Prevention

When it happens

Trigger: readPropsToReindex or getPropsToReindex (via rt.HasProps()) resumes an in-progress reindex migration, e.g. after a node restart mid-migration, and rt.GetProps() returns an empty slice - the props state was never flushed before a crash, was deleted, or was written by an older version with a different state layout.

Common situations: Upgrading a node that crashed during a reindex; restoring a partial backup that contained phase markers but not the props state; manual cleanup of shard directories; version mismatch in tracker state format.

Related errors


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/eba47583d5805cca. Report an issue: GitHub.