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
- 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.
- If a migration was interrupted, restore the shard from a backup taken before the migration and re-run the reindex.
- Inspect the shard's tracker directory for a missing/truncated props state file and compare with other shards of the same collection.
- 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
- Take a backup before starting destructive reindex/migration operations
- Never manually delete individual state files inside shard directories
- Keep all cluster nodes on the same Weaviate version to avoid state-format mismatches
- Gracefully shut down nodes (SIGTERM, drain) so tracker state is flushed
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
- swapping bucket pointer %q <- %q: %w
- marking swapped: %w
- marking reindex tidied: %w
- there are no classes defined yet
- could not copy all data into buffer
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/eba47583d5805cca.
Report an issue: GitHub.