@@ -133,4 +133,139 @@ public class VmGlobalConfig {
133133 @ GlobalConfigValidation (validValues = {"None" , "AuthenticAMD" })
134134 @ BindResourceConfig (value = {VmInstanceVO .class })
135135 public static GlobalConfig VM_CPUID_VENDOR = new GlobalConfig (CATEGORY , "vm.cpuid.vendor" );
136+
137+ @ GlobalConfigValidation (numberGreaterThan = 1 )
138+ public static GlobalConfig GC_INTERVAL = new GlobalConfig (CATEGORY , "deletion.gcInterval" );
139+
140+ @ GlobalConfigValidation (validValues = {"true" , "false" })
141+ public static GlobalConfig VM_METADATA = new GlobalConfig (CATEGORY , "vm.metadata" );
142+
143+ @ GlobalConfigDef (defaultValue = "5" , type = Integer .class ,
144+ description = "Max concurrent metadata writes per primary storage per MN" )
145+ @ GlobalConfigValidation (numberGreaterThan = 0 )
146+ public static GlobalConfig VM_METADATA_PS_MAX_CONCURRENT = new GlobalConfig (CATEGORY , "vm.metadata.ps.maxConcurrent" );
147+
148+ @ GlobalConfigDef (defaultValue = "10" , type = Integer .class ,
149+ description = "Max concurrent VM metadata updates globally per MN" )
150+ @ GlobalConfigValidation (numberGreaterThan = 0 )
151+ public static GlobalConfig VM_METADATA_GLOBAL_MAX_CONCURRENT = new GlobalConfig (CATEGORY , "vm.metadata.global.maxConcurrent" );
152+
153+ @ GlobalConfigDef (defaultValue = "10" , type = Integer .class ,
154+ description = "Initial GC delay in seconds after API success" )
155+ @ GlobalConfigValidation (numberGreaterThan = 0 )
156+ public static GlobalConfig VM_METADATA_GC_INITIAL_DELAY_SEC = new GlobalConfig (CATEGORY , "vm.metadata.gc.initialDelaySec" );
157+
158+ @ GlobalConfigDef (defaultValue = "5" , type = Integer .class ,
159+ description = "Max retry count before giving up metadata flush" )
160+ @ GlobalConfigValidation (numberGreaterThan = 0 )
161+ public static GlobalConfig VM_METADATA_MAX_RETRY = new GlobalConfig (CATEGORY , "vm.metadata.maxRetry" );
162+
163+ @ GlobalConfigDef (defaultValue = "5" , type = Long .class ,
164+ description = "Dirty poller interval in seconds" )
165+ @ GlobalConfigValidation (numberGreaterThan = 0 )
166+ public static GlobalConfig VM_METADATA_DIRTY_POLL_INTERVAL = new GlobalConfig (CATEGORY , "vm.metadata.dirty.pollIntervalSec" );
167+
168+ @ GlobalConfigDef (defaultValue = "20" , type = Integer .class ,
169+ description = "Max dirty rows to claim per poller cycle" )
170+ @ GlobalConfigValidation (numberGreaterThan = 0 )
171+ public static GlobalConfig VM_METADATA_DIRTY_BATCH_SIZE = new GlobalConfig (CATEGORY , "vm.metadata.dirty.batchSize" );
172+
173+ @ GlobalConfigDef (defaultValue = "300" , type = Long .class ,
174+ description = "Path fingerprint check interval in seconds" )
175+ @ GlobalConfigValidation (numberGreaterThan = 0 )
176+ public static GlobalConfig VM_METADATA_PATH_CHECK_INTERVAL = new GlobalConfig (CATEGORY , "vm.metadata.pathCheck.intervalSec" );
177+
178+ @ GlobalConfigDef (defaultValue = "500" , type = Integer .class ,
179+ description = "Path fingerprint check keyset pagination batch size" )
180+ @ GlobalConfigValidation (numberGreaterThan = 0 )
181+ public static GlobalConfig VM_METADATA_PATH_CHECK_BATCH_SIZE = new GlobalConfig (CATEGORY , "vm.metadata.pathCheck.batchSize" );
182+
183+ @ GlobalConfigDef (defaultValue = "600" , type = Long .class ,
184+ description = "Delay in seconds before full refresh after upgrade, waiting for rolling upgrade to complete" )
185+ @ GlobalConfigValidation (numberGreaterThan = 0 )
186+ public static GlobalConfig VM_METADATA_UPGRADE_REFRESH_DELAY = new GlobalConfig (CATEGORY , "vm.metadata.upgrade.refreshDelaySec" );
187+
188+ @ GlobalConfigDef (defaultValue = "1000" , type = Integer .class ,
189+ description = "Upgrade full refresh SQL batch size" )
190+ @ GlobalConfigValidation (numberGreaterThan = 0 )
191+ public static GlobalConfig VM_METADATA_UPGRADE_REFRESH_BATCH_SIZE = new GlobalConfig (CATEGORY , "vm.metadata.upgrade.refreshBatchSize" );
192+
193+ @ GlobalConfigDef (defaultValue = "5" , type = Long .class ,
194+ description = "Delay in seconds after nodeLeft before takeover, reduces zombie MN race condition" )
195+ @ GlobalConfigValidation (numberGreaterThan = 0 )
196+ public static GlobalConfig VM_METADATA_NODE_LEFT_DELAY = new GlobalConfig (CATEGORY , "vm.metadata.nodeLeft.delaySec" );
197+
198+ @ GlobalConfigDef (defaultValue = "1800" , type = Long .class ,
199+ description = "MetadataStaleRecoveryTask scan interval in seconds" )
200+ @ GlobalConfigValidation (numberGreaterThan = 0 )
201+ public static GlobalConfig VM_METADATA_STALE_RECOVERY_INTERVAL = new GlobalConfig (CATEGORY , "vm.metadata.staleRecovery.intervalSec" );
202+
203+ @ GlobalConfigDef (defaultValue = "100" , type = Integer .class ,
204+ description = "MetadataStaleRecoveryTask rows per scan batch" )
205+ @ GlobalConfigValidation (numberGreaterThan = 0 )
206+ public static GlobalConfig VM_METADATA_STALE_RECOVERY_BATCH_SIZE = new GlobalConfig (CATEGORY , "vm.metadata.staleRecovery.batchSize" );
207+
208+ @ GlobalConfigDef (defaultValue = "10" , type = Integer .class ,
209+ description = "Max consecutive stale recovery cycles per VM before circuit-break" )
210+ @ GlobalConfigValidation (numberGreaterThan = 0 )
211+ public static GlobalConfig VM_METADATA_STALE_RECOVERY_MAX_CYCLES = new GlobalConfig (CATEGORY , "vm.metadata.staleRecovery.maxCycles" );
212+
213+ @ GlobalConfigDef (defaultValue = "45" , type = Long .class ,
214+ description = "Pending API timeout cleanup threshold in minutes" )
215+ @ GlobalConfigValidation (numberGreaterThan = 0 )
216+ public static GlobalConfig VM_METADATA_PENDING_API_TIMEOUT = new GlobalConfig (CATEGORY , "vm.metadata.pendingApi.timeoutMinutes" );
217+
218+ @ GlobalConfigDef (defaultValue = "10" , type = Integer .class ,
219+ description = "Exponential backoff base delay in seconds" )
220+ @ GlobalConfigValidation (numberGreaterThan = 0 )
221+ public static GlobalConfig VM_METADATA_RETRY_BASE_DELAY = new GlobalConfig (CATEGORY , "vm.metadata.retry.baseDelaySeconds" );
222+
223+ @ GlobalConfigDef (defaultValue = "10" , type = Integer .class ,
224+ description = "Exponential backoff max exponent" )
225+ @ GlobalConfigValidation (numberGreaterThan = 0 )
226+ public static GlobalConfig VM_METADATA_RETRY_MAX_EXPONENT = new GlobalConfig (CATEGORY , "vm.metadata.retry.maxExponent" );
227+
228+ @ GlobalConfigDef (defaultValue = "200" , type = Integer .class ,
229+ description = "Batch size per round when enabling metadata (false to true init)" )
230+ @ GlobalConfigValidation (numberGreaterThan = 0 )
231+ public static GlobalConfig VM_METADATA_INIT_BATCH_SIZE = new GlobalConfig (CATEGORY , "vm.metadata.init.batchSize" );
232+
233+ @ GlobalConfigDef (defaultValue = "5" , type = Long .class ,
234+ description = "Delay in seconds between init batches to prevent IO storm" )
235+ @ GlobalConfigValidation (numberGreaterThan = 0 )
236+ public static GlobalConfig VM_METADATA_INIT_BATCH_DELAY = new GlobalConfig (CATEGORY , "vm.metadata.init.batchDelaySec" );
237+
238+ @ GlobalConfigDef (defaultValue = "3600" , type = Long .class ,
239+ description = "Orphan metadata detection interval in seconds" )
240+ @ GlobalConfigValidation (numberGreaterThan = 0 )
241+ public static GlobalConfig VM_METADATA_ORPHAN_CHECK_INTERVAL = new GlobalConfig (CATEGORY , "vm.metadata.orphanCheck.intervalSec" );
242+
243+ @ GlobalConfigDef (defaultValue = "15" , type = Long .class ,
244+ description = "Zombie claim threshold in minutes: claimed dirty rows older than this are released" )
245+ @ GlobalConfigValidation (numberGreaterThan = 0 )
246+ public static GlobalConfig VM_METADATA_ZOMBIE_CLAIM_THRESHOLD = new GlobalConfig (CATEGORY , "vm.metadata.zombieClaim.thresholdMinutes" );
247+
248+ @ GlobalConfigDef (defaultValue = "30" , type = Long .class ,
249+ description = "Stale claim threshold in minutes for background recovery task" )
250+ @ GlobalConfigValidation (numberGreaterThan = 0 )
251+ public static GlobalConfig VM_METADATA_STALE_CLAIM_THRESHOLD = new GlobalConfig (CATEGORY , "vm.metadata.staleClaim.thresholdMinutes" );
252+
253+ @ GlobalConfigDef (defaultValue = "10" , type = Long .class ,
254+ description = "Inline stale claim takeover threshold in minutes for triggerFlushForVm hot path" )
255+ @ GlobalConfigValidation (numberGreaterThan = 0 )
256+ public static GlobalConfig VM_METADATA_TRIGGER_FLUSH_STALE = new GlobalConfig (CATEGORY , "vm.metadata.triggerFlush.staleMinutes" );
257+
258+ @ GlobalConfigDef (defaultValue = "3" , type = Integer .class ,
259+ description = "Max retry count for deleteMetadata in ExpungeVmInstanceFlow" )
260+ @ GlobalConfigValidation (numberGreaterThan = 0 )
261+ public static GlobalConfig VM_METADATA_DELETE_MAX_RETRY = new GlobalConfig (CATEGORY , "vm.metadata.delete.maxRetry" );
262+
263+ @ GlobalConfigDef (defaultValue = "30" , type = Long .class ,
264+ description = "Base delay in seconds for deleteMetadata retry backoff" )
265+ @ GlobalConfigValidation (numberGreaterThan = 0 )
266+ public static GlobalConfig VM_METADATA_DELETE_BASE_DELAY = new GlobalConfig (CATEGORY , "vm.metadata.delete.baseDelaySec" );
267+
268+ @ GlobalConfigDef (defaultValue = "" , type = String .class ,
269+ description = "Last completed upgrade refresh version, prevents duplicate triggers across MNs. Internal use only" )
270+ public static GlobalConfig VM_METADATA_LAST_REFRESH_VERSION = new GlobalConfig (CATEGORY , "vm.metadata.lastRefreshVersion" );
136271}
0 commit comments