[
https://issues.apache.org/jira/browse/DRILL-5044?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15702750#comment-15702750
]
ASF GitHub Bot commented on DRILL-5044:
---------------------------------------
Github user paul-rogers commented on a diff in the pull request:
https://github.com/apache/drill/pull/669#discussion_r89848865
--- Diff:
exec/java-exec/src/test/java/org/apache/drill/TestDynamicUDFSupport.java ---
@@ -271,6 +271,75 @@ public void testDuplicatedFunctionsInLocalRegistry()
throws Exception {
}
@Test
+ public void testSuccessfulRegistrationAfterSeveralRetryAttempts() throws
Exception {
+ RemoteFunctionRegistry remoteFunctionRegistry =
spyRemoteFunctionRegistry();
+ copyDefaultJarsToStagingArea();
+
+ doThrow(new VersionMismatchException("Version mismatch detected", 1))
+ .doThrow(new VersionMismatchException("Version mismatch
detected", 1))
+ .doCallRealMethod()
+
.when(remoteFunctionRegistry).updateRegistry(any(Registry.class),
any(DataChangeVersion.class));
+
+ String summary = "The following UDFs in jar %s have been
registered:\n" +
+ "[custom_lower(VARCHAR-REQUIRED)]";
+
+ testBuilder()
+ .sqlQuery("create function using jar '%s'",
default_binary_name)
+ .unOrdered()
+ .baselineColumns("ok", "summary")
+ .baselineValues(true, String.format(summary,
default_binary_name))
+ .go();
+
+ verify(remoteFunctionRegistry, times(3))
+ .updateRegistry(any(Registry.class),
any(DataChangeVersion.class));
+
+ FileSystem fs = remoteFunctionRegistry.getFs();
+
+ assertFalse("Staging area should be empty",
fs.listFiles(remoteFunctionRegistry.getStagingArea(), false).hasNext());
+ assertFalse("Temporary area should be empty",
fs.listFiles(remoteFunctionRegistry.getTmpArea(), false).hasNext());
+
+ assertTrue("Binary should be present in registry area",
+ fs.exists(new Path(remoteFunctionRegistry.getRegistryArea(),
default_binary_name)));
+ assertTrue("Source should be present in registry area",
+ fs.exists(new Path(remoteFunctionRegistry.getRegistryArea(),
default_source_name)));
+
+ Registry registry = remoteFunctionRegistry.getRegistry();
+ assertEquals("Registry should contain one jar",
registry.getJarList().size(), 1);
+ assertEquals(registry.getJar(0).getName(), default_binary_name);
+ }
+
+ @Test
+ public void testSuccessfulUnregistrationAfterSeveralRetryAttempts()
throws Exception {
+ RemoteFunctionRegistry remoteFunctionRegistry =
spyRemoteFunctionRegistry();
+ copyDefaultJarsToStagingArea();
+ test("create function using jar '%s'", default_binary_name);
+
+ reset(remoteFunctionRegistry);
+ doThrow(new VersionMismatchException("Version mismatch detected", 1))
--- End diff --
Perhaps a few words of explanation about what doThrow does?
> After the dynamic registration of multiple jars simultaneously not all UDFs
> were registered
> -------------------------------------------------------------------------------------------
>
> Key: DRILL-5044
> URL: https://issues.apache.org/jira/browse/DRILL-5044
> Project: Apache Drill
> Issue Type: Bug
> Components: Functions - Drill
> Affects Versions: 1.9.0
> Reporter: Roman
> Assignee: Paul Rogers
>
> I tried to register 21 jars simultaneously (property 'udf.retry-attempts' =
> 30) and not all jars were registered. As I see in output, all function were
> registered and /staging directory was empty, but not all of jars were moved
> into /registry directory.
> For example, after simultaneously registration I saw "The following UDFs in
> jar test-1.1.jar have been registered: [test1(VARCHAR-REQUIRED)" message, but
> this jar was not in /registry directory. When I tried to run function test1,
> I got this error: "Error: SYSTEM ERROR: SqlValidatorException: No match found
> for function signature test1(<CHARACTER>)". And when I tried to reregister
> this jar, I got "Jar with test-1.1.jar name has been already registered".
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)