To summarize what we have discussed so far:
1. For API using GremlinRequest/QueryScript, expose response attribute
as part of result. Using an approach to similar to Java client driver (using
ResultSet) . [Priority0]
-- We rely on the last message for response attributes.
2. For GLV, add response attribute as part of Traversal. [Priority 0]
--Rely on the last message for attributes.
3. Expose other server details (like server setting). I would suggest
to split this design discussion into two directions:
a. Metadata for request execution: Only focuses on details
related to request execution. Can be achieved through #1 and #2.
b. Metadata for Gremlin Server: Focuses on overall metadata
for the server. Could be a separate request and fetch the data once for a
connection. Any other suggestion ?
Please add if I am missing something.
Thanks a lot,
Ashwini Singh
Software Engineer @ Azure Cosmos DB
-----Original Message-----
From: Stephen Mallette <[email protected]>
Sent: Friday, March 2, 2018 4:49 AM
To: [email protected]
Subject: Re: [Discuss] Expose metadata from Gremlin Server to Clients.
Perhaps another useful piece of data to return from Gremlin Server:
https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fissues.apache.org%2Fjira%2Fbrowse%2FTINKERPOP-1636&data=04%7C01%7Cashwsing%40microsoft.com%7C621c0a838bd24f13eb4e08d5803bed5d%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636555917242398527%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwifQ%3D%3D%7C-1&sdata=bVd71RV9uDiWWgsjY7SYAIYEhWtLdi7Ijgv9um%2F1JoM%3D&reserved=0
On Thu, Mar 1, 2018 at 6:31 PM, Stephen Mallette <[email protected]>
wrote:
> I just came across this:
>
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fissue
> s.apache.org%2Fjira%2Fbrowse%2FTINKERPOP-1494&data=04%7C01%7Cashwsing%
> 40microsoft.com%7C621c0a838bd24f13eb4e08d5803bed5d%7C72f988bf86f141af9
> 1ab2d7cd011db47%7C1%7C0%7C636555917242398527%7CUnknown%7CTWFpbGZsb3d8e
> yJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwifQ%3D%3D%7C-1&sdata
> =1kY8r73w2Y3euQVnLEGIuAO0fX6ZySOzl%2BVUgbhodpE%3D&reserved=0
>
> There's some ideas for what the open source Gremlin Server could
> return there....for example, perhaps we send back the the host that
> executed the script as the metadata for Gremlin Server?
>
> On Wed, Feb 28, 2018 at 5:37 PM, Ashwini Singh <[email protected].
> invalid> wrote:
>
>>
>> Completely agree on making the change for other drivers too. The plan
>> from our side is to make changes to other drivers as well. My focus
>> on Gremlin.Net was just for an example . Yes, we should make change
>> to Gremlin Server to write the metadata for testing.
>>
>> I agree to adding this to ResultSet and exposing this as part of
>> every response for all the drivers and follow the same pattern as JAVA.
>>
>> On the gremlin GVL part, I agree we should support this on traversal
>> for bytecode as well. For now, we do not have support for bytecode
>> but we are actively working on that and need support for metadata there as
>> well.
>> Thanks for bringing this up. Just wanted to understand how we track
>> issues at tinkerpop, Can we spilt the change to support for gremlin
>> request/script first and bytecode/traversal separately? If we prefer
>> to split the change in chunks, but completely fine with one change.
>>
>> Thanks,
>> Ashwini Singh
>> Software Engineer @ Azure Cosmos DB
>>
>> -----Original Message-----
>> From: Stephen Mallette <[email protected]>
>> Sent: Wednesday, February 28, 2018 9:58 AM
>> To: [email protected]
>> Subject: Re: [Discuss] Expose metadata from Gremlin Server to Clients.
>>
>> This newly created issue might be related to this in some way:
>>
>> https://na01.safelinks.protection.outlook.com/?url=https%3A%
>> 2F%2Fissues.apache.org%2Fjira%2Fbrowse%2FTINKERPOP-1906&
>> data=04%7C01%7Cashwsing%40microsoft.com%7C614b32ff7f98
>> 4c66554808d57ed4d22b%7C72f988bf86f141af91ab2d7cd011db47%7C1%
>> 7C0%7C636554374885412678%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4
>> wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwifQ%3D%3D%7C-1&
>> sdata=w7pyg6JF4KMbPdpBg6t%2F8cE%2BflbnCQQdyMUgc6HDrXw%3D&reserved=0
>>
>> On Wed, Feb 28, 2018 at 11:37 AM, Florian Hockmann <
>> [email protected]>
>> wrote:
>>
>> > I agree that we also should make this metadata available for
>> > traversals since we want to move users away from sending Gremlin
>> > scripts as strings and instead use Bytecode based GLVs.
>> >
>> > Regarding Gremlin.Net: I think that the implementation would be
>> > very similar to how it can be implemented in the Java driver as we
>> > tried to stay close to the Java driver in general. The only
>> > difference is probably that we currently don't have a ResultSet in
>> > Gremlin.Net, but that's only because I didn't see much value in
>> > adding that. Metadata would of course be a good argument to also
>> > implement a ResultSet in Gremlin.Net and then the implementation
>> > should be really basically the same as in the Java driver.
>> >
>> >
>> > Am 28.02.2018 um 16:15 schrieb Stephen Mallette:
>> > > I'm fine with using the last response message as the carrier for
>> > > this metadata on a particular request. I can't really tell if
>> > > there is much
>> > work
>> > > to do on Gremlin Server itself here. It seems like most of the
>> > > work must occur on the various drivers (you mention the .NET api,
>> > > but all of the drivers would need to support this feature).
>> > > However, I would think that
>> > we
>> > > would want Gremlin Server itself to append in some kind metadata
>> > > (maybe query time? something easy....) so that we could write
>> > > tests for the drivers in TinkerPop itself. There is also the
>> > > question of how we would expose this metadata to GLVs which don't
>> > > see response messages at all. A traversal might need some
>> > > metadata itself so that the user could retrieve the server
>> > > metadata from that. The implementation between Java and the
>> > GLVs
>> > > might be different here as the GLV traversal class is typically
>> > > quite lightweight and only used for generating bytecode.
>> > >
>> > > I'm not so sure I like the SubmitAsynWithHeaders() but I don't
>> > > think
>> > too
>> > > much about how the .NET driver works. Is there a reason to not
>> > > always return metadata? could it be expensive to do so? If we
>> > > just added an
>> > extra
>> > > method how would remote traversals configure this option? I think
>> > > we need another way. Generally speaking, for Java, I think I
>> > > would like to see
>> > the
>> > > metadata available to the ResultSet somehow which would in turn
>> > > make it pretty easy to get it on to a Traversal instance once
>> > > that facility was made available.....but as to how to enable or
>> > > disable the return of the metadata, i'm not sure how that should
>> > > work just yet - i need to think on that some more.
>> > >
>> > > For committers who work on GLVs, please take a look at this
>> > > thread and offer your thoughts on how this might work in the GLV
>> > > driver you tend to have the most knowledge on. Let's see if we
>> > > can come to one nice unified solution. At that point, we can
>> > > setup a ticket in JIRA
>> and go from there.
>> > >
>> > > Ashwini, thanks for offering a pull request for this by the way.
>> > > Once we get consensus on how to do this, we'll see if tasks need
>> > > to be divided
>> > and
>> > > how you might contribute.
>> > >
>> > >
>> > >
>> > > On Mon, Feb 26, 2018 at 6:45 PM, Ashwini Singh <
>> > > [email protected]> wrote:
>> > >
>> > >> Hi Stephen,
>> > >>
>> > >> Thanks for considering the change.
>> > >>
>> > >> We would be more inclined towards the first approach since the
>> > >> having a ping/pong websocket message can be a bit noisy and
>> > >> requires
>> > sophisticated
>> > >> handling on the client driver side.
>> > >>
>> > >> For handling multiple response messages. I would suggest to rely
>> > >> on last message as these are the metadata for request execution.
>> > >> Partial
>> > response
>> > >> is very internal to the client drivers (based on limited
>> > >> understanding
>> > of
>> > >> tinkerpop client drivers :) , correct me if you differ) and can
>> > >> be
>> > exposed
>> > >> separately (if really needed later).
>> > >>
>> > >> For implementation, Let us know if we can chip in there and
>> > >> submit
>> PR.
>> > The
>> > >> high level approach to achieve this is to have corresponding
>> > >> SubmitAsynWithHeaders() for every SubmitAsync() that returns a
>> > >> encapsulated result with attributes and IReadOnlyCollectio<T>.
>> > >> Let me
>> > know
>> > >> if you see any concerns adding a new API.
>> > >>
>> > >> Thanks a lot,
>> > >> Ashwini Singh
>> > >> Software Engineer @ Azure Cosmos DB
>> > >>
>> > >>
>> > >>
>> > >> -----Original Message-----
>> > >> From: Stephen Mallette <[email protected]>
>> > >> Sent: Friday, February 23, 2018 5:13 PM
>> > >> To: [email protected]
>> > >> Subject: Re: [Discuss] Expose metadata from Gremlin Server to
>> Clients.
>> > >>
>> > >> Adding those kinds of details was the reason we had the
>> > >> ResponseStatus.attributes Map. I can really only speak for the
>> > >> java
>> > driver
>> > >> as I only know that one really well (we might need other
>> > >> TinkerPop
>> > experts
>> > >> to chime in for python, .net and c#). The java driver doesn't
>> > >> really present ways to get that information easily under usage
>> > >> that doesn't
>> > deal
>> > >> directly with RequestMessage directly (which people typically
>> > >> don't
>> do).
>> > >> Another thing to think about is that since a single request
>> > >> might return multiple ResponseMessage instances you might not
>> > >> want to return that
>> > kind
>> > >> of data on every response - maybe just to be returned on the
>> > >> first (or last
>> > >> message) and then we somehow preserve that information and make
>> > >> it accessible on the result somehow....we sorta have some kinda
>> > >> of
>> > precedent
>> > >> for that with side-effect data generated by bytecode based
>> > >> traversals -
>> > we
>> > >> can probably build in something similar for this sort of thing.
>> > >>
>> > >> I also toyed with the idea of using ping/pong websocket messages
>> > >> to
>> > carry
>> > >> general information about the server to the client. Not sure if
>> > >> any of
>> > the
>> > >> metadata you want to send back would fit in there, but that
>> > >> could be another option.
>> > >>
>> > >> Does any of that sound helpful?
>> > >>
>> > >> On Fri, Feb 23, 2018 at 3:41 PM, Ashwini Singh <
>> > >> [email protected]> wrote:
>> > >>
>> > >>> Hi All,
>> > >>>
>> > >>> We are working on to expose metadata as part of gremlin to
>> > >>> response to client. The metadata is simply a property bag to
>> > >>> provide special message/hints to the client. But currently
>> > >>> client libraries strip off everything and only return the data
>> > >>> to the
>> client.
>> > >>>
>> > >>> Specifically, We want to expose details like Request Charge,
>> > >>> Rate limiting/Retry policy details etc. In the other scenarios
>> > >>> in Cosmos DB we provide these details to the client is through
>> > >>> response headers. We did some investigation around this and one
>> > >>> of the options is expose these is through response attributes.
>> > >>> Gremlin Server can add metadata as part of gremlin response
>> > >>> attributes (For example, set the property bag on
>> > >>> ResponseStatus.Attributes for Gremlin.Net) that can be
>> > >>> serialized
>> by the client drivers to the clients.
>> > >>>
>> > >>> We would like to learn more if there are precedence around
>> > >>> this and if there are any recommended ways to achieve this in
>> > >>> Gremlin protocol and client drivers.
>> > >>>
>> > >>> Thanks a lot,
>> > >>> Ashwini Singh
>> > >>> Software Engineer @ Azure Cosmos DB
>> > >>>
>> > >>>
>> >
>> >
>> >
>>
>
>