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); } }
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); } }