/ToMigrate/Raven.Tests.Issues/RavenDB_784.cs

https://github.com/fitzchak/ravendb
C# | 260 lines | 216 code | 44 blank | 0 comment | 4 complexity | dd4d25d70e478452caf57e14e6de1dbe MD5 | raw file
  1. using System.Threading;
  2. using Raven.Abstractions.Data;
  3. using Raven.Tests.Common;
  4. namespace Raven.Tests.Issues
  5. {
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using Database.Storage;
  9. using Raven.Json.Linq;
  10. using Xunit;
  11. using Xunit.Extensions;
  12. public class RavenDB_784 : RavenTest
  13. {
  14. int a = 100;
  15. int b = 200;
  16. [Theory]
  17. [PropertyData("Storages")]
  18. public void ShouldRemoveDataFromReduceKeysCountsOnIndexDelete(string storageType)
  19. {
  20. using (var storage = NewTransactionalStorage(requestedStorage: storageType))
  21. {
  22. storage.Batch(accessor =>
  23. {
  24. accessor.Indexing.AddIndex(a, true);
  25. accessor.Indexing.AddIndex(b, true);
  26. accessor.MapReduce.PutMappedResult(a, "a/1", "a", new RavenJObject());
  27. accessor.MapReduce.PutMappedResult(a, "a/2", "a", new RavenJObject());
  28. accessor.MapReduce.PutMappedResult(b, "a/1", "b", new RavenJObject());
  29. accessor.MapReduce.PutMappedResult(b, "a/1", "b", new RavenJObject());
  30. accessor.MapReduce.IncrementReduceKeyCounter(a, "a", 2);
  31. accessor.MapReduce.IncrementReduceKeyCounter(b, "b", 2);
  32. });
  33. storage.Batch(accessor =>
  34. {
  35. var results = accessor.MapReduce.GetKeysStats(a, 0, 10).ToList();
  36. Assert.Equal(1, results.Count);
  37. Assert.Equal(2, results[0].Count);
  38. results = accessor.MapReduce.GetKeysStats(b, 0, 10).ToList();
  39. Assert.Equal(1, results.Count);
  40. Assert.Equal(2, results[0].Count);
  41. });
  42. storage.Batch(accessor => accessor.Indexing.DeleteIndex(a, new CancellationToken()));
  43. storage.Batch(accessor =>
  44. {
  45. var results = accessor.MapReduce.GetKeysStats(a, 0, 10).ToList();
  46. Assert.Equal(0, results.Count());
  47. results = accessor.MapReduce.GetKeysStats(b, 0, 10).ToList();
  48. Assert.Equal(1, results.Count);
  49. Assert.Equal("b", results[0].Key);
  50. Assert.Equal(2, results[0].Count);
  51. });
  52. }
  53. }
  54. [Theory]
  55. [PropertyData("Storages")]
  56. public void ShouldRemoveDataFromReduceKeysCountsWhenReduceKeyIsGone(string storageType)
  57. {
  58. using (var storage = NewTransactionalStorage(requestedStorage: storageType))
  59. {
  60. storage.Batch(accessor =>
  61. {
  62. accessor.Indexing.AddIndex(a, true);
  63. accessor.MapReduce.PutMappedResult(a, "a/1", "a", new RavenJObject());
  64. accessor.MapReduce.PutMappedResult(a, "a/2", "a", new RavenJObject());
  65. accessor.MapReduce.PutMappedResult(a, "a/3", "b", new RavenJObject());
  66. accessor.MapReduce.PutMappedResult(a, "a/4", "b", new RavenJObject());
  67. accessor.MapReduce.IncrementReduceKeyCounter(a, "a", 2);
  68. accessor.MapReduce.IncrementReduceKeyCounter(a, "b", 2);
  69. });
  70. storage.Batch(accessor =>
  71. {
  72. var results = accessor.MapReduce.GetKeysStats(a, 0, 10).ToList();
  73. Assert.Equal(2, results.Count);
  74. Assert.Equal(2, results.First(x => x.Key == "a").Count);
  75. Assert.Equal(2, results.First(x => x.Key == "b").Count);
  76. });
  77. storage.Batch(accessor =>
  78. {
  79. var removed = new Dictionary<ReduceKeyAndBucket, int>();
  80. accessor.MapReduce.DeleteMappedResultsForDocumentId("a/3", a, removed);
  81. accessor.MapReduce.DeleteMappedResultsForDocumentId("a/4", a, removed);
  82. accessor.MapReduce.UpdateRemovedMapReduceStats(a, removed, CancellationToken.None);
  83. });
  84. storage.Batch(accessor =>
  85. {
  86. var results = accessor.MapReduce.GetKeysStats(a, 0, 10).ToList();
  87. Assert.Equal(1, results.Count);
  88. Assert.Equal("a", results[0].Key);
  89. Assert.Equal(2, results[0].Count);
  90. });
  91. }
  92. }
  93. [Theory]
  94. [PropertyData("Storages")]
  95. public void ShouldRemoveDataFromReduceKeysCountsOnDeletingAllMappedResultsForView(string storageType)
  96. {
  97. using (var storage = NewTransactionalStorage(requestedStorage: storageType))
  98. {
  99. storage.Batch(accessor =>
  100. {
  101. accessor.Indexing.AddIndex(a, true);
  102. accessor.MapReduce.PutMappedResult(a, "a/1", "a", new RavenJObject());
  103. accessor.MapReduce.PutMappedResult(a, "a/2", "a", new RavenJObject());
  104. accessor.MapReduce.PutMappedResult(a, "a/3", "b", new RavenJObject());
  105. accessor.MapReduce.PutMappedResult(a, "a/4", "b", new RavenJObject());
  106. accessor.MapReduce.IncrementReduceKeyCounter(a, "a", 2);
  107. accessor.MapReduce.IncrementReduceKeyCounter(a, "b", 2);
  108. });
  109. storage.Batch(accessor =>
  110. {
  111. var results = accessor.MapReduce.GetKeysStats(a, 0, 10).ToList();
  112. Assert.Equal(2, results.Count);
  113. Assert.Equal(2, results.First(x => x.Key == "a").Count);
  114. Assert.Equal(2, results.First(x => x.Key == "b").Count);
  115. });
  116. storage.Batch(accessor => accessor.MapReduce.DeleteMappedResultsForView(a, CancellationToken.None));
  117. storage.Batch(accessor =>
  118. {
  119. var results = accessor.MapReduce.GetKeysStats(a, 0, 10).ToList();
  120. Assert.Equal(0, results.Count);
  121. });
  122. }
  123. }
  124. [Theory]
  125. [PropertyData("Storages")]
  126. public void ShouldRemoveDataFromReduceKeysStatusOnIndexDelete(string storageType)
  127. {
  128. using (var storage = NewTransactionalStorage(requestedStorage: storageType))
  129. {
  130. storage.Batch(accessor =>
  131. {
  132. accessor.Indexing.AddIndex(a, true);
  133. accessor.Indexing.AddIndex(b, true);
  134. accessor.MapReduce.PutMappedResult(a, "a/1", "a", new RavenJObject());
  135. accessor.MapReduce.PutMappedResult(a, "a/2", "a", new RavenJObject());
  136. accessor.MapReduce.PutMappedResult(b, "a/1", "b", new RavenJObject());
  137. accessor.MapReduce.PutMappedResult(b, "a/1", "b", new RavenJObject());
  138. accessor.MapReduce.IncrementReduceKeyCounter(a, "a", 2);
  139. accessor.MapReduce.IncrementReduceKeyCounter(a, "b", 2);
  140. accessor.MapReduce.IncrementReduceKeyCounter(b, "b", 2);
  141. });
  142. storage.Batch(accessor =>
  143. {
  144. accessor.MapReduce.UpdatePerformedReduceType(a, "a", ReduceType.SingleStep);
  145. accessor.MapReduce.UpdatePerformedReduceType(b, "b", ReduceType.SingleStep);
  146. });
  147. storage.Batch(accessor =>
  148. {
  149. var result = accessor.MapReduce.GetLastPerformedReduceType(a, "a");
  150. Assert.Equal(ReduceType.SingleStep, result);
  151. result = accessor.MapReduce.GetLastPerformedReduceType(b, "b");
  152. Assert.Equal(ReduceType.SingleStep, result);
  153. });
  154. storage.Batch(accessor => accessor.Indexing.DeleteIndex(a, new CancellationToken()));
  155. storage.Batch(accessor =>
  156. {
  157. var result = accessor.MapReduce.GetLastPerformedReduceType(a, "a");
  158. Assert.Equal(ReduceType.None, result);
  159. result = accessor.MapReduce.GetLastPerformedReduceType(b, "b");
  160. Assert.Equal(ReduceType.SingleStep, result);
  161. });
  162. storage.Batch(accessor => accessor.Indexing.DeleteIndex(b, new CancellationToken()));
  163. storage.Batch(accessor =>
  164. {
  165. var result = accessor.MapReduce.GetLastPerformedReduceType(a, "a");
  166. Assert.Equal(ReduceType.None, result);
  167. result = accessor.MapReduce.GetLastPerformedReduceType(b, "b");
  168. Assert.Equal(ReduceType.None, result);
  169. });
  170. }
  171. }
  172. [Theory]
  173. [PropertyData("Storages")]
  174. public void ShouldRemoveDataFromReduceKeysStatusWhenReduceKeyIsGone(string storageType)
  175. {
  176. using (var storage = NewTransactionalStorage(requestedStorage: storageType))
  177. {
  178. storage.Batch(accessor =>
  179. {
  180. accessor.Indexing.AddIndex(a, true);
  181. accessor.MapReduce.PutMappedResult(a, "a/1", "a", new RavenJObject());
  182. accessor.MapReduce.PutMappedResult(a, "a/2", "a", new RavenJObject());
  183. accessor.MapReduce.PutMappedResult(a, "a/3", "b", new RavenJObject());
  184. accessor.MapReduce.PutMappedResult(a, "a/4", "b", new RavenJObject());
  185. accessor.MapReduce.IncrementReduceKeyCounter(a, "a", 2);
  186. accessor.MapReduce.IncrementReduceKeyCounter(a, "b", 2);
  187. });
  188. storage.Batch(accessor =>
  189. {
  190. accessor.MapReduce.UpdatePerformedReduceType(a, "a", ReduceType.SingleStep);
  191. accessor.MapReduce.UpdatePerformedReduceType(a, "b", ReduceType.SingleStep);
  192. });
  193. storage.Batch(accessor =>
  194. {
  195. var removed = new Dictionary<ReduceKeyAndBucket, int>();
  196. accessor.MapReduce.DeleteMappedResultsForDocumentId("a/3", a, removed);
  197. accessor.MapReduce.DeleteMappedResultsForDocumentId("a/4", a, removed);
  198. accessor.MapReduce.UpdateRemovedMapReduceStats(a, removed, CancellationToken.None);
  199. var reduceKeys = removed.Keys;
  200. foreach (var reduceKey in reduceKeys)
  201. {
  202. accessor.MapReduce.UpdatePerformedReduceType(a, reduceKey.ReduceKey,
  203. ReduceType.SingleStep, skipAdd: true);
  204. }
  205. });
  206. storage.Batch(accessor =>
  207. {
  208. var result = accessor.MapReduce.GetLastPerformedReduceType(a, "a");
  209. Assert.Equal(ReduceType.SingleStep, result);
  210. result = accessor.MapReduce.GetLastPerformedReduceType(a, "b");
  211. Assert.Equal(ReduceType.None, result);
  212. });
  213. }
  214. }
  215. }
  216. }