alievmirza commented on code in PR #1902:
URL: https://github.com/apache/ignite-3/pull/1902#discussion_r1158525929
##########
modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerTest.java:
##########
@@ -755,17 +740,118 @@ public void testTryDropDefaultZone() {
);
}
- private void bindZoneToTable(String zoneName) {
- int zoneId = distributionZoneManager.getZoneId(zoneName);
+ @Test
+ public void testCreateZoneWithFilter() throws Exception {
+ String expectedFilter = "['nodeAttributes'][?(@.['region'] == 'EU')]";
+
+ distributionZoneManager.createZone(
+ new
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+ .filter(expectedFilter).build()
+ )
+ .get(5, TimeUnit.SECONDS);
+
+ DistributionZoneConfiguration zone1 =
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+ .get(ZONE_NAME);
+
+ assertEquals(expectedFilter, zone1.filter().value());
+
+ distributionZoneManager.dropZone(ZONE_NAME).get(5, TimeUnit.SECONDS);
+
+ zone1 =
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+ .get(ZONE_NAME);
+
+ assertNull(zone1, "Zone was not dropped.");
+ }
+
+ @Test
+ public void testAlterZoneWithFilter() throws Exception {
+ String expectedFilter = "['nodeAttributes'][?(@.['region'] == 'EU')]";
+
+ distributionZoneManager.createZone(
+ new
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+ .filter(expectedFilter).build()
+ )
+ .get(5, TimeUnit.SECONDS);
- NamedConfigurationTree<TableConfiguration, TableView, TableChange>
tables = mock(NamedConfigurationTree.class, RETURNS_DEEP_STUBS);
+ DistributionZoneConfiguration zone1 =
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+ .get(ZONE_NAME);
+
+ assertEquals(expectedFilter, zone1.filter().value());
+
+ String newExpectedFilter = "['nodeAttributes'][?(@.['storage'] ==
'SSD')]";
+
+ distributionZoneManager.alterZone(
+ ZONE_NAME,
+ new
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+ .filter(newExpectedFilter).build())
+ .get(5, TimeUnit.SECONDS);
+
+ zone1 =
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+ .get(ZONE_NAME);
+
+ assertEquals(newExpectedFilter, zone1.filter().value());
+
+ distributionZoneManager.dropZone(ZONE_NAME).get(5, TimeUnit.SECONDS);
+
+ zone1 =
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+ .get(ZONE_NAME);
+
+ assertNull(zone1, "Zone was not dropped.");
+ }
+
+ @Test
+ @SuppressWarnings("ThrowableNotThrown")
+ public void testCreateZoneWithNotValidFilter() {
+ assertThrowsWithCause(
+ () -> distributionZoneManager.createZone(
+ new
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+ .filter("['nodeAttributes'[?(@.['region'] ==
'EU')]").build()
+ )
+ .get(5, TimeUnit.SECONDS),
+ ConfigurationValidationException.class
+ );
+ }
- when(tablesConfiguration.tables()).thenReturn(tables);
+ @Test
+ @SuppressWarnings("ThrowableNotThrown")
+ public void testAlterZoneWithNotValidFilter() throws Exception {
+ String expectedFilter = "['nodeAttributes'][?(@.['region'] == 'EU')]";
+
+ distributionZoneManager.createZone(
+ new DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+ .filter(expectedFilter).build()
+ )
+ .get(5, TimeUnit.SECONDS);
- TableView tableView = mock(TableView.class);
+ DistributionZoneConfiguration zone1 =
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+ .get(ZONE_NAME);
+
+ assertEquals(expectedFilter, zone1.filter().value());
+
+ String notValidFilter = "['nodeAttributes[?(@.['region'] == 'EU')]";
+
+ assertThrowsWithCause(
+ () -> distributionZoneManager.alterZone(
+ ZONE_NAME,
+ new
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+ .filter(notValidFilter).build()
+ )
+ .get(5, TimeUnit.SECONDS),
+ ConfigurationValidationException.class
Review Comment:
done
##########
modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/DistributionZonesUtil.java:
##########
@@ -347,4 +349,20 @@ public static DistributionZoneConfiguration
getZoneById(DistributionZonesConfigu
throw new DistributionZoneNotFoundException(zoneId);
}
+
+ /**
+ * Check if a passed filter is a valid {@link JsonPath} query.
+ *
+ * @param filter Filter.
+ * @return {@code true} if the passed filter is a valid filter, {@code
false} otherwise.
+ */
+ public static boolean validate(String filter) {
+ try {
+ JsonPath.compile(filter);
+ } catch (InvalidPathException ignored) {
Review Comment:
added
--
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.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]