ResourceUri destinationResourceUri(ResourceUri resourceUri)
        throws IOException, SemanticException {
      String sourceUri = resourceUri.getUri();
      String[] split = ReplChangeManager.decodeFileUri(sourceUri)[0].split(Path.SEPARATOR);
      PathBuilder pathBuilder = new PathBuilder(functionsRootDir);
      Path qualifiedDestinationPath = PathBuilder.fullyQualifiedHDFSUri(
          pathBuilder
              .addDescendant(destinationDbName.toLowerCase())
              .addDescendant(metadata.function.getFunctionName().toLowerCase())
              .addDescendant(String.valueOf(Time.monotonicNowNanos()))
              .addDescendant(split[split.length - 1])
              .build(),
          new Path(functionsRootDir).getFileSystem(context.hiveConf)
      );

      replCopyTasks.add(getCopyTask(sourceUri, qualifiedDestinationPath));
      ResourceUri destinationUri =
          new ResourceUri(resourceUri.getResourceType(), qualifiedDestinationPath.toString());
      context.log.debug("copy source uri : {} to destination uri: {}", sourceUri, destinationUri);
      return destinationUri;
    }
the destination also includes the current timestamp to randomise the placement of the jar at a given location for a function .
this is done to allow the  CREATE / DROP / CREATE of the same function with same name and jar's but updated
binaries across the two creates.
ql/src/java/org/apache/hadoop/hive/ql/parse/repl/load/message/CreateFunctionHandler.java