Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. private unsafe void TransactionMerger()
  2. {
  3. var existing = new HashSet<long>();
  4. var tasks = new List<TaskCompletionSource<object>>();
  5. while (_cts.IsCancellationRequested == false)
  6. {
  7. existing.Clear();
  8. tasks.Clear();
  9. double value;
  10. using (var tx = _storageEnvironment.WriteTransaction())
  11. using (Slice.From(tx.Allocator, "dummy-val", out Slice dummy))
  12. using (Slice.External(tx.Allocator, (byte*)&value, sizeof(double), out Slice valueSlice))
  13. {
  14. var fst = tx.FixedTreeFor(dummy, valSize: sizeof(double));
  15.  
  16. int count = 0;
  17. Entry entry;
  18. var propertiesInsertionBuffer = new BlittableJsonReaderObject.PropertiesInsertionBuffer();
  19. while (_entries.TryDequeue(out entry))
  20. {
  21.  
  22. var keyHash = (long)entry.Key.DebugHash;
  23.  
  24. using (Slice.External(tx.Allocator, (byte*)&keyHash, sizeof(long), out Slice slice))
  25. {
  26. fst.RepurposeInstance(slice, clone: false);
  27.  
  28. value = entry.Value;
  29. fst.Add(entry.Time.Ticks, valueSlice);
  30. }
  31. if (existing.Add(keyHash))
  32. {
  33. int propCount = entry.Key.GetPropertiesByInsertionOrder(propertiesInsertionBuffer);
  34. var prop = new BlittableJsonReaderObject.PropertyDetails();
  35.  
  36. for (int i = 0; i < propCount; i++)
  37. {
  38. entry.Key.GetPropertyByIndex(propertiesInsertionBuffer.Properties[i], ref prop);
  39. var tree = tx.CreateTree(prop.Name);
  40. var matches = tree.FixedTreeFor(prop.Value.ToString());
  41. matches.Add(keyHash);
  42. }
  43. }
  44. tasks.Add(entry.Tcs);
  45. if (count++ > 25_000)
  46. {
  47. _hasEntries.Set();
  48. break;
  49. }
  50. }
  51. tx.Commit();
  52. }
  53. foreach (var tcs in tasks)
  54. {
  55. tcs.TrySetResult(null);
  56. }
  57. _hasEntries.Wait();
  58. _hasEntries.Reset();
  59. }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement