Ejemplo n.º 1
0
        private void HandleActualWrites(OutstandingWrite mine, CancellationToken token)
        {
            List <OutstandingWrite> writes = null;

            try
            {
                writes = BuildBatchGroup(mine);
                var completedSuccessfully = false;

                using (var tx = _env.NewTransaction(TransactionFlags.ReadWrite))
                {
                    HandleOperations(tx, writes, _cancellationToken);

                    try
                    {
                        tx.Commit();
                        if (ShouldRecordToDebugJournal)
                        {
                            _debugJournal.Flush();
                        }

                        completedSuccessfully = true;
                    }
                    catch (Exception e)
                    {
                        if (e is SEHException)
                        {
                            e = new VoronUnrecoverableErrorException("Error occurred during write", new Win32Exception(error: e.HResult));
                        }

                        // if we have an error during the commit, we can't recover, just fail them all.
                        foreach (var write in writes)
                        {
                            write.Errored(e);
                        }
                    }
                }

                if (completedSuccessfully)
                {
                    foreach (var write in writes)
                    {
                        write.Completed();
                    }
                }
            }
            catch (Exception e)
            {
                if (e is SEHException)
                {
                    e = new VoronUnrecoverableErrorException("Error occurred during write", new Win32Exception(error: e.HResult));
                }

                HandleWriteFailure(writes, mine, e);
            }
        }
Ejemplo n.º 2
0
        private void HandleActualWrites(OutstandingWrite mine, CancellationToken token)
        {
            List <OutstandingWrite> writes = null;

            try
            {
                writes = BuildBatchGroup(mine);
                using (var tx = _env.NewTransaction(TransactionFlags.ReadWrite))
                {
                    HandleOperations(tx, writes, _cancellationToken);

                    try
                    {
                        tx.Commit();
                        if (ShouldRecordToDebugJournal)
                        {
                            _debugJournal.Flush();
                        }

                        foreach (var write in writes)
                        {
                            write.Completed();
                        }
                    }
                    catch (Exception e)
                    {
                        // if we have an error duing the commit, we can't recover, just fail them all.
                        foreach (var write in writes)
                        {
                            write.Errored(e);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                HandleWriteFailure(writes, mine, e);
            }
        }