[
https://issues.apache.org/jira/browse/THRIFT-4405?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
James E. King III updated THRIFT-4405:
--------------------------------------
Description:
The following tests were added:
* The cpp client for cross test now uses a sequence ID that starts at INT32_MAX
- 10, and advances until it wraps around.
* The cpp client verifies the sequence ID that returns matches what was sent.
* The python client was changed to use pedantic sequence ID checking on all
protocols.
The following errors were identified and fixed:
* In c_glib, thrift_stored_message_protocol was limiting the sequence ID to
[0..G_INTMAX]. This was changed to allow any 32-bit value, matching other
implementations.
* In cpp, JSON protocol, when the server read the header, it used a uint64_t
for processing; this interacted with a bugfix from 2017 that dropped
boost::lexical_cast and switched to std::stringstream, and this corrupted the
negative sequence IDs.
* In python, compact protocol, a negative sequence ID was not handled properly.
Documentation was added for sequence number handling.
was:
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
> Incorrect handling of sequence numbers that wrap to negative
> ------------------------------------------------------------
>
> Key: THRIFT-4405
> URL: https://issues.apache.org/jira/browse/THRIFT-4405
> Project: Thrift
> Issue Type: Improvement
> Components: Test Suite
> Affects Versions: 0.11.0
> Environment: docker ubuntu-xenial
> Reporter: James E. King III
> Assignee: James E. King III
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> The following tests were added:
> * The cpp client for cross test now uses a sequence ID that starts at
> INT32_MAX - 10, and advances until it wraps around.
> * The cpp client verifies the sequence ID that returns matches what was sent.
> * The python client was changed to use pedantic sequence ID checking on all
> protocols.
> The following errors were identified and fixed:
> * In c_glib, thrift_stored_message_protocol was limiting the sequence ID to
> [0..G_INTMAX]. This was changed to allow any 32-bit value, matching other
> implementations.
> * In cpp, JSON protocol, when the server read the header, it used a uint64_t
> for processing; this interacted with a bugfix from 2017 that dropped
> boost::lexical_cast and switched to std::stringstream, and this corrupted the
> negative sequence IDs.
> * In python, compact protocol, a negative sequence ID was not handled
> properly.
> Documentation was added for sequence number handling.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)