[ https://issues.apache.org/jira/browse/THRIFT-5093?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christopher Friedt updated THRIFT-5093: --------------------------------------- Description: My main use case with the original code change was that I wanted to be able to call `resetBuffer()` on `OBSERVE` buffers and reuse the contents for test cases over and over. While the default `resetBuffer()` cannot be used for that purpose, the same result can be achieved by calling `resetBuffer(ro_mem, ro_mem_size, OBSERVE)` as well, so the workaround is fairly trivial. While the former implementation would be more convenient in some cases, it makes more sense to have consistent behaviour for all `resetBuffer()` implementations. Added test cases to clarify the effect of `MemoryPolicy` on `TMemoryBuffer` behaviour. was: The TMemoryBuffer policy is "OBSERVER" by default in a constructor where an external pointer to memory, and the size of that memory, are passed in. That scenario is for externally managed buffers. As an observer of a buffer, Thrift should only be able to read. However, previously, `buf.available_read()` would return 0 (and subsequently, `buf.read()` would fail). I've added a test as a separate commit, so it's easy to observe the failure and fix. The current behaviour produces the following failure. {noformat} TMemoryBufferTest.cpp(141): error: in "TMemoryBufferTest/test_observer": check N == buf.available_read() has failed [1024 != 0] {noformat} With this change, Thrift applications that use Memory as a transport are able to read `OBSERVER` buffers as well (as one would expect) and the error above is mitigated. > TMemoryBuffer: add test cases to clarify behaviour of MemoryPolicy > ------------------------------------------------------------------ > > Key: THRIFT-5093 > URL: https://issues.apache.org/jira/browse/THRIFT-5093 > Project: Thrift > Issue Type: Improvement > Components: C++ - Library > Affects Versions: 0.17.0 > Reporter: Christopher Friedt > Priority: Minor > Time Spent: 7h 50m > Remaining Estimate: 0h > > My main use case with the original code change was that I wanted to be able > to call `resetBuffer()` on `OBSERVE` buffers and reuse the contents for test > cases over and over. While the default `resetBuffer()` cannot be used for > that purpose, the same result can be achieved by calling `resetBuffer(ro_mem, > ro_mem_size, OBSERVE)` as well, so the workaround is fairly trivial. > While the former implementation would be more convenient in some cases, it > makes more sense to have consistent behaviour for all `resetBuffer()` > implementations. > Added test cases to clarify the effect of `MemoryPolicy` on `TMemoryBuffer` > behaviour. -- This message was sent by Atlassian Jira (v8.20.1#820001)