public async Task CommitTran(Tran tran) { await _commitLock.WaitAsync().ConfigureAwait(false); try { using (Measured.Operation("wal_commit")) { foreach (var doc in tran.Documents) { doc.Id = _docIdGenerator.GetNextId(); } await DocumentSerializer.SerializeBatch(tran.Documents, _file).ConfigureAwait(false); await _file.FlushAsync().ConfigureAwait(false); } } finally { _commitLock.Release(); } }
private async Task <DataFileCommitInfo> Commit() { var compression = new CompressionUtils(); var commitInfo = new DataFileCommitInfo(); while (_nonPersistedQ.Count >= _batchSize) { var batchStartPos = _file.Position; var nextBatch = ReadNextBatchFromQueue(); using (var ms = new MemoryStream()) { await DocumentSerializer.SerializeBatch(nextBatch, ms).ConfigureAwait(false); await compression.CopyWithCompression(ms, _file).ConfigureAwait(false); await _file.FlushAsync().ConfigureAwait(false); } commitInfo.RecordCommittedBatch(batchStartPos, nextBatch); } return(commitInfo); }