{"record":{"id":"fd58ca63dc6fa1e8","repo":"tursodatabase/turso","slug":"sync-interval-must-be-between-0-and-maximumsyncin","errorCode":null,"errorMessage":"Sync Interval must be between 0 and {MaximumSyncIntervalSeconds} seconds.","messagePattern":"Sync Interval must be between 0 and (.+?) seconds\\.","errorType":"validation","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"bindings/dotnet/src/Turso.Data/TursoConnectionOptions.cs","lineNumber":44,"sourceCode":"\n    public bool Pooling => _builder.Pooling;\n\n    public string DataSource => _builder.DataSource;\n\n    public string AuthToken => _builder.AuthToken;\n\n    public string ReplicaPath => _builder.ReplicaPath;\n\n    public bool ReadYourWrites => _builder.ReadYourWrites;\n\n    public int SyncInterval\n    {\n        get\n        {\n            var value = _builder.SyncInterval;\n            if (value is < 0 or > MaximumSyncIntervalSeconds)\n            {\n                throw new ArgumentOutOfRangeException(\n                    nameof(SyncInterval),\n                    value,\n                    $\"Sync Interval must be between 0 and {MaximumSyncIntervalSeconds} seconds.\");\n            }\n\n            return value;\n        }\n    }\n\n    public string SyncClientName => _builder.SyncClientName;\n\n    public int SyncLongPollTimeout => _builder.SyncLongPollTimeout;\n\n    public bool BootstrapIfEmpty => _builder.BootstrapIfEmpty;\n\n    public int PartialBootstrapPrefix => _builder.PartialBootstrapPrefix;\n\n    public string PartialBootstrapQuery => _builder.PartialBootstrapQuery;","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/tursodatabase/turso/blob/6c7252267988c76e632af00a671e4b9788dfae13/bindings/dotnet/src/Turso.Data/TursoConnectionOptions.cs#L26-L62","documentation":"The SyncInterval property getter validates that the configured sync interval is within [0, MaximumSyncIntervalSeconds]; values outside that range throw ArgumentOutOfRangeException naming SyncInterval. This fails fast on connection-options misconfiguration.","triggerScenarios":"Constructing TursoConnectionOptions / a connection string builder with SyncInterval set to a negative number or a value larger than MaximumSyncIntervalSeconds, then reading the SyncInterval property.","commonSituations":"Passing milliseconds instead of seconds (e.g. SyncInterval=60000); copy-pasting a TimeSpan value into an int seconds field; reading the interval from unvalidated app config.","solutions":["Set SyncInterval to a value between 0 and MaximumSyncIntervalSeconds seconds.","Clamp the value before assigning: Math.Clamp(configured, 0, TursoConnectionOptions.MaximumSyncIntervalSeconds).","Fix the unit: if you have milliseconds, divide by 1000 before assigning."],"exampleFix":"// before\nbuilder.SyncInterval = 60000; // ms, too large\n// after\nbuilder.SyncInterval = Math.Clamp(60, 0, TursoConnectionOptions.MaximumSyncIntervalSeconds);","handlingStrategy":"validation","validationCode":"int clamped = Math.Clamp(configuredIntervalSeconds, 0, TursoConnectionOptions.MaximumSyncIntervalSeconds);\nbuilder.SyncInterval = clamped;","typeGuard":"static bool IsValidSyncInterval(int seconds) => seconds is >= 0 and <= TursoConnectionOptions.MaximumSyncIntervalSeconds;","tryCatchPattern":"try { var interval = options.SyncInterval; }\ncatch (ArgumentOutOfRangeException ex) when (ex.ParamName == nameof(TursoConnectionOptions.SyncInterval))\n{ /* log bad config and use default */ }","preventionTips":["Clamp/validate config values before assigning to SyncInterval.","Remember the unit is seconds, not milliseconds.","Validate connection-string options at app startup with clear error messages."],"tags":["csharp","dotnet","configuration","sync"],"backgroundTag":"argument-out-of-range","analyzedSha":"6c7252267988c76e632af00a671e4b9788dfae13","analyzedAt":"2026-09-06T07:15:26.990Z","contentChangedAt":"2026-09-06T07:15:26.990Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}