{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":46251204,"defaultBranch":"main","name":"armeria","ownerLogin":"line","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-11-16T04:04:01.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/13128444?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1720951622.0","currentOid":""},"activityList":{"items":[{"before":"352494c35f7f46c00a0e6da642258afeabaeb8f9","after":"c208353b2edd94df20a1523d7b34bb349c781292","ref":"refs/heads/main","pushedAt":"2024-07-16T09:30:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ikhoon","name":"Ikhun Um","path":"/ikhoon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1866157?s=80&v=4"},"commit":{"message":"Provide a way to set fallback file extensions for `FileService` (#5806)\n\nMotivation:\r\n\r\nI prefer clean URL patterns without a trailing slash so `/app/projects`\r\nis preferred over `/app/projects/`. If I built `/app/projects` with a\r\nJavascript framework, `/app/projects/index.html` or `/app/projects.html`\r\nmay be exported by the framework which is a common feature.\r\n\r\nIn `FileService`, `/app/projects/index.html` can be served by\r\n`/app/projects/` path, but cannot be found by `/app/projects`. A\r\ntrailing slash `/` can be converted into `/index.html` or an auto index\r\npage. As some fallback logics are already implemented, I didn't want to\r\nadd a new fallback option for a trailing slash.\r\n\r\nAlternatively, I propose an option that appends an extension if there is\r\nno file for the request path. For example, a request sent to\r\n`/app/projects` also finds `/app/projects.[ext]` as a fallback.\r\n\r\nRelated links:\r\n\r\n- #4542\r\n- #1655\r\n- https://ktor.io/docs/server-static-content.html#extensions\r\n\r\nModifications:\r\n\r\n- Allow configuring `fallbackFileExtensions()` via `FileServiceBuilder`\r\n- Find a file with fallback extensions if missing.\r\n\r\nResult:\r\n\r\n- You can now set fallback file extensions to look up files in\r\n`FileService`.\r\n\r\n```java\r\nFileService\r\n .builder(rootDir)\r\n .fallbackFileExtensions(\"html\", \"txt\")\r\n ...\r\n```\r\n- Closes #4542","shortMessageHtmlLink":"Provide a way to set fallback file extensions for FileService (#5806)"}},{"before":"61087f4fb0279936e633ee01dd58fdeb42a76a83","after":null,"ref":"refs/heads/update-public-suffixes","pushedAt":"2024-07-14T10:07:02.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"6e604bb71badc3cf541c0dd5a916b44e48d4e7de","after":"352494c35f7f46c00a0e6da642258afeabaeb8f9","ref":"refs/heads/main","pushedAt":"2024-07-14T10:07:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Update public suffix list (#5810)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: Meri Kim ","shortMessageHtmlLink":"Update public suffix list (#5810)"}},{"before":null,"after":"61087f4fb0279936e633ee01dd58fdeb42a76a83","ref":"refs/heads/update-public-suffixes","pushedAt":"2024-07-14T10:06:25.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Update public suffix list","shortMessageHtmlLink":"Update public suffix list"}},{"before":"88d53ceed823c3310e51751c470af016f5d9c069","after":null,"ref":"refs/heads/update-public-suffixes","pushedAt":"2024-07-13T10:06:14.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"ebb08880ab8aa87f1d6ffe8e0dcf31d09b11544b","after":"6e604bb71badc3cf541c0dd5a916b44e48d4e7de","ref":"refs/heads/main","pushedAt":"2024-07-13T10:06:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Update public suffix list (#5809)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: Meri Kim ","shortMessageHtmlLink":"Update public suffix list (#5809)"}},{"before":null,"after":"88d53ceed823c3310e51751c470af016f5d9c069","ref":"refs/heads/update-public-suffixes","pushedAt":"2024-07-13T10:05:38.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Update public suffix list","shortMessageHtmlLink":"Update public suffix list"}},{"before":"02f4c882db46a2606ce7dd4e126a048ac0758ab4","after":"90c6d3f7e340524e772999e7b7009751a83fd056","ref":"refs/heads/gh-pages","pushedAt":"2024-07-10T05:41:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: acd75628c74e99ec41d3a03bf4ed088669916f77","shortMessageHtmlLink":"deploy: acd7562"}},{"before":"7600f95838e4192db5c406eb271bf16705b19eba","after":"c11d7fd738b952c032f57612b4b73f2e06d6a1d2","ref":"refs/heads/patch_1.29.2","pushedAt":"2024-07-10T05:32:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"armerian","name":"Kim Meri","path":"/armerian","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84899087?s=80&v=4"},"commit":{"message":"Update the project version to 1.29.3-SNAPSHOT","shortMessageHtmlLink":"Update the project version to 1.29.3-SNAPSHOT"}},{"before":null,"after":"7600f95838e4192db5c406eb271bf16705b19eba","ref":"refs/heads/patch_1.29.2","pushedAt":"2024-07-10T05:28:27.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Add the release note for 1.29.2 (#5798)","shortMessageHtmlLink":"Add the release note for 1.29.2 (#5798)"}},{"before":"a38bcf96af4a74f5697662606cc67aca32a835db","after":"ebb08880ab8aa87f1d6ffe8e0dcf31d09b11544b","ref":"refs/heads/main","pushedAt":"2024-07-10T03:47:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Add the release note for 1.29.2 (#5798)","shortMessageHtmlLink":"Add the release note for 1.29.2 (#5798)"}},{"before":"72ebfe12abf7804723a490fe7acfe3a45d46089f","after":"a38bcf96af4a74f5697662606cc67aca32a835db","ref":"refs/heads/main","pushedAt":"2024-07-10T03:46:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Change conflicting meter names in `ServerMetrics` (#5804)\n\nMotivation:\r\n\r\n`MetricCollectingService` uses `.active.requests` to track the number of the current requests. If `armeria.server` is used as the prefix of the meter name, the name conflicts with \"armeria.server.active.requests\" in `ServerMetrics`.\r\n\r\n`ServerMetrics.activeRequests()` counts all requests including `TransientService` which is excluded by `MetricCollectingService` with no `TransientServiceOption`. So, semantically, it would be better to use `.all` to the meter name to indicate that it counts all requests.\r\n\r\nModifications:\r\n\r\n- Rename \"armeria.server.active.requests\" in `ServerMetrics` to \"armeria.server.all.requests{state=active}\".\r\n- Rename \"armeria.server.pending.requests\" in `ServerMetrics` to \"armeria.server.all.requests{state=pending}\".\r\n\r\nResult:\r\n\r\nThe meter names in `ServerMetrics` no longer conflict with `MetricCollectingService`.","shortMessageHtmlLink":"Change conflicting meter names in ServerMetrics (#5804)"}},{"before":"608d61c1fbb5c2c235b52eee8a9c6448bffa395b","after":"72ebfe12abf7804723a490fe7acfe3a45d46089f","ref":"refs/heads/main","pushedAt":"2024-07-05T04:00:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Fix handling of exceptions in `GrpcExceptionHandlerFunction`. (#5796)\n\nMotivation:\r\nThis PR addresses two issues with the `GrpcExceptionHandlerFunction`:\r\n- Peel the exception when calling `apply(RequestContext ctx, Status status, Throwable cause, Metadata metadata)`.\r\n- Convert the cause to a `Status` via `Status.fromThrowable(cause)` before calling the `apply()` method.\r\n\r\nThe reasoning behind the second change is to resolve the behavior discrepancy between a `StatusRuntimeException` being thrown and a `StatusRuntimeException` being handled with `onError`. When the exception is handled with `onError`, it is converted to a `Status` by the gRPC upstream, and `status.getCause()` is specified when calling the `apply()` method. However, when a `StatusRuntimeException` is thrown, the `StatusRuntimeException` is passed as is.\r\n\r\nModifications:\r\n- Fixed to pass the peeled exception in `UnwrappingGrpcExceptionHandlerFunction`.\r\n- Converted the cause to a `Status` using `Status.fromThrowable(cause)` before calling the `apply()` method.\r\n\r\nResult:\r\n- The peeled exception is passed for `GrpcExceptionHandlerFunction.apply(RequestContext ctx, Status status, Throwable cause, Metadata metadata)` method.","shortMessageHtmlLink":"Fix handling of exceptions in GrpcExceptionHandlerFunction. (#5796)"}},{"before":"191fb7db981d1d47de8ce50be0b0f6d5d9dfa8ee","after":"608d61c1fbb5c2c235b52eee8a9c6448bffa395b","ref":"refs/heads/main","pushedAt":"2024-07-05T03:58:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"`WeightRampingUpStrategy` uses locks to avoid occasional selection failure for `XdsEndpointGroup` (#5799)\n\nMotivation:\r\n\r\nhttps://github.com/line/armeria/issues/5749\r\n\r\nWhile re-investigating this issue, I found that the probably cause is the changes introduced by https://github.com/line/armeria/pull/5693\r\n\r\nPreviously, when `updateEndpoints` is called the `endpointSelector` was initialized from the same thread \r\n\r\nhttps://github.com/line/armeria/blob/da7f76a7eebf9b03a51ff68a9245269eee4a5a6d/core/src/main/java/com/linecorp/armeria/client/endpoint/WeightRampingUpStrategy.java#L147-L150\r\n\r\nHowever after the PR above, `updateEndpoints` doesn't update the `endpointSelector` immediately and instead schedules an update task\r\n\r\nhttps://github.com/line/armeria/blob/191fb7db981d1d47de8ce50be0b0f6d5d9dfa8ee/core/src/main/java/com/linecorp/armeria/client/endpoint/WeightRampingUpStrategy.java#L150\r\n\r\nFor this reason, even if `updateEndpoints` is called the `endpointSelector` will remain as the `EMPTY_SELECTOR`.\r\n\r\nhttps://github.com/line/armeria/blob/191fb7db981d1d47de8ce50be0b0f6d5d9dfa8ee/core/src/main/java/com/linecorp/armeria/client/endpoint/WeightRampingUpStrategy.java#L128\r\n\r\nNormally, this isn't an issue since `refreshEndpoints` will be called after the call to `updateEndpoints` which will in turn complete the `select` call. However, `XdsEndpointGroup` is composed of multiple internal `EndpointGroup`s and only `selectNow` is called. Because the initialization event is never propagated to the `XdsEndpointSelector` occasional failures can occur.\r\n\r\nhttps://github.com/line/armeria/blob/191fb7db981d1d47de8ce50be0b0f6d5d9dfa8ee/xds/src/main/java/com/linecorp/armeria/xds/client/endpoint/DefaultLoadBalancer.java#L61-L84\r\n\r\nModifications:\r\n\r\n- Use locks instead of event loops for `updateEndpoints`\r\n\r\nResult:\r\n\r\n- Endpoint selection calls to `WeightRampingUpStrategy` succeeds before the first call to `updateEndpoints` for `XdsEndpointGroup`.\r\n\r\n","shortMessageHtmlLink":"WeightRampingUpStrategy uses locks to avoid occasional selection fa…"}},{"before":"814d849139af030fdbd53e13fe960ad3761e3d33","after":"191fb7db981d1d47de8ce50be0b0f6d5d9dfa8ee","ref":"refs/heads/main","pushedAt":"2024-07-04T09:44:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"},"commit":{"message":"Fix `*ServiceBindingBuilder` to return the correct self type (#5797)\n\nMotivation:\r\n\r\nWhile refactoring Central Dogma, I found that some methods of service binding builders return internal classes or super types.\r\n\r\nModifications:\r\n\r\n- Pass `SELF` type to super classes to return the class itself\r\n\r\nResult:\r\n\r\nService binding builder methods now correctly return the self-types.","shortMessageHtmlLink":"Fix *ServiceBindingBuilder to return the correct self type (#5797)"}},{"before":"deed409283b927f4779a89950911af1ef055c9a0","after":null,"ref":"refs/heads/dependabot/npm_and_yarn/site/multi-2018e78204","pushedAt":"2024-07-03T08:33:31.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"}},{"before":"0a4b7119864849c0897eef670f93db52a01b9aa3","after":null,"ref":"refs/heads/update-public-suffixes","pushedAt":"2024-07-02T10:07:16.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"d30dff0db75915e160b31a427f6f3c0c25fc003b","after":"814d849139af030fdbd53e13fe960ad3761e3d33","ref":"refs/heads/main","pushedAt":"2024-07-02T10:07:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Update public suffix list (#5795)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: Meri Kim ","shortMessageHtmlLink":"Update public suffix list (#5795)"}},{"before":null,"after":"0a4b7119864849c0897eef670f93db52a01b9aa3","ref":"refs/heads/update-public-suffixes","pushedAt":"2024-07-02T10:06:33.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Update public suffix list","shortMessageHtmlLink":"Update public suffix list"}},{"before":"9fbcd3c39e1ef8106602323b108193a6fd7611f8","after":null,"ref":"refs/heads/1.16","pushedAt":"2024-07-02T03:35:29.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"}},{"before":"e077b5882eed8ee7db57ba7391372e6efeb42617","after":null,"ref":"refs/heads/patch_1.28.4","pushedAt":"2024-07-02T03:34:37.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"}},{"before":"508403537910a0448d0822d4cefffa691fd7fc0f","after":null,"ref":"refs/heads/1.29.1","pushedAt":"2024-07-02T03:34:32.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"minwoox","name":"minux","path":"/minwoox","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25103250?s=80&v=4"}},{"before":"f2742518643d3bc5d030916308d9f745cb1aaa78","after":null,"ref":"refs/heads/update-public-suffixes","pushedAt":"2024-06-29T10:06:26.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"00a662e304556b884e4a780022157d274b62780c","after":"d30dff0db75915e160b31a427f6f3c0c25fc003b","ref":"refs/heads/main","pushedAt":"2024-06-29T10:06:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Update public suffix list (#5792)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: Meri Kim ","shortMessageHtmlLink":"Update public suffix list (#5792)"}},{"before":null,"after":"f2742518643d3bc5d030916308d9f745cb1aaa78","ref":"refs/heads/update-public-suffixes","pushedAt":"2024-06-29T10:05:47.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Update public suffix list","shortMessageHtmlLink":"Update public suffix list"}},{"before":"c297f3b174defb553fb06509e2009deded7e26d9","after":null,"ref":"refs/heads/update-public-suffixes","pushedAt":"2024-06-28T10:07:05.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"}},{"before":"10919e448cb8da195c1501c1c08e4e32dedb3cf4","after":"00a662e304556b884e4a780022157d274b62780c","ref":"refs/heads/main","pushedAt":"2024-06-28T10:07:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"mergify[bot]","name":null,"path":"/apps/mergify","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/10562?s=80&v=4"},"commit":{"message":"Update public suffix list (#5791)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: Meri Kim ","shortMessageHtmlLink":"Update public suffix list (#5791)"}},{"before":null,"after":"c297f3b174defb553fb06509e2009deded7e26d9","ref":"refs/heads/update-public-suffixes","pushedAt":"2024-06-28T10:06:00.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Update public suffix list","shortMessageHtmlLink":"Update public suffix list"}},{"before":"5d5008ffe4a5ffaae02ee7de530542a69e47535b","after":"02f4c882db46a2606ce7dd4e126a048ac0758ab4","ref":"refs/heads/gh-pages","pushedAt":"2024-06-28T03:03:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 6d6b689a4656ce97e73b51030094cc404deb332e","shortMessageHtmlLink":"deploy: 6d6b689"}},{"before":"b1d886d7b70dcd8c188e5e96ffcdab4b6219dcd6","after":"508403537910a0448d0822d4cefffa691fd7fc0f","ref":"refs/heads/1.29.1","pushedAt":"2024-06-28T02:55:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"armerian","name":"Kim Meri","path":"/armerian","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84899087?s=80&v=4"},"commit":{"message":"Update the project version to 1.29.2-SNAPSHOT","shortMessageHtmlLink":"Update the project version to 1.29.2-SNAPSHOT"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEgJXFWAA","startCursor":null,"endCursor":null}},"title":"Activity · line/armeria"}