You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ignite.apache.org by GitBox <gi...@apache.org> on 2021/05/20 12:45:00 UTC

[GitHub] [ignite-3] kgusakov commented on a change in pull request #121: IGNITE-14667 Optimization of key criterion inference for aggregated watch.

kgusakov commented on a change in pull request #121:
URL: https://github.com/apache/ignite-3/pull/121#discussion_r636067432



##########
File path: modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/WatchAggregatorTest.java
##########
@@ -113,6 +128,122 @@ public void testCancelByFalseFromListener() {
 
     }
 
+    /**
+     *
+     */
+    @Test
+    public void testOneCriterionInference() {
+        var watchAggregator = new WatchAggregator();
+
+        watchAggregator.add(new Key("key"), null);
+
+        var keyCriterion = watchAggregator.watch(0, null).get().keyCriterion();
+        assertEquals(new KeyCriterion.ExactCriterion(new Key("key")), keyCriterion);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTwoExactCriteriaUnion() {
+        var watchAggregator = new WatchAggregator();
+
+        watchAggregator.add(new Key("key1"), null);
+        watchAggregator.add(new Key("key2"), null);
+
+        var keyCriterion = watchAggregator.watch(0, null).get().keyCriterion();
+        var expKeyCriterion = new KeyCriterion.CollectionCriterion(
+            new HashSet<>(Arrays.asList(new Key("key1"), new Key("key2")))
+        );
+        assertEquals(expKeyCriterion, keyCriterion);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTwoEqualExactCriteriaUnion() {
+        var watchAggregator = new WatchAggregator();
+
+        watchAggregator.add(new Key("key1"), null);
+        watchAggregator.add(new Key("key1"), null);
+
+        var keyCriterion = watchAggregator.watch(0, null).get().keyCriterion();
+        var expKeyCriterion = new KeyCriterion.CollectionCriterion(
+            new HashSet<>(Collections.singletonList(new Key("key1")))
+        );
+        assertEquals(expKeyCriterion, keyCriterion);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTwoEqualCollectionCriteriaUnion() {
+        var watchAggregator = new WatchAggregator();
+
+        watchAggregator.add(Arrays.asList(new Key("key1"), new Key("key2")), null);
+        watchAggregator.add(Arrays.asList(new Key("key1"), new Key("key2")), null);
+
+        var keyCriterion = watchAggregator.watch(0, null).get().keyCriterion();
+        var expKeyCriterion = new KeyCriterion.CollectionCriterion(
+            new HashSet<>(Arrays.asList(new Key("key1"), new Key("key2")))
+        );
+        assertEquals(expKeyCriterion, keyCriterion);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testExactInTheMiddleAndRangeCriteriaOnTheEdgesUnion() {
+        var watchAggregator = new WatchAggregator();
+
+        watchAggregator.add(new Key("key1"), null);
+        watchAggregator.add(new Key("key0"), new Key("key2"), null);
+
+        var keyCriterion = watchAggregator.watch(0, null).get().keyCriterion();
+        var expKeyCriterion = new KeyCriterion.RangeCriterion(
+            new Key("key0"), new Key("key2"));
+        assertEquals(expKeyCriterion, keyCriterion);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testHighExactAndLowerRangeCriteriaUnion() {
+        var watchAggregator = new WatchAggregator();
+
+        watchAggregator.add(new Key("key3"), null);
+        watchAggregator.add(new Key("key0"), new Key("key2"), null);
+
+        var keyCriterion = watchAggregator.watch(0, null).get().keyCriterion();
+        var expKeyCriterion = new KeyCriterion.RangeCriterion(
+            new Key("key0"), new Key("key4"));
+        assertEquals(expKeyCriterion, keyCriterion);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testAllTypesOfCriteriaUnion() {
+        var watchAggregator = new WatchAggregator();
+
+        watchAggregator.add(new Key("key0"), null);
+        watchAggregator.add(new Key("key1"), new Key("key2"), null);
+        watchAggregator.add(Arrays.asList(new Key("key0"), new Key("key3")), null);
+
+        var keyCriterion = watchAggregator.watch(0, null).get().keyCriterion();
+        var expKeyCriterion = new KeyCriterion.RangeCriterion(
+            new Key("key0"), new Key("key4"));
+        assertEquals(expKeyCriterion, keyCriterion);
+    }
+
+    /**
+     *
+     */

Review comment:
       Added `testThatKeyCriteriaUnionAssociative` 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org