Exemple #1
0
        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();
            }
        }
Exemple #2
0
        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);
        }