[ 
https://issues.apache.org/jira/browse/HADOOP-4498?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12642394#action_12642394
 ] 

Chris K Wensel commented on HADOOP-4498:
----------------------------------------

good catch on the regex, this works much better

{noformat}
    private static String escapeRegexChars( String string ) {
      return "\\Q"+string.replaceAll("\\\\E", "\\\\E\\\\\\\\E\\\\Q")+"\\E";
    }
{noformat}

via a println of the pattern..

{noformat}
jobName           pattern
------------------------------------------------
[[name] value]    \Q[[name] value]\E
name \Evalue]     \Qname \E\\E\Qvalue]\E
{noformat}

let me know if this doesn't seem right. i'll run the full test suite in the 
morning.

> JobHistory does not escape literal jobName when used in a regex pattern
> -----------------------------------------------------------------------
>
>                 Key: HADOOP-4498
>                 URL: https://issues.apache.org/jira/browse/HADOOP-4498
>             Project: Hadoop Core
>          Issue Type: Bug
>          Components: mapred
>    Affects Versions: 0.19.0
>            Reporter: Chris K Wensel
>            Priority: Blocker
>         Attachments: hadoop-4498.patch
>
>
> JobHistory#getJobHistoryFileName throws a PatternSyntaxException if the 
> jobName includes characters that could be regex metacharacters or 
> metasequences and are subsequently considered malformed.
> Trace:
> Exception in thread "initJobs" java.util.regex.PatternSyntaxException: 
> Unclosed character class near index 97
> ....
>       at java.util.regex.Pattern.error(Pattern.java:1713)
>       at java.util.regex.Pattern.clazz(Pattern.java:2254)
>       at java.util.regex.Pattern.clazz(Pattern.java:2210)
>       at java.util.regex.Pattern.sequence(Pattern.java:1818)
>       at java.util.regex.Pattern.expr(Pattern.java:1752)
>       at java.util.regex.Pattern.compile(Pattern.java:1460)
>       at java.util.regex.Pattern.<init>(Pattern.java:1133)
>       at java.util.regex.Pattern.compile(Pattern.java:823)
>       at 
> org.apache.hadoop.mapred.JobHistory$JobInfo.getJobHistoryFileName(JobHistory.java:632)
>       at 
> org.apache.hadoop.mapred.JobHistory$JobInfo.finalizeRecovery(JobHistory.java:740)
>       at org.apache.hadoop.mapred.JobTracker.finalizeJob(JobTracker.java:1532)
>       at 
> org.apache.hadoop.mapred.JobInProgress.garbageCollect(JobInProgress.java:2232)
>       at 
> org.apache.hadoop.mapred.JobInProgress.terminateJob(JobInProgress.java:1938)
>       at 
> org.apache.hadoop.mapred.JobInProgress.terminate(JobInProgress.java:1953)
>       at org.apache.hadoop.mapred.JobInProgress.fail(JobInProgress.java:2012)
>       at 
> org.apache.hadoop.mapred.EagerTaskInitializationListener$JobInitThread.run(EagerTaskInitializationListener.java:62)
>       at java.lang.Thread.run(Thread.java:637)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to