microsoft/FASTER · warning
WARNING: Ignoring invalid *index* field
Error message
WARNING: Ignoring invalid *index* field '%s'
What it means
The cold index Config constructor parses an [index] TOML table and warns on any key not in its whitelist (table_size, in_mem_size_mb, mutable_fraction). Unknown keys are ignored, meaning the requested cold-index setting is not applied.
Solutions
- Use only these keys for the cold index [index] section: table_size, in_mem_size_mb, mutable_fraction
- Split cold-index and mem-index settings into separate sections if they need different fields
- Remove or rename the offending key
Example fix
// before [index] table_size = 4096 mutable_fraction = 0.5 // after (mem index only accepts table_size; move others appropriately) [index] table_size = 4096
Defensive patterns
Strategy: validation
Validate before calling
static const std::set<std::string> valid = {"table_size","in_mem_size_mb","mutable_fraction"};
for (const auto& [k, v] : indexTable)
if (!valid.count(k)) throw std::invalid_argument("invalid cold index field: " + k); Prevention
- Separate cold-index and mem-index config sections
- Check field support per index type before reuse
- Add a config unit test parsing each section
When it happens
Trigger: Constructing a cold index Config from a TOML table containing keys other than table_size/in_mem_size_mb/mutable_fraction, e.g. passing a mem-index-style config with mutable_fraction to the cold index or vice versa.
Common situations: Sharing one [index] section between cold and memory index configs, version drift in index options, typos like 'tableSize'.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- WARNING: Ignoring invalid *hlog* field
- WARNING: Ignoring invalid *hlog-compaction* field
- warning: ignoring invalid *read-cache* field
- WARNING: Ignoring invalid top-level field
- WARNING: Ignoring invalid *index* field
AI-assisted analysis of microsoft/FASTER@321d872eab (2026-09-15).
Data as JSON: /api/errors/920d5233f75d009a.
Report an issue: GitHub.
Appendix: source
Thrown at cc/src/index/cold_index.h:104
struct Config {
Config(uint64_t table_size_, uint64_t in_mem_size_, double mutable_fraction_)
: table_size{ table_size_ }
, in_mem_size{ in_mem_size_ }
, mutable_fraction{ mutable_fraction_ } {
}
#ifdef TOML_CONFIG
explicit Config(const toml::value& table) {
table_size = toml::find<uint64_t>(table, "table_size");
in_mem_size = toml::find<uint64_t>(table, "in_mem_size_mb") * (1 << 20);
mutable_fraction = toml::find<double>(table, "mutable_fraction");
// Warn if unexpected fields are found
const std::vector<std::string> VALID_INDEX_FIELDS = { "table_size", "in_mem_size_mb", "mutable_fraction" };
for (auto& it : toml::get<toml::table>(table)) {
if (std::find(VALID_INDEX_FIELDS.begin(), VALID_INDEX_FIELDS.end(), it.first) == VALID_INDEX_FIELDS.end()) {
fprintf(stderr, "WARNING: Ignoring invalid *index* field '%s'\n", it.first.c_str());
}
}
}
#endif
uint64_t table_size; // Size of the hash index table
uint64_t in_mem_size; // In-memory size of the hlog
double mutable_fraction; // Hlog mutable region fraction
};
void Initialize(const Config& config) {
if(!Utility::IsPowerOfTwo(config.table_size)) {
throw std::invalid_argument{ "Index size is not a power of 2" };
}
if(config.table_size > INT32_MAX) {
throw std::invalid_argument{ "Cannot allocate such a large hash table" };
}
this->resize_info.version = 0;View on GitHub (pinned to 321d872eab)