fix(datasync): add guards and exception safety to JsonZstdFileSource

This commit is contained in:
Joseph Doherty
2026-01-03 16:21:59 -05:00
parent 57a44e0f3a
commit 2629cb26e0
@@ -31,6 +31,11 @@ public sealed class JsonZstdFileSource : IImportSource
} }
public Task<IDataReader> ReadDataAsync(CancellationToken cancellationToken = default) public Task<IDataReader> ReadDataAsync(CancellationToken cancellationToken = default)
{
if (_fileStream != null)
throw new InvalidOperationException("ReadDataAsync has already been called. Dispose and create a new source to read again.");
try
{ {
_fileStream = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.Read, _fileStream = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.Read,
bufferSize: 65536, useAsync: true); bufferSize: 65536, useAsync: true);
@@ -39,6 +44,18 @@ public sealed class JsonZstdFileSource : IImportSource
return Task.FromResult<IDataReader>(_reader); return Task.FromResult<IDataReader>(_reader);
} }
catch
{
// Clean up on failure
_reader?.Dispose();
_decompressionStream?.Dispose();
_fileStream?.Dispose();
_reader = null;
_decompressionStream = null;
_fileStream = null;
throw;
}
}
public async ValueTask DisposeAsync() public async ValueTask DisposeAsync()
{ {