{"record":{"id":"eba47583d5805cca","repo":"weaviate/weaviate","slug":"properties-file-names-no-property","errorCode":null,"errorMessage":"properties file names no property","messagePattern":"properties file names no property","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"adapters/repos/db/inverted_reindex_task_generic.go","lineNumber":2341,"sourceCode":"\t// renamed away.\n\trt := NewFileReindexTracker(shard.pathLSM(), t.strategy.MigrationDirName(), t.keyParser)\n\tif rt.HasProps() {\n\t\treturn nil\n\t}\n\treturn rt.saveProps(props)\n}\n\n// recordedProps reads the property list the tracker holds. HasProps only\n// reports a file that has content, so a list that parses to nothing means that\n// content is corrupt — answering \"no properties\" would silently retire the\n// shard's reindex instead of reporting the file.\nfunc recordedProps(rt reindexTracker) ([]string, error) {\n\tprops, err := rt.GetProps()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(props) == 0 {\n\t\treturn nil, fmt.Errorf(\"properties file names no property\")\n\t}\n\treturn props, nil\n}\n\nfunc (t *ShardReindexTaskGeneric) getPropsToReindex(shard ShardLike, rt reindexTracker) ([]string, error) {\n\tif rt.HasProps() {\n\t\treturn recordedProps(rt)\n\t}\n\tprops, save := t.findPropsToReindex(shard)\n\tif save {\n\t\tif err := rt.saveProps(props); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn props, nil\n}\n\nfunc (t *ShardReindexTaskGeneric) readPropsToReindex(rt reindexTracker) ([]string, error) {","sourceCodeStart":2323,"sourceCodeEnd":2359,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/adapters/repos/db/inverted_reindex_task_generic.go#L2323-L2359","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before: stale half-written tracker state blocks startup (props state missing)\n// after: operator removes stale migration state so props are re-recorded\n//  stop weaviate; delete the shard's reindex phase/props sentinel files;\n//  restart -> migration restarts from PREPARING and re-persists props","handlingStrategy":"validation","validationCode":"// before resuming after a crash, confirm reindex state files are complete\nprops, err := rt.GetProps()\nif err != nil || len(props) == 0 {\n\t// reset stale migration state or restore from backup before restarting\n}","typeGuard":"func hasRecordedProps(rt reindexTracker) bool {\n\tp, err := rt.GetProps()\n\treturn err == nil && len(p) > 0\n}","tryCatchPattern":"if err := resumeReindex(ctx, shard); err != nil {\n\tif strings.Contains(err.Error(), \"properties file names no property\") {\n\t\t// stale/lost tracker state: restore from backup or clear phase markers to restart migration\n\t}\n\treturn err\n}","preventionTips":["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"],"tags":["reindex-migration","state-corruption","storage"],"backgroundTag":"missing-reindex-state","analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}