You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "Prabhu Joseph (JIRA)" <ji...@apache.org> on 2019/05/15 11:58:00 UTC

[jira] [Commented] (YARN-9554) TimelineEntity DAO has java.util.Set interface which JAXB can't handle

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

Prabhu Joseph commented on YARN-9554:
-------------------------------------

{{TimelineEntity}} DAO class has field with {{Set}} interface which JAXB can't handle and so {{ContextFactory}} throws {{JAXBException}} shown in description while creating {{JAXBContextImpl}}. This will be ignored by jersey.
{code:java}
INFO: Couldn't find grammar element for class org.apache.hadoop.yarn.api.records.timeline.TimelineEntity
{code}
All timeline put entities request will invoke createContext with TimelineEntity throws JAXBException and jaxbContext is always null. This again causes slowness due to synchronization while calling createContext which YARN-7266 tried to fix.
{code:java}
Fix of YARN-7266

 synchronized (ContextFactory.class) {
      if (jaxbContext == null) {
        jaxbContext = (JAXBContext) m.invoke((Object) null, classes,
            properties);
      }
    }
    return jaxbContext;
{code}
The patch includes below fixes:

1. If {{createContext}} is for {{TimelineEntity}} and {{TimelineEntities}}, throw {{JAXBException}} (suppressed stacktrace) immediately.

2. Reuse single {{JAXBContextImpl}} for other DAO classes from {{AHSWebServices}} and {{TimelineWebServices}}.

3. If {{createContext}} is for any other classes like {{com.sun.research.ws.wadl.Application}}, let create new context as above context does not know about this class.

Below are the testing done:

1. Junit test classes from hadoop-yarn-server-applicationhistoryservice runs fine
 2. Functional Testing
{code:java}
1. AHSWebServices and TimelineWebServices REST API both from browser and curl command - XML and JSON format.
	
http://<AHS>:8188/ws/v1/applicationhistory/about

http://<AHS>:8188/ws/v1/applicationhistory/apps/application_1557825335381_0001/appattempts/appattempt_1557825335381_0001_000001/containers/container_1557825335381_0001_01_000001

http://<AHS>:8188/ws/v1/applicationhistory/apps/application_1557825335381_0001/appattempts/appattempt_1557825335381_0001_000001/containers/

http://<AHS>:8188/ws/v1/applicationhistory/apps/application_1557825335381_0001/appattempts/appattempt_1557825335381_0001_000001/

http://<AHS>:8188/ws/v1/timeline/about/ws/v1/applicationhistory/apps/application_1557825335381_0001/appattempts/

http://<AHS>:8188/ws/v1/applicationhistory/apps/application_1557825335381_0001/

http://<AHS>:8188/ws/v1/applicationhistory/apps/

http://<AHS>:8188/ws/v1/timeline/about:8188/ws/v1/applicationhistory

http://<AHS>:8188/ws/v1/timeline

http://<AHS>:8188/ws/v1/timeline/about

http://<AHS>:8188/ws/v1/timeline/YARN_APPLICATION

http://<AHS>:8188/ws/v1/timeline/YARN_APPLICATION/application_1557825335381_0001

http://<AHS>:8188/ws/v1/timeline/YARN_APPLICATION/events

http://<AHS>:8188/ws/v1/timeline/HIVE_QUERY_ID

http://<AHS>:8188/ws/v1/timeline/TEZ_DAG_ID

Insert Domain using PUT:

curl -H "Accept: application/json" -H "Content-Type: application/json" -X PUT http://<AHS>:8188/ws/v1/timeline/domain -d '{"id":"abd","description":"test1","owner":"ambari-qa","readers":"ambari-qa","writers":"ambari-qa","createdtime":"123456","modifiedtime":"123456"}'
{"errors":[]}

Get Domain:

http://<AHS>:8188/ws/v1/timeline/domain

http://<AHS>:8188/ws/v1/timeline/domain/abc

{"domains":[{"id":"abc","description":"test","owner":"dr.who","readers":"ambari-qa","writers":"ambari-qa","createdtime":1557835184393,"modifiedtime":1557835209581}]}

Wrong URL:

http://<AHS>:8188/ws/v1/applicationhistory/apps/application_1557825335381_0001/appattempts/containers/

Wrong Accept Type:

curl -H "Accept: application/xml" http://<AHS>:8188/ws/v1/timeline/YARN_APPLICATION

2. MapReduce Service Check

3. Tez Service Check

4. Hive Queries

5. Tez View

6. ApplicationHistory Web App

http://<AHS>:8188/applicationhistory/

7. PUT Entities:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.client.api.TimelineClient;
import org.apache.hadoop.yarn.api.records.timeline.TimelineEntity;
import org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse;

public class Putter {

    public static void main(String[] arg) {

        TimelineClient client = TimelineClient.createTimelineClient();
        client.init(new Configuration());
        client.start();
        TimelineEntity entity = new TimelineEntity();
        entity.setEntityId(arg[0]);
        entity.setEntityType("dummy");
        entity.setStartTime(System.currentTimeMillis());

        try {
            TimelinePutResponse response = client.putEntities(entity);
            System.out.println("RESPONSE="+response.toString());
        } catch (Exception e) {
           e.printStackTrace();
        }
        client.stop();
    }
}

8. GET Entities:

http://<AHS>:8188/ws/v1/timeline/dummy
{code}

> TimelineEntity DAO has java.util.Set interface which JAXB can't handle
> ----------------------------------------------------------------------
>
>                 Key: YARN-9554
>                 URL: https://issues.apache.org/jira/browse/YARN-9554
>             Project: Hadoop YARN
>          Issue Type: Bug
>          Components: timelineservice
>    Affects Versions: 3.3.0
>            Reporter: Prabhu Joseph
>            Assignee: Prabhu Joseph
>            Priority: Major
>         Attachments: YARN-9554-001.patch
>
>
> TimelineEntity DAO has java.util.Set interface which JAXB can't handle. This breaks the fix of YARN-7266.
> {code}
> Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
> java.util.Set is an interface, and JAXB can't handle interfaces.
> 	this problem is related to the following location:
> 		at java.util.Set
> 		at public java.util.HashMap org.apache.hadoop.yarn.api.records.timeline.TimelineEntity.getPrimaryFiltersJAXB()
> 		at org.apache.hadoop.yarn.api.records.timeline.TimelineEntity
> 		at public java.util.List org.apache.hadoop.yarn.api.records.timeline.TimelineEntities.getEntities()
> 		at org.apache.hadoop.yarn.api.records.timeline.TimelineEntities
> 	at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91)
> 	at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:445)
> 	at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277)
> 	at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:124)
> 	at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123)
> 	at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147)
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-issues-help@hadoop.apache.org