[ 
https://issues.apache.org/jira/browse/YARN-4447?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15265414#comment-15265414
 ] 

Varun Saxena commented on YARN-4447:
------------------------------------

Thanks [~sjlee0] for the review.
bq. Do we have an escape/collision issue on the URL, or are they all properly 
encoded/decoded? I'm concerned about colons and spaces specifically. Is it a 
non-issue?
Spaces in the expression will have to be encoded while sending them in URL. 
Colons were being used in previous expressions. If I am not wrong even in 
ATSv1. It should be fine in query params I think. Colons are reserved 
characters only in the scheme section of URI as per my understanding. 
java.net.URI does not seem to have any objections with colons in query param 
either.
This is what RFC 3986 ABNF states :
{panel}
URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
query         = *( pchar / "/" / "?" )
{panel}
Here, query section does not have colon as reserved character.
However, I am not a 100% sure on this either.

bq. In the parser code, I see a lot of Character.toLowerCase() operations. 
Since we need a fully lower-cased input string anyway, I would say simply 
lower-case the input string and operate directly on that. That might make the 
code less verbose with little performance impact.
If you are talking about converting the whole expression to lower case, we 
cannot convert the whole string to lowercase. Because 
configs/metrics/events/info will have to be taken as-is. The reason being we do 
not convert them to lower case when we write them to backend.

bq. It looks like {{TimelineFilter}}s (and subclasses) are now mutable. Then we 
need to be real careful as they should not be used as keys for {{HashMap}}s or 
in {{HashSet}}s. This might be a little paranoid, but it would be great if you 
could add  a sentence in the javadoc that these are not immutable and cannot be 
used in {{HashMap}}s or {{HashSet}}s.
Sure, will add a note in javadoc. Had to make them mutable because I wanted to 
set the variables as I was parsing the expression. Maybe you can have some 
alternate suggestion when you go through the parsing code.

bq. Why elaborate parsing based on chars? Can we not use 
expr.toLowerCase().indexOf("or ") == offset? Was there a performance concern? 
Or was it simply refactored out of the parser code that seems to be doing 
similar things?
You can say that. I moved this code out of parsing code I had initially 
written. 
The main reason for parsing it character by character was to reject invalid 
expressions whenever an unexpected character based on parsing state is 
encountered. And yes, performance was a consideration as well.
However for OR/AND similar effect can be achieved with indexOf, substr and 
trim, which although makes it slightly more expensive operation compared to 
just checking character.  
I do understand though, it will be a negligible penalty.
Basically I just do not want to check for OR but also reject the expression if 
ORR comes in place of OR. If code is confusing to read, I can consider changing 
it.
 
bq. Why did we move isIntegralValue() to TimelineReaderUtils?
Wanted to check if metric values can have non numerical and non integral values 
and if it has reject it while parsing itself. We can defer the checking to 
storage layer as well though and in that case it can be moved back to 
TimelineStorageUtils. Thoughts ?

bq. This is an observation that the size of this test is growing tremendously 
with this patch. Would it be an option to refactor filter-related tests into a 
separate test class? 
Yes, thats correct. We have a JIRA for refactoring test cases(with regards to 
TestHBaseTimelineStorage). We can take up refactoring of this test class as 
well there.


> Provide a mechanism to represent complex filters and parse them at the REST 
> layer 
> ----------------------------------------------------------------------------------
>
>                 Key: YARN-4447
>                 URL: https://issues.apache.org/jira/browse/YARN-4447
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: timelineserver
>    Affects Versions: YARN-2928
>            Reporter: Varun Saxena
>            Assignee: Varun Saxena
>              Labels: yarn-2928-1st-milestone
>         Attachments: Timeline-Filters.pdf, YARN-4447-YARN-2928.01.patch
>
>




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to