{"push_id":1293186847,"size":23,"distinct_size":1,"ref":"refs/heads/cors","head":"37bb177b18bbcc75f49c29548119ff232159330b","before":"40afa384e77d03c934f88ce57bfe6a4075189b49","commits":[{"sha":"c44808da1b4570abf6c4acbd2f96c91aaadfa3cc","author":{"name":"koji lin","email":"e143ebb84e48ed1b41af953a4bb9420d1c696faf@gmail.com"},"message":"Change metric name of http request/response\n\nApply this change will make metric name from GET/POST to ${path}#GET/${path}#POST.","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/c44808da1b4570abf6c4acbd2f96c91aaadfa3cc"},{"sha":"00cdbb7a6cf6035e8e6cfc0c69f17cb11269860f","author":{"name":"Trustin Lee","email":"213c4738cc35c04f021cb47d03c4226bdf330636@motd.kr"},"message":"Merge pull request #261 from kojilin/LOG-HTTP\n\nChange metric name of http request/response","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/00cdbb7a6cf6035e8e6cfc0c69f17cb11269860f"},{"sha":"bcbbb8fbca270a75adc9b7c5ac5132a8afaac939","author":{"name":"Trustin Lee","email":"040b30789c62a3676929a311f5b2b3182d3a4c09@linecorp.com"},"message":"Use daemon threads for default ClientFactory threads\n\nMotivation:\n\nBefore 0.21, the I/O event loop threads created by ClientFactory\n(RemoteInvokerFactory) were daemon threads. However, they are not daemon\nthreads anymore, preventing a client application from terminating\nautomatically when its main thread exited already.\n\nModifications:\n\n- Add the constructors that can specify whether the event loop threads\n  are daemon threads or not to some ClientFactory implementations:\n  - NonDecoratingClientFactory\n  - HttpClientFactory\n  - AllInOneClientFactory\n- Make ClientFactory.DEFAULT use daemon threads\n\nResult:\n\nThe default ClientFactory threads have saner life cycle.","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/bcbbb8fbca270a75adc9b7c5ac5132a8afaac939"},{"sha":"d41093ca7984dfb6b05373d9ad76cc90f3c795a5","author":{"name":"Anuraag Agrawal","email":"53f931e4bf6cbeaa26e43a54073fc18713919680@money-design.com"},"message":"Fix NPE in HttpFileServiceTest for files without a detectable mime type.","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/d41093ca7984dfb6b05373d9ad76cc90f3c795a5"},{"sha":"643fa0639f9049a6fefeb100a877bad2bb5add70","author":{"name":"Trustin Lee","email":"213c4738cc35c04f021cb47d03c4226bdf330636@motd.kr"},"message":"Merge pull request #265 from anuraaga/work\n\nFix NPE in HttpFileServiceTest for files without a detectable mime type.","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/643fa0639f9049a6fefeb100a877bad2bb5add70"},{"sha":"48fb89c58597c550425e3ff17fde3dee6b42e008","author":{"name":"Su Ahn Lee","email":"b1607f75da1a5e3312f704c5375b24ef9f245b12@gmail.com"},"message":"Merge pull request #264 from trustin/use_daemon_threads_for_default_client_factory\n\nUse daemon threads for default ClientFactory threads","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/48fb89c58597c550425e3ff17fde3dee6b42e008"},{"sha":"62a41dbcdcddfee483904d5d4a2ca91be88e0552","author":{"name":"Trustin Lee","email":"040b30789c62a3676929a311f5b2b3182d3a4c09@linecorp.com"},"message":"Do not set 'connection' header for HTTP/2 messages\n\nMotivation:\n\nHTTP/2 specification forbids setting the 'connection' header for HTTP/2\nmessages: https://tools.ietf.org/html/rfc7540#section-8.1.2.2\n\ncURL (Nghttp2 to be precise) rejects the response that contains a\n'connection' header. As a result, attempting to query an Armeria HTTP/2\nserver with cURL fails.\n\nModifications:\n\n- Do not add (or remove) the 'connection' header when the current\n  protocol is HTTP/2\n\nResult:\n\n- Conformance with standard\n- Interoperability","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/62a41dbcdcddfee483904d5d4a2ca91be88e0552"},{"sha":"e20e236cd0bed24f86b271bb4f667db1937721aa","author":{"name":"Koji Lin","email":"e143ebb84e48ed1b41af953a4bb9420d1c696faf@gmail.com"},"message":"Merge pull request #268 from trustin/fix_curl_http2_interop\n\nDo not set 'connection' header for HTTP/2 messages","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/e20e236cd0bed24f86b271bb4f667db1937721aa"},{"sha":"07d91018e164992fa8d2ef06534bb8dc40866df4","author":{"name":"Trustin Lee","email":"040b30789c62a3676929a311f5b2b3182d3a4c09@linecorp.com"},"message":"Do not close Http2ObjectEncoder on an HTTP/2 SETTINGS frame\n\nMotivation:\n\nWhen cleartext H1C-to-H2C upgrade occurs, HttpServerHandler uses the\nreception of an HTTP/2 SETTINGS frame as a signal of successful upgrade.\nWhen an HTTP/2 SETTINGS frame is received, HttpServerHandler will\nreplace its responseEncoder (Http1ObjectEncoder) with a new\nHttp2ObjectEncoder.\n\nHowever, when a client sends more than one SETTINGS frame, the second\nSETTINGS frame will make HttpServerHandler replace its responseEncoder\nagain, closing the Http2ObjectEncoder created when the first SETTINGS\nframe was received.\n\nA closed Http2ObjectEncoder causes unexpectedly closed streams.\n\nModifications:\n\nDo not replace Http2ObjectEncoder but only Http1ObjectEncoder.\n\nResult:\n\n- The H1C request with HTTP/2 upgrade headers set is handled correctly.\n- Interoperability with cURL","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/07d91018e164992fa8d2ef06534bb8dc40866df4"},{"sha":"f8d12c8ce3eb012161975b5c7078441a9203f995","author":{"name":"Koji Lin","email":"e143ebb84e48ed1b41af953a4bb9420d1c696faf@gmail.com"},"message":"Merge pull request #269 from trustin/fix_curl_http2_interop_2\n\nDo not close Http2ObjectEncoder on an HTTP/2 SETTINGS frame","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/f8d12c8ce3eb012161975b5c7078441a9203f995"},{"sha":"f1cc4cc93eee22fbc90cff5a91abb39420396c2a","author":{"name":"Joong Kim","email":"63d92378a8923539cb080ebda5a64aae0c488e63@gmail.com"},"message":"Fixed a test case that fails for git.autocrlf in Windows\n\n - chopped test resource file\n - removed trailing new-line char of the expected response string","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/f1cc4cc93eee22fbc90cff5a91abb39420396c2a"},{"sha":"1b51b83fc56b564490d4514e3936bd161d7ac854","author":{"name":"Trustin Lee","email":"213c4738cc35c04f021cb47d03c4226bdf330636@motd.kr"},"message":"Merge pull request #271 from gotchazipc/test-crlf-fix\n\nFixed a test case that fails for git.autocrlf in Windows","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/1b51b83fc56b564490d4514e3936bd161d7ac854"},{"sha":"02f8f98d8e1c572297b7048a130ef902573ae5bf","author":{"name":"Trustin Lee","email":"040b30789c62a3676929a311f5b2b3182d3a4c09@linecorp.com"},"message":"Fix ClassCastException when using Thrift binary type\n\nMotivation:\n\nWhen a Thrift operation has a parameter or a return value whose type is\nbinary, a ThriftCallService will fail with a ClassCastException. It is\nprimarily because TBase.getFieldValue() for a binary field returns a\nbyte array (byte[]) while TBase.setFieldValue() requires a ByteBuffer.\n\nAlso, it is not very easy to figure out the root cause of this sort of\ninternal server errors because the stack trace of the\nTApplicationException shown on the client-side tells a user only the\nexception type and message of the server-side exception. There's no way\nto get the server-side stack trace.\n\nModifications:\n\n- Add an internal utility class 'ThriftFieldAccess' which converts a\n  byte[] into a ByteBuffer\n  - Use it everywhere TBase.getFieldValue() is used.\n- When an internal server error occurs, attach the full stack trace of\n  the server-side exception.\n- Add a test case for a Thrift service with a binary parameter and a\n  binary return value\n  - ThriftServiceTest\n  - ThriftOverHttpClientTest (thanks to @imasahiro)\n- Miscellaneous:\n  - Remove redundant instantiation of Thrift result object in some case\n\nResult:\n\n- Bug squashed\n- Easier tracing at the cost of larger error response. Example:\n\n```\norg.apache.thrift.TApplicationException: internal server error:\n---- BEGIN server-side trace ----\njava.lang.ClassCastException: [B cannot be cast to java.nio.ByteBuffer\n        at com.linecorp.armeria.service.test.thrift.main.BinaryService$process_args.setFieldValue(BinaryService.java:401)\n        at com.linecorp.armeria.service.test.thrift.main.BinaryService$process_args.setFieldValue(BinaryService.java:252)\n        at com.linecorp.armeria.internal.thrift.ThriftFunction.newArgs(ThriftFunction.java:212)\n        at com.linecorp.armeria.server.thrift.ThriftCallService.invoke(ThriftCallService.java:104)\n        at com.linecorp.armeria.server.thrift.ThriftCallService.serve(ThriftCallService.java:95)\n        at com.linecorp.armeria.server.thrift.ThriftCallService.serve(ThriftCallService.java:46)\n        at com.linecorp.armeria.server.thrift.THttpService.invoke(THttpService.java:463)\n        at com.linecorp.armeria.server.thrift.THttpService.decodeAndInvoke(THttpService.java:436)\n        at com.linecorp.armeria.server.thrift.THttpService.lambda$doPost$3(THttpService.java:318)\n        at com.linecorp.armeria.common.util.Functions.lambda$voidFunction$1(Functions.java:192)\n        at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:822)\n        at java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:834)\n        at java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2155)\n        at com.linecorp.armeria.server.thrift.THttpService.doPost(THttpService.java:311)\n        at com.linecorp.armeria.server.http.AbstractHttpService.serve(AbstractHttpService.java:79)\n        at com.linecorp.armeria.server.thrift.ThriftServiceTest.invoke0(ThriftServiceTest.java:620)\n        at com.linecorp.armeria.server.thrift.ThriftServiceTest.invoke(ThriftServiceTest.java:589)\n        at com.linecorp.armeria.server.thrift.ThriftServiceTest.testBinary(ThriftServiceTest.java:529)\n        ...\n---- END server-side trace ----\n\n        at org.apache.thrift.TApplicationException.read(TApplicationException.java:111)\n        at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:79)\n        at com.linecorp.armeria.service.test.thrift.main.BinaryService$Client.recv_process(BinaryService.java:88)\n        at com.linecorp.armeria.server.thrift.ThriftServiceTest.testBinary(ThriftServiceTest.java:531)\n        ...\n```","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/02f8f98d8e1c572297b7048a130ef902573ae5bf"},{"sha":"aa4b04949baed28ac86de0f29ef6f07674909981","author":{"name":"Masahiro Ide","email":"c327ff5dcc26623cb64883551d5749d0674d9f44@gmail.com"},"message":"Merge pull request #262 from trustin/thrift_binary_and_server_trace\n\nFix ClassCastException when using Thrift binary type","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/aa4b04949baed28ac86de0f29ef6f07674909981"},{"sha":"fdcde6a501b7261518ea6af191be259e6cde75a4","author":{"name":"malibu","email":"dfe7c7242cb964b974560fa760c6ca273029137c@gmail.com"},"message":"Fluent API for building virtual hosts with ServerBuilder (#254)\n\nMotivation:\r\n\r\nSetting of defaultVirtualHost and virtualHost will propose a method to be processed at the same level in serverBuilder.\r\n\r\nModifications:\r\n\r\n- ServerBulder - add method for configure to build default virtual host\r\n- VirtualHostBuilder - add constructor for contain ServerBuilder, add method for return ServerBuilder\r\n\r\nResult:\r\n\r\nMore fluent API for building virtual hosts:\r\n\r\n    ServerBuilder sb = new ServerBuilder();\r\n    Server server =\r\n         sb.port(8080, SessionProtocol.HTTP) // Add a port to listen\r\n         .withDefaultVirtualHost() // Add services to the default virtual host.\r\n             .serviceAt(...)\r\n             .serviceUnder(...)\r\n         .and().withVirtualHost(\"*.foo.com\") // Add a virtual host.\r\n             .serviceAt(...)\r\n             .serviceUnder(...)\r\n         .and().build(); // Build","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/fdcde6a501b7261518ea6af191be259e6cde75a4"},{"sha":"67183a1cb3a6af6dfa64c9d098ee9e7c2ba0a825","author":{"name":"Joonghoon Kim","email":"63d92378a8923539cb080ebda5a64aae0c488e63@gmail.com"},"message":"Change user-agent header to be overridable by request (#270)\n\nMotivation:\r\n\r\n - When client apps with external server's log dump, it's hard to\r\n   distinguish some app / requests from others, without some custom header.\r\n - If a client has built with HTTP_HEADERS option, then the headers cannot\r\n   be changed (add/set/remove) by request. So, there's no easy way to make\r\n   some headers have 'default' values.\r\n\r\nModifications:\r\n\r\n - Remove USER_AGENT from black-list of ClientOptions\r\n - Fix HttpClientDelegate to fill default header user-agent header value,\r\n   only when it's abscent\r\n - Change HttpClientDelegate to respect request header entries than\r\n   ClientOption.HTTP_HEADERS\r\n\r\nResult:\r\n\r\n - Can set user-agent header by client option\r\n - Can override user-agent (and any other) header values by request\r\n - Side-effect : The position of user-agent header is moved to the next of\r\n   the host header, like many other http clients.","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/67183a1cb3a6af6dfa64c9d098ee9e7c2ba0a825"},{"sha":"1af0f5a98d66cfeea42956229db224c6d4068bcd","author":{"name":"Trustin Lee","email":"040b30789c62a3676929a311f5b2b3182d3a4c09@linecorp.com"},"message":"Fix indentation in ChainedVirtualHostBuilderTest","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/1af0f5a98d66cfeea42956229db224c6d4068bcd"},{"sha":"1cd91c7cb7b97a48dbe3b2a44621945e7057447b","author":{"name":"Trustin Lee","email":"040b30789c62a3676929a311f5b2b3182d3a4c09@linecorp.com"},"message":"Fix indentation of and simplify HttpClientIntegrationTest\n\n.. as a follow-up commit of 67183a1cb3a6af6dfa64c9d098ee9e7c2ba0a825","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/1cd91c7cb7b97a48dbe3b2a44621945e7057447b"},{"sha":"254171f8fb498a91f97719a206a3ac80ecc7018c","author":{"name":"Trustin Lee","email":"213c4738cc35c04f021cb47d03c4226bdf330636@motd.kr"},"message":"Add support for server-side TMultiplexedProtocol (#260)\n\nMotivation:\r\n\r\nWe added client-side TMultiplexedProtocol support previously, and its\r\ntime to add the serder-side support.\r\n\r\nModifications:\r\n\r\n- Add ThriftServiceEntry that provides the information about a Thrift\r\n  service information\r\n- Make THttpService and ThriftCallService handle multiple Thrift service\r\n  implementations\r\n  - Add factory methods that accepts a Map of Thrift service\r\n    implementations\r\n  - Replace implementation() and intefaces() with entries()\r\n- Add EndpointInfo.fragment so that DocService has enough information to\r\n  call multiplexed services\r\n- Update the front-end (armeria.js and index.html)\r\n  - Display the service name next to the path field\r\n  - Prepend service name to method name when sending a request\r\n- Add the integration test for TMultiplexedProtcol support\r\n\r\nResult:\r\n\r\n- Server-side TMultiplexedProtocol support\r\n- DocService has TMultiplexedProtocol support","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/254171f8fb498a91f97719a206a3ac80ecc7018c"},{"sha":"f00b275a83c5074e2e19c188e59f7bf208dfdcc2","author":{"name":"Trustin Lee","email":"040b30789c62a3676929a311f5b2b3182d3a4c09@linecorp.com"},"message":"[maven-release-plugin] prepare release armeria-0.25.0.Final","distinct":false,"url":"https://api.github.com/repos/trustin/armeria/commits/f00b275a83c5074e2e19c188e59f7bf208dfdcc2"}]}
{"actor":{"display_login":"trustin"}}