Repository: milvus-io/milvus
File: pkg/util/paramtable/component_param.go (Go)

Code before:
			return fmt.Sprintf("%.2f", factor)
		},
		Doc:    "Loading resource factor for estimating resource during loading.",
		Export: false,
	}
	p.TieredLoadingResourceFactor.Init(base.mgr)

	p.TieredLoadingTimeoutMs = ParamItem{
		Key:          "queryNode.segcore.tieredStorage.loadingTimeoutMs",
		Version:      "2.6.10",
		DefaultValue: "0",
		Forbidden:    true,
		Formatter: func(v string) string {
			timeout := getAsInt64(v)
			if timeout < 0 {
				return "0"
			}
			return fmt.Sprintf("%d", timeout)
		},
		Doc:    "Loading timeout in milliseconds for cache slot loading. 0 means no timeout.",
		Export: false,
	}
	p.TieredLoadingTimeoutMs.Init(base.mgr)

	p.AutoWarmupForNonPKIsolationCollection = ParamItem{
		Key:          "queryNode.segcore.tieredStorage.warmup.autoWarmupForNonPKIsolationCollection",
		Version:      "2.6.12",
		DefaultValue: "false",
		Doc:          `When enabled, forces vectorIndex, scalarField, and scalarIndex warmup to sync for collections without partition key isolation. vectorField is not affected.`,
		Forbidden:    true,
		Export:       false,
	}
	p.AutoWarmupForNonPKIsolationCollection.Init(base.mgr)

	p.EnableDisk = ParamItem{
		Key:          "queryNode.enableDisk",
		Version:      "2.2.0",
		DefaultValue: "false",
		Doc:          "enable querynode load disk index, and search on disk index",
		Export:       true,
	}
	p.EnableDisk.Init(base.mgr)

	p.KnowhereThreadPoolSize = ParamItem{
		Key:          "queryNode.segcore.knowhereThreadPoolNumRatio",
		Version:      "2.0.0",
		DefaultValue: "4",
		Formatter: func(v string) string {
			factor := getAsFloat(v)
			if factor <= 0 || !p.EnableDisk.GetAsBool() {
				factor = 1

Review comment (suggestion):
Nit: this config lives under `queryNode.segcore.*` but the decision is made in QueryCoord (`applyCollectionWarmupSetting` / `applyIndexWarmupSetting`). Technically fine since `paramtable` is a global singleton, but this is the only `QueryNodeCfg` usage in the entire `querycoordv2/` directory — all other config reads there go through `QueryCoordCfg`. Consider moving it under `queryCoord.*` for consistency, or at least add a comment noting the cross-component access.

Code after:

	p.TieredLoadingResourceFactor = ParamItem{
		Key:          "queryNode.segcore.tieredStorage.loadingResourceFactor",
		Version:      "2.6.0",
		DefaultValue: "1.0",
		Forbidden:    true,
		Formatter: func(v string) string {
			factor := getAsFloat(v)
			if factor < 1.0 {
				return "1.0"
			}
			return fmt.Sprintf("%.2f", factor)
		},
		Doc:    "Loading resource factor for estimating resource during loading.",
		Export: false,
	}
	p.TieredLoadingResourceFactor.Init(base.mgr)

	p.TieredLoadingTimeoutMs = ParamItem{
		Key:          "queryNode.segcore.tieredStorage.loadingTimeoutMs",
		Version:      "2.6.10",
		DefaultValue: "0",
		Forbidden:    true,
		Formatter: func(v string) string {
			timeout := getAsInt64(v)
			if timeout < 0 {
				return "0"
			}
			return fmt.Sprintf("%d", timeout)
		},
		Doc:    "Loading timeout in milliseconds for cache slot loading. 0 means no timeout.",
		Export: false,
	}
	p.TieredLoadingTimeoutMs.Init(base.mgr)

	p.EnableDisk = ParamItem{
		Key:          "queryNode.enableDisk",
		Version:      "2.2.0",
		DefaultValue: "false",
		Doc:          "enable querynode load disk index, and search on disk index",
		Export:       true,
	}
	p.EnableDisk.Init(base.mgr)

	p.KnowhereThreadPoolSize = ParamItem{
		Key:          "queryNode.segcore.knowhereThreadPoolNumRatio",
		Version:      "2.0.0",
		DefaultValue: "4",
		Formatter: func(v string) string {
			factor := getAsFloat(v)
			if factor <= 0 || !p.EnableDisk.GetAsBool() {