{"push_id":685826056,"size":300,"distinct_size":300,"ref":"refs/heads/master","head":"e19e1e29d88e4a20324055bf3ad6f369daf15b67","before":"42e4069be9be64dc7bd0b7a5c495f6a494ef3735","commits":[{"sha":"50315f28c21a14a8ddd6002a29c9f6e1619fddd1","author":{"email":"48c7abc241cbc1b37b75615aa26fe35b4afe0179@free.fr","name":"Frederic Bregier"},"message":"Fix for Issue #3308 related to slice missing retain\n\nMotivations:\nIt seems that slicing a buffer and using this slice to write to CTX will\ndecrease the initial refCnt to 0, while the original buffer is not yet\nfully used (not empty).\n\nModifications:\nAs suggested in the ticket and tested, when the currentBuffer is sliced\nsince it will still be used later on, the currentBuffer is retained.\n\nAdd a test case for this issue.\n\nResult:\nThe currentBuffer still has its correct refCnt when reaching the last\nwrite (not sliced) of 1 and therefore will be released correctly.\nThe exception does no more occur.\n\nThis fix should be applied to all branches >= 4.0.","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/50315f28c21a14a8ddd6002a29c9f6e1619fddd1"},{"sha":"b26ed7d15c64fd135631e043108ebf0936aa60c8","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Do not log CNFE when tcnative is not in classpath\n\nMotivation:\n\nWhen a user deliberatively omitted netty-tcnative from classpath, he or\nshe will see an ugly stack trace of ClassNotFoundException.\n\nModifications:\n\nLog more briefly when netty-tcnative is not in classpath.\n\nResult:\n\nBetter-looking log at DEBUG level","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/b26ed7d15c64fd135631e043108ebf0936aa60c8"},{"sha":"1284842a5627cd8e9ee12c6689f034172904ea10","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Add the URL of the wiki for easier troubleshooting\n\nMotivation:\n\nWhen a user sees an error message, sometimes he or she does not know\nwhat exactly he or she has to do to fix the problem.\n\nModifications:\n\nLog the URL of the wiki pages that might help the user troubleshoot.\n\nResult:\n\nWe are more friendly.","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/1284842a5627cd8e9ee12c6689f034172904ea10"},{"sha":"ec80b1e50f8bc742181737c9e51136816e50aef5","author":{"email":"330e4303411e1fbd4ff825c4416851d277ea7a5f@apple.com","name":"Norman Maurer"},"message":"Eliminate memory copy in ByteToMessageDecoder whenever possible\n\nMotivation:\n\nCurrently when there are bytes left in the cumulation buffer we do a byte copy to produce the input buffer for the decode method. This can put quite some overhead on the impl.\n\nModification:\n\n- Use a CompositeByteBuf to eliminate the byte copy.\n- Allow to specify if a CompositeBytebug should be used or not as some handlers can only act on one ByteBuffer in an efficient way (like SslHandler :( ).\n\nResult:\n\nPerformance improvement as shown in the following benchmark.\n\nWithout this patch:\n[xxx@xxx ~]$ ./wrk-benchmark\nRunning 5m test @ http://xxx:8080/plaintext\n  16 threads and 256 connections\n  Thread Stats   Avg      Stdev     Max   +/- Stdev\n    Latency    20.19ms   38.34ms   1.02s    98.70%\n    Req/Sec   241.10k    26.50k  303.45k    93.46%\n  1153994119 requests in 5.00m, 155.84GB read\nRequests/sec: 3846702.44\nTransfer/sec:    531.93MB\n\nWith the patch:\n[xxx@xxx ~]$ ./wrk-benchmark\nRunning 5m test @ http://xxx:8080/plaintext\n  16 threads and 256 connections\n  Thread Stats   Avg      Stdev     Max   +/- Stdev\n    Latency    17.34ms   27.14ms 877.62ms   98.26%\n    Req/Sec   252.55k    23.77k  329.50k    87.71%\n  1209772221 requests in 5.00m, 163.37GB read\nRequests/sec: 4032584.22\nTransfer/sec:    557.64MB","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/ec80b1e50f8bc742181737c9e51136816e50aef5"},{"sha":"5185a9850ff971fdcd9ea377b7431e688275cf74","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Disable NioUdtMessageRendezvousChannelTest.basicEcho()\n\nMotivation:\n\nNioUdtMessageRendezvoudChannelTest.basicEcho() is flakey on Linux and\nfailing on Windows.\n\nModifications:\n\nDisable the problematic test until it's fixed.\n\nResult:\n\nLess annoyance","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/5185a9850ff971fdcd9ea377b7431e688275cf74"},{"sha":"4fa0ed980f11316a219efca9159f910e1325d151","author":{"email":"de0499122e683fcd53ee0c6854a8ae7123aee2d6@twitter.com","name":"Jeff Pinner"},"message":"SPDY: fix support for pushed resources in SpdyHttpEncoder\n\nMotivation:\n\nThe SpdyHttpDecoder was modified to support pushed resources that are\ndivided into multiple frames. The decoder accepts a pushed\nSpdySynStreamFrame containing the request headers, followed by a\nSpdyHeadersFrame containing the response headers.\n\nModifications:\n\nThis commit modifies the SpdyHttpEncoder so that it encodes pushed\nresources in a format that the SpdyHttpDecoder can decode. The encoder\nwill accept an HttpRequest object containing the request headers,\nfollowed by an HttpResponse object containing the response headers.\n\nResult:\n\nThe SpdyHttpEncoder will create a SpdySynStreamFrame followed by a\nSpdyHeadersFrame when sending pushed resources.","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/4fa0ed980f11316a219efca9159f910e1325d151"},{"sha":"bec2fbcac40eb5d252a69fd9b1b86a3825afc204","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Remove static imports and inner class imports for disambiguation","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/bec2fbcac40eb5d252a69fd9b1b86a3825afc204"},{"sha":"79450e081b37a74da1ae5aaf33de9e831d971d40","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Avoid unnecessary string conversion where possible\n\nMotivation:\n\nHttpResponseStaus, HttpMethod and HttpVersion have methods that return\nAsciiString.  There's no need for object-to-string conversion.\n\nModifications:\n\nUse codeAsText(), name(), text() instead of setInt() and setObject()\n\nResult:\n\nEfficiency","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/79450e081b37a74da1ae5aaf33de9e831d971d40"},{"sha":"ad4418cf9b32974f6ad344ee7fc8474487328afa","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Remove unnecessary loop and indentation in decompressors\n\nMotivation:\n\nDecompression handlers contain heavy use of switch-case statements. We\nuse compact indentation style for 'case' so that we utilize our screen\nreal-estate more efficiently.\n\nAlso, the following decompression handlers do not need to run a loop,\nbecause ByteToMessageDecoder already runs a loop for them:\n\n- FastLzFrameDecoder\n- Lz4FrameDecoder\n- LzfDecoder\n\nModifications:\n\n- Fix indentations\n- Do not wrap the decoding logic with a for loop when unnecessary\n- Handle the case where a FastLz/Lzf frame contains no data properly so\n  that the buffer does not leak and less garbage is produced.\n\nResult:\n\n- Efficiency\n- Compact source code\n- No buffer leak","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/ad4418cf9b32974f6ad344ee7fc8474487328afa"},{"sha":"7867c381cfaa9392f8d80fe0ca1fbe7974ffc73c","author":{"email":"330e4303411e1fbd4ff825c4416851d277ea7a5f@apple.com","name":"Norman Maurer"},"message":"Reduce memory copies when using OpenSslEngine with SslHandler\n\nMotivation:\n\nWhen using OpenSslEngine with the SslHandler it is possible to reduce memory copies by unwrap(...) multiple ByteBuffers at the same time. This way we can eliminate a memory copy that is needed otherwise to cumulate partial received data.\n\nModifications:\n\n- Add OpenSslEngine.unwrap(ByteBuffer[],...) method that can be used to unwrap multiple src ByteBuffer a the same time\n- Use a CompositeByteBuffer in SslHandler for inbound data so we not need to memory copy\n- Add OpenSslEngine.unwrap(ByteBuffer[],...) in SslHandler if OpenSslEngine is used and the inbound ByteBuf is backed by more then one ByteBuffer\n- Reduce object allocation\n\nResult:\n\nSslHandler is faster when using OpenSslEngine and produce less GC","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/7867c381cfaa9392f8d80fe0ca1fbe7974ffc73c"},{"sha":"d78428139b84d7efd0c59c72a969c938690695cb","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Fix IndexOutOfBoundsException from SslHandler on JDK 8\n\nMotivation:\n\nWhen SslHandler.unwrap() copies SSL records into a heap buffer, it does\nnot update the start offset, causing IndexOutOfBoundsException.\n\nModifications:\n\n- Copy to a heap buffer before calling unwrap() for simplicity\n- Do not copy an empty buffer to a heap buffer.\n  - unwrap(... EMPTY_BUFFER ...) never involves copying now.\n- Use better parameter names for unwrap()\n- Clean-up log messages\n\nResult:\n\n- Bugs fixed\n- Cleaner code","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/d78428139b84d7efd0c59c72a969c938690695cb"},{"sha":"cbc54f91450488537fcac97f02fcd999101d5304","author":{"email":"48c7abc241cbc1b37b75615aa26fe35b4afe0179@free.fr","name":"Frederic Bregier"},"message":"Accept ';' '\\\\\"' in the filename of HTTP Content-Disposition header\n\nMotivation:\nHttpPostMultipartRequestDecoder threw an ArrayIndexOutOfBoundsException\nwhen trying to decode Content-Disposition header with filename\ncontaining ';' or protected \\\\\".\nSee issue #3326 and #3327.\n\nModifications:\nAdded splitMultipartHeaderValues method which cares about quotes, and\nuse it in splitMultipartHeader method, instead of StringUtils.split.\n\nResult:\nFilenames can contain semicolons and protected \\\\\".","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/cbc54f91450488537fcac97f02fcd999101d5304"},{"sha":"f10f97d6c77a198b26482f48c2df218a884e2372","author":{"email":"330e4303411e1fbd4ff825c4416851d277ea7a5f@apple.com","name":"Norman Maurer"},"message":"Fix compilation error introduced by 7f907e8c2aa2284ea8e48953ec5d3b5f13ed9435","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/f10f97d6c77a198b26482f48c2df218a884e2372"},{"sha":"14039623137f2bfdaec9a7228e72fe94c663ded5","author":{"email":"a88826f976a431613522f56b2d8f5c2164a929ce@gmail.com","name":"JongYoonLim"},"message":"Fix typo in param name","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/14039623137f2bfdaec9a7228e72fe94c663ded5"},{"sha":"1b8e8ce6f150c6badfd0bd318df932e5d5940335","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Make NetUtil.isValidIp4Word() private\n\nWe have deprecated NetUtil.isValidIp4Word() in 4.0. See:\n\n- b0747e743251c786ddd1a6d524af6b34303bd4a3","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/1b8e8ce6f150c6badfd0bd318df932e5d5940335"},{"sha":"5692c1e945401a5be2df9d65b511a7d23d6ec222","author":{"email":"727f5a73bc32bd3fe5405dc1d53b82e9d7f8c87b@excilys.com","name":"Stephane Landelle"},"message":"RFC6265 cookies support\n\nMotivation:\n\nCurrently Netty supports a weird implementation of RFC 2965.\nFirst, this RFC has been deprecated by RFC 6265 and nobody on the\ninternet use this format.\n\nThen, there's a confusion between client side and server side encoding\nand decoding.\n\nTypically, clients should only send name=value pairs.\n\nThis PR introduces RFC 6265 support, but keeps on supporting RFC 2965 in\nthe sense that old unused fields are simply ignored, and Cookie fields\nwon't be populated. Deprecated fields are comment, commentUrl, version,\ndiscard and ports.\n\nIt also provides a mechanism for safe server-client-server roundtrip, as\nUser-Agents are not supposed to interpret cookie values but return them\nas-is (e.g. if Set-Cookie contained a quoted value, it should be sent\nback in the Cookie header in quoted form too).\n\nAlso, there are performance gains to be obtained by not allocating the\nattribute name Strings, as we only want to match them to find which POJO\nfield to populate.\n\nModifications:\n\n- New RFC6265ClientCookieEncoder/Decoder and\n  RFC6265ServerCookieEncoder/Decoder pairs that live alongside old\n  CookieEncoder/Decoder pair to not break backward compatibility.\n- New Cookie.rawValue field, used for lossless server-client-server\n  roundtrip.\n\nResult:\n\nRFC 6265 support.\nClean separation of client and server side.\n\nDecoder performance gain:\n\nBenchmark                     Mode  Samples        Score        Error\nUnits\nparseOldClientDecoder        thrpt       20  2070169,228 ± 105044,970\nops/s\nparseRFC6265ClientDecoder    thrpt       20  2954015,476 ± 126670,633\nops/s\n\nThis commit closes #3221 and #1406.","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/5692c1e945401a5be2df9d65b511a7d23d6ec222"},{"sha":"6cf93c8b8da76aebc0bce8b2fe7ff2cb8f928176","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Remove Rfc6265 prefix from cookie encoders and decoders\n\nMotivation:\n\nRfc6265Client/ServerCookieEncoder is a better replacement of the old\nClient/ServerCookieEncoder, and thus there's no point of keeping both.\n\nModifications:\n\n- Remove the old Client/ServerCookieEncoder\n- Remove the 'Rfc6265' prefix from the new cookie encoder/decoder\n  classes\n- Deprecate CookieDecoder\n\nResult:\n\nWe have much better cookie encoder/decoder implementation now.","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/6cf93c8b8da76aebc0bce8b2fe7ff2cb8f928176"},{"sha":"0f25e3b0d65d2a26b27b3ba1bfe2df4ee762eec8","author":{"email":"8efd86fb78a56a5145ed7739dcb00c78581c5375@motd.kr","name":"Trustin Lee"},"message":"Remove the deprecated CookieDecoder\n\n- Remove the unused methods in CookieEncoderUtil as well","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/0f25e3b0d65d2a26b27b3ba1bfe2df4ee762eec8"},{"sha":"3b1f15e366c36cffe5e638f60dfddd7fb7badfb9","author":{"email":"c817caf7d3f255e041fb7a494886d2ea5623b4a4@gmail.com","name":"Scott Mitchell"},"message":"Opportunity for lazy initialization in Headers interface\n\nMotivation:\nThe Headers interface had two member variables (addAllVisitor, setAllVisitor) which are not necessarily always needed but are always instantiated.  This may result in excess memory being used.\n\nModifications:\n - addAllVisitor will be accessed via a method addAllVisitor() which will use lazy initialization.\n - setAllVisitor will be accessed via a method addAllVisitor() which will use lazy initialization.\n\nResult:\nPotential memory savings by using lazy initialization.","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/3b1f15e366c36cffe5e638f60dfddd7fb7badfb9"},{"sha":"cee60304dea4eeb779aa60af08332b1a965de984","author":{"email":"c817caf7d3f255e041fb7a494886d2ea5623b4a4@gmail.com","name":"Scott Mitchell"},"message":"Headers remove infrequently used member variables\n\nMotivation:\nThere are two member variables (addAllVisitor, setAllVisitor) which are likely not to be used in the majority of use cases.\n\nModifications:\nRemove these member variables and rely on a method to return a new object when needed.\n\nResult:\nTwo less member variables for each DefaultHeaders instance.","distinct":true,"url":"https://api.github.com/repos/fengjiachun/netty/commits/cee60304dea4eeb779aa60af08332b1a965de984"}]}