[ https://issues.apache.org/jira/browse/THRIFT-4405?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16754021#comment-16754021 ]
James E. King III commented on THRIFT-4405: ------------------------------------------- It turns out the languages / combinations above do not need sequence IDs for proper operation. [~codesf] and [~jensg] I think we should refine the requirements here as follows, let me know if you agree or we should discuss more: # A client *{{MUST}}* send a sequence ID with each request (this is part of the protocol header, although I am not sure about text-based ones). # A client *{{MAY}}* make each sequence ID unique, if it requires sequencing for proper operation. This is typical for clients that allow for multiple outstanding requests. Clients that do not require sequencing are *{{RECOMMENDED}}* to send zero for a sequence. # A server *{{MUST}}* provide the same sequence ID with any response related to that request. # A server *{{MUST NOT}}* assume all sequence IDs will be unique. Thoughts? > Proper use of sequence IDs in all clients and servers > ----------------------------------------------------- > > Key: THRIFT-4405 > URL: https://issues.apache.org/jira/browse/THRIFT-4405 > Project: Thrift > Issue Type: Improvement > Components: Test Suite > Affects Versions: 0.10.0 > Environment: docker ubuntu-xenial > Reporter: James E. King III > Assignee: James E. King III > Priority: Major > > Create a feature test that verifies sequence numbers are used properly. > Write a server that verifies clients are generating unique sequence IDs. > Write a client that makes sure servers return the same sequence ID that was > given. > To do this, I enhanced the C++ TProcessorEventHandler class to include a > preReadSeq, which is like preRead but carries the sequence ID. > In the C++ TestServer, I check to see if the sequence numbers are unique and > do not repeat; if any of them do, the cpp test fails. > The following languages properly send sequence IDs (for the binary protocol): > * dart > * go > * nodejs > * java > * rs > The rest of the languages do not. Now, one could argue that unless a > language has a concurrent-safe client and server, sequence IDs are > unnecessary. While that is true, all languages should respect that the > protocol has a sequence ID and there could be future implementations that > will require all clients are well-behaved, which is why I am putting this > test in. > Languages fixed up so unique sequence IDs are sent by the client, and > verified by the tests: > * cpp (was only sending unique sequence IDs for Concurrent clients, now it > does for the regular one too) > * csharp (seqid_ was not bring incremented with each use) > * lua (seqid_ was not bring incremented with each use) > * perl (seqid_ was not bring incremented with each use) > * ruby (seqid_ was not bring incremented with each use and a unit test was > updated to no longer be pending) > Languages left to do: > * c_glib > * erlang > * haskell > * php > * python > * python3 > * any non-cross tested languages -- This message was sent by Atlassian JIRA (v7.6.3#76005)