Skip to content

Commit

Permalink
load rules on init, not request
Browse files Browse the repository at this point in the history
  • Loading branch information
Kieran Higgins committed May 26, 2022
1 parent 0678952 commit 8f2d01a
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,21 @@ static RoutingGroupSelector byRoutingRulesEngine(String rulesConfigPath) {
RulesEngine rulesEngine = new DefaultRulesEngine();
MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());

return request -> {
try {
Rules rules = ruleFactory.createRules(
new FileReader(rulesConfigPath));
try {
Rules rules = ruleFactory.createRules(new FileReader(rulesConfigPath));
return request -> {
Facts facts = new Facts();
HashMap<String, String> result = new HashMap<String, String>();
facts.put("request", request);
facts.put("result", result);
rulesEngine.fire(rules, facts);
return result.get("routingGroup");
} catch (Exception e) {
Logger.log.error("Error opening rules configuration file,"
+ " using routing group header as default.", e);
return Optional.ofNullable(request.getHeader(ROUTING_GROUP_HEADER))
.orElse(request.getHeader(ALTERNATE_ROUTING_GROUP_HEADER));
}
};
};
} catch (Exception e) {
Logger.log.error("Error opening rules configuration file,"
+ " using routing group header as default.", e);
return byRoutingGroupHeader();
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,41 +82,4 @@ public void testByRoutingRulesEngineNoMatch(String rulesConfigPath) {
routingGroupSelector.findRoutingGroup(mockRequest), null);
}

public void testByRoutingRulesEngineFileChange() throws Exception {
File file = File.createTempFile("routing_rules", ".yml");

FileWriter fw = new FileWriter(file);
fw.write(
"---\n"
+ "name: \"airflow\"\n"
+ "description: \"if query from airflow, route to etl group\"\n"
+ "condition: \"request.getHeader(\\\"X-Trino-Source\\\") == \\\"airflow\\\"\"\n"
+ "actions:\n"
+ " - \"result.put(\\\"routingGroup\\\", \\\"etl\\\")\"");
fw.close();

RoutingGroupSelector routingGroupSelector =
RoutingGroupSelector.byRoutingRulesEngine(file.getPath());

HttpServletRequest mockRequest = mock(HttpServletRequest.class);

when(mockRequest.getHeader(TRINO_SOURCE_HEADER)).thenReturn("airflow");
Assert.assertEquals(
routingGroupSelector.findRoutingGroup(mockRequest), "etl");

fw = new FileWriter(file);
fw.write(
"---\n"
+ "name: \"airflow\"\n"
+ "description: \"if query from airflow, route to etl group\"\n"
+ "condition: \"request.getHeader(\\\"X-Trino-Source\\\") == \\\"airflow\\\"\"\n"
+ "actions:\n"
+ " - \"result.put(\\\"routingGroup\\\", \\\"etl2\\\")\""); // change from etl to etl2
fw.close();

when(mockRequest.getHeader(TRINO_SOURCE_HEADER)).thenReturn("airflow");
Assert.assertEquals(
routingGroupSelector.findRoutingGroup(mockRequest), "etl2");
file.deleteOnExit();
}
}

0 comments on commit 8f2d01a

Please sign in to comment.