[
https://issues.apache.org/jira/browse/ATLAS-1875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16051537#comment-16051537
]
Christian R edited comment on ATLAS-1875 at 6/16/17 7:58 AM:
-------------------------------------------------------------
Well, this is great news!
How to best proceed from here? Shall I make a pull request against master and
another one against 0.8?
I am writing a simple test now to verify that vertexes do return id , and that
edges return invertex,outvertex.
was (Author: christianmr):
Well, this is great news!
How to best proceed from here? Shall I make a pull request against master and
another one against 0.8?
I am writing a simple test now to verify that vertexes do return id , and that
edges return inedge,outedge.
> Gremlin id is no longer returned for vertices in gremlin query
> --------------------------------------------------------------
>
> Key: ATLAS-1875
> URL: https://issues.apache.org/jira/browse/ATLAS-1875
> Project: Atlas
> Issue Type: Bug
> Components: atlas-core
> Affects Versions: trunk, 0.8-incubating
> Reporter: Christian R
> Labels: dsl, gremlin
>
> Hi,
> while investigating a move from atlas 0.7 to 0.8 (HDP 2.5 to HDP2.6) our
> tests fail on gremlin queries. It turns out that the returned entities in a
> gremlin search in 0.8 does not include the 'id' attribute.
> I've built commit a0bd93945cd45457bbf34a8cb819d4fa4ba72964 (0.8-rc1) on linux
> using berkely and elasticearch to test with.
> The query
> :21000/api/atlas/discovery/search/gremlin?g.V.has('__type.name',
> 'Infrastructure').collect()
> on our 0.7 cluster gives
> {code:json}
> {
> __type.name: "Infrastructure",
> __type.category: "CLASS",
> __type: "typeSystem",
> id: "16640"
> }{code}
> while the same query on my 0.8-rc1 installation gives
> {code:javascript}
> {
> __type.name: "Infrastructure",
> __version: "1",
> __type.category: "CLASS",
> __type.version: "1.0",
> __modificationTimestamp: "1497448424134",
> __type: "typeSystem",
> __type.options: "null",
> __type.description: "Infrastructure",
> __guid: "77d07283-7622-4305-9c0c-09ac5aee86c8",
> __timestamp: "1497448424134"
> }
> {code}
> Certainly more information, but id is missing.
> The very poor DSL performance (see ATLAS-1868) and a need for advanced
> queries led us to base our queries on gremlin. This has worked very well so
> far. We include both edges and nodes in the result set and use the inVertex,
> outVertex and label info on the edges to rebuild our tree on the client side.
> I also see that gremlin has disappeared from version two of the API. Since
> addE and addV lets you insert into the graph I can see how exposing a full
> gremlin endpoint might not be wanted.
> As an example of the queries we run that I haven't been able to express in
> the DSL is
> {noformat}
> query = g.V.has('__guid','xxxx').copySplit(
> _().out('track'),
> _().as('x')
> .out('functions', 'component')
> .loop('x'){true}{true}
> .copySplit(
> _(),
> _().in('part_of'),
> _().outE('functions',
> 'component'),
> _().inE('part_of')
> )
> .exhaustMerge.dedup
> )
> .exhaustMerge
> .collect()
> {noformat}
> this might not be a normal usecase.
> edit to add:
> I looked at GraphBackedDiscoveryService.java and notice that:
> 0.7:
> {code:java}
> else if (r instanceof TitanVertex) {
> Iterable<TitanProperty> ps = ((TitanVertex)
> r).getProperties();
> for (TitanProperty tP : ps) {
> String pName = tP.getPropertyKey().getName();
> Object pValue = ((TitanVertex) r).getProperty(pName);
> if (pValue != null) {
> oRow.put(pName, pValue.toString());
> }
> }
> {code}
> Vs 0.8 code:
> {code:java}
> else if (value instanceof AtlasVertex) {
> AtlasVertex<?,?> vertex = (AtlasVertex<?,?>)value;
> for (String key : vertex.getPropertyKeys()) {
> Object propertyValue =
> GraphHelper.getProperty(vertex, key);
> if (propertyValue != null) {
> oRow.put(key, propertyValue.toString());
> }
> }
> {code}
> look very similar.
> However, 0.8 handles id in edges explicitly while the 0.7 doesn’t treat edges
> explicitly at all.
> {code:java}
> else if(value instanceof AtlasEdge) {
> AtlasEdge edge = (AtlasEdge) value;
> oRow.put("id", edge.getId().toString());
> oRow.put("label", edge.getLabel());
> oRow.put("inVertex",
> edge.getInVertex().getId().toString());
> oRow.put("outVertex",
> edge.getOutVertex().getId().toString());
> for (String propertyKey : edge.getPropertyKeys()) {
> oRow.put(propertyKey, GraphHelper.getProperty(edge,
> propertyKey).toString());
> }
> {code}
> Should a
> oRow.put("id", vertex.getId().toString());
> be added to the vertex-case?
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)