Repository: microsoft/garnet
File: libs/server/Servers/GarnetServerOptions.cs (C#)

Code before:
        public int CompactionMaxSegments = 32;

        /// <summary>
        /// Number of object store log segments created on disk before compaction triggers.
        /// </summary>
        public int ObjectStoreCompactionMaxSegments = 32;

        /// <summary>
        /// Percent of cluster nodes to gossip with at each gossip iteration.
        /// </summary>
        public int GossipSamplePercent = 100;

        /// <summary>
        /// Cluster mode gossip protocol per node sleep (in seconds) delay to send updated config.
        /// </summary>
        public int GossipDelay = 5;

        /// <summary>
        /// Cluster node timeout is the amount of seconds a node must be unreachable. 
        /// </summary>
        public int ClusterTimeout = 60;

        /// <summary>
        /// How frequently to flush config unto disk to persist updates. =-1: never (memory only), =0: immediately (every update performs flush), >0: frequency in ms
        /// </summary>
        public int ConfigFlushFrequency = 0;

        /// <summary>
        /// TLS options
        /// </summary>
        public IGarnetTlsOptions TlsOptions;

        /// <summary>
        /// Username for clients used by cluster backend
        /// </summary>
        public string ClusterUsername;

        /// <summary>
        /// Password for clients used by cluster backend
        /// </summary>
        public string ClusterPassword;

        /// <summary>
        /// Enable per command latency tracking for all commands
        /// </summary>
        public bool LatencyMonitor = false;

        /// <summary>
        /// Threshold (microseconds) for logging command in the slow log. 0 to disable
        /// </summary>
        public int SlowLogThreshold = 0;

Review comment (suggestion):
Can either make this of seconds granularity and rename to `ConfigFlushFrequencySecs` or leave as milliseconds if that fine-grained granularity is deemed necessary. In the latter case, it can be renamed to `ConfigFlushFrequencyMs` (to be consistent with other similar frequency configs). Same comment holds for Options.cs.

Code after:
        public int CompactionMaxSegments = 32;

        /// <summary>
        /// Number of object store log segments created on disk before compaction triggers.
        /// </summary>
        public int ObjectStoreCompactionMaxSegments = 32;

        /// <summary>
        /// Percent of cluster nodes to gossip with at each gossip iteration.
        /// </summary>
        public int GossipSamplePercent = 100;

        /// <summary>
        /// Cluster mode gossip protocol per node sleep (in seconds) delay to send updated config.
        /// </summary>
        public int GossipDelay = 5;

        /// <summary>
        /// Cluster node timeout is the amount of seconds a node must be unreachable. 
        /// </summary>
        public int ClusterTimeout = 60;

        /// <summary>
        /// How frequently to flush cluster config unto disk to persist updates. =-1: never (memory only), =0: immediately (every update performs flush), >0: frequency in ms
        /// </summary>
        public int ClusterConfigFlushFrequencyMs = 0;

        /// <summary>
        /// TLS options
        /// </summary>
        public IGarnetTlsOptions TlsOptions;

        /// <summary>
        /// Username for clients used by cluster backend
        /// </summary>
        public string ClusterUsername;

        /// <summary>
        /// Password for clients used by cluster backend
        /// </summary>
        public string ClusterPassword;

        /// <summary>
        /// Enable per command latency tracking for all commands
        /// </summary>
        public bool LatencyMonitor = false;

        /// <summary>
        /// Threshold (microseconds) for logging command in the slow log. 0 to disable
        /// </summary>
        public int SlowLogThreshold = 0;