{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":483500211,"defaultBranch":"update","name":"velox","ownerLogin":"oap-project","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2022-04-20T04:00:22.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/69300052?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1727384627.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"589a89175713ed205480a33fd73ddcb47a49100b","ref":"refs/heads/2024_09_27","pushedAt":"2024-09-26T21:03:47.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"9986ad2886d7d91d567318fb11c468ce65312c44","after":"8557008e417acbcf8e97623eb9ca39caae9279f8","ref":"refs/heads/update","pushedAt":"2024-09-26T21:03:43.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"8557008e417acbcf8e97623eb9ca39caae9279f8","ref":"refs/heads/2024_09_26","pushedAt":"2024-09-26T01:02:03.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"JkSelf","name":"JiaKe","path":"/JkSelf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11972570?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"2f62901be87dc8e8da6d0a6eb812581fe625a05a","after":"9986ad2886d7d91d567318fb11c468ce65312c44","ref":"refs/heads/update","pushedAt":"2024-09-25T21:03:41.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"9986ad2886d7d91d567318fb11c468ce65312c44","ref":"refs/heads/2024_09_25","pushedAt":"2024-09-24T21:03:40.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"2f62901be87dc8e8da6d0a6eb812581fe625a05a","ref":"refs/heads/2024_09_24","pushedAt":"2024-09-23T21:03:41.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"1605179d182f1003ce5abaf6a8bb14b30e9441de","after":"2f62901be87dc8e8da6d0a6eb812581fe625a05a","ref":"refs/heads/update","pushedAt":"2024-09-23T21:03:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"5b2dcb0989732a7f67675e35fbdff546ab4c7018","after":"2f62901be87dc8e8da6d0a6eb812581fe625a05a","ref":"refs/heads/2024_09_23","pushedAt":"2024-09-23T01:42:18.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"rui-mo","name":"Rui Mo","path":"/rui-mo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/41687378?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"c2a6e753993e71c2051774d80276c08922074710","ref":"refs/heads/2024_09_20_1","pushedAt":"2024-09-22T22:27:44.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"JkSelf","name":"JiaKe","path":"/JkSelf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11972570?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"5b2dcb0989732a7f67675e35fbdff546ab4c7018","ref":"refs/heads/2024_09_23","pushedAt":"2024-09-22T21:03:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"b2e488f75784fcede239cf631c778902570e7fa9","after":"1605179d182f1003ce5abaf6a8bb14b30e9441de","ref":"refs/heads/update","pushedAt":"2024-09-22T21:03:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"1605179d182f1003ce5abaf6a8bb14b30e9441de","ref":"refs/heads/2024_09_22","pushedAt":"2024-09-21T21:03:38.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"5c0d87e24a84b997dcb1ee7a891205313f5d70a0","after":"b2e488f75784fcede239cf631c778902570e7fa9","ref":"refs/heads/update","pushedAt":"2024-09-21T21:03:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"b2e488f75784fcede239cf631c778902570e7fa9","ref":"refs/heads/2024_09_21","pushedAt":"2024-09-20T21:03:37.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"bf2149c3317ab923a935f48dfcb8129668c09743","after":"5c0d87e24a84b997dcb1ee7a891205313f5d70a0","ref":"refs/heads/update","pushedAt":"2024-09-20T21:03:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"439780881e630d3727a84be3a9da8dff5ad6b592","after":"97e329254cafab11965ebdcd14f143037327f3b4","ref":"refs/heads/branch-1.2","pushedAt":"2024-09-20T13:53:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"weiting-chen","name":"Wei-Ting Chen","path":"/weiting-chen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9245981?s=80&v=4"},"commit":{"message":"Fix hash build memory over use (#10534) (#500)\n\nSummary:\r\nFor duplicate rows memory usage, currently under parallel join build conditions, each build operator reserves memory big enough to accommodate total number of rows across all hash tables from all build operators. Instead each build operator should only reserve memory enough for its own hash table rows.\r\n\r\nThis optimization reduced hash build operator memory usage by 10x and we see total memory reduction of some queries reduced by 70%.\r\n\r\nPull Request resolved: https://github.com/facebookincubator/velox/pull/10534\r\n\r\nReviewed By: zacw7\r\n\r\nDifferential Revision: D60131886\r\n\r\nPulled By: tanjialiang\r\n\r\nfbshipit-source-id: a8c1c777df557dfcfc754ef31164a116fdb917c3\r\n\r\n(cherry picked from commit 3fb96576e5d5e4b0f5f48feb53e95a60288a8179)\r\n\r\nCo-authored-by: Jialiang Tan ","shortMessageHtmlLink":"Fix hash build memory over use (facebookincubator#10534) (#500)"}},{"before":"eefc229917d5c8c18fed23348fc0d7e8b20d0115","after":"439780881e630d3727a84be3a9da8dff5ad6b592","ref":"refs/heads/branch-1.2","pushedAt":"2024-09-20T03:53:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"weiting-chen","name":"Wei-Ting Chen","path":"/weiting-chen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9245981?s=80&v=4"},"commit":{"message":"[Gluten-1.2] Backport facebookincubator#9025 and facebookincubator#10979 to fix the result mismatch in RowsStreamingWindowBuild (#499)\n\n* Revert \"Add RowsStreamingWindowBuild to avoid OOM in Window operator (9025)\"\r\n\r\nThis reverts commit f34c9b1e264abb8e91563c5c358923b75276f5ec.\r\n\r\n* Add RowsStreamingWindowBuild to avoid OOM in Window operator (#9025)\r\n\r\nSummary:\r\nUnlike `StreamingWindowBuild`, `RowLevelStreamingWindowBuild ` in this PR is capable of processing window functions as rows arrive within a single partition, without the need to wait for the entire partition to be ready. This approach can significantly reduce memory usage, especially when a single partition contains a large amount of data. It is particularly suited for optimizing `rank `and `row_number `functions, as well as aggregate window functions with a default frame.\r\n\r\nThe detailed discussions is [here](https://github.com/facebookincubator/velox/discussions/8975). The design doc is [here](https://docs.google.com/document/d/17ONSJHK8XP5Lixm8XBl01RMNl4ntpixiVFe693ahw6k/edit?usp=sharing).\r\n\r\nPull Request resolved: https://github.com/facebookincubator/velox/pull/9025\r\n\r\nTest Plan: Run through 10hrs fuzzer testing\r\n\r\nReviewed By: kagamiori\r\n\r\nDifferential Revision: D61473798\r\n\r\nPulled By: xiaoxmeng\r\n\r\nfbshipit-source-id: 569a752770395330c48a3521bd5421eb89f5623d\r\n\r\n* Fix error message\r\n\r\n* Fix the result mismatch in RowsStreamingWindowBuild (#10979)\r\n\r\nSummary:\r\nFor a Range frame, it is necessary to ensure that the peer is ready before commencing the window function computation\r\n\r\nPull Request resolved: https://github.com/facebookincubator/velox/pull/10979\r\n\r\nReviewed By: kagamiori\r\n\r\nDifferential Revision: D62622816\r\n\r\nPulled By: xiaoxmeng\r\n\r\nfbshipit-source-id: 1a9911da416c867c9e295242a05d0f33fbc2e22d\r\n\r\n---------\r\n\r\nCo-authored-by: Jia Ke ","shortMessageHtmlLink":"[Gluten-1.2] Backport facebookincubator#9025 and facebookincubator#10979"}},{"before":null,"after":"5c0d87e24a84b997dcb1ee7a891205313f5d70a0","ref":"refs/heads/2024_09_20","pushedAt":"2024-09-20T03:20:09.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"JkSelf","name":"JiaKe","path":"/JkSelf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11972570?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"d53bc41b4e42c31c5f38aeb17f48cc5020696266","after":"bf2149c3317ab923a935f48dfcb8129668c09743","ref":"refs/heads/update","pushedAt":"2024-09-19T21:03:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"bf2149c3317ab923a935f48dfcb8129668c09743","ref":"refs/heads/2024_09_19","pushedAt":"2024-09-19T00:53:18.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"JkSelf","name":"JiaKe","path":"/JkSelf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11972570?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"9e22c2eab67793ec822eb13cd7b404f7b76f79ef","after":"eefc229917d5c8c18fed23348fc0d7e8b20d0115","ref":"refs/heads/branch-1.2","pushedAt":"2024-09-18T14:21:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"weiting-chen","name":"Wei-Ting Chen","path":"/weiting-chen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9245981?s=80&v=4"},"commit":{"message":"Release excessively reserved memory in HashBuild even if non-reclaimable (#10782) (#496)\n\nSummary:\r\nWhen hash build is under table building stage, we reserve excessive amount of memory to account for the worst case scenario duplicate rows for NextRowVector (i.e. we assume every row in build table has duplicates, which in most cases is not true). Other than let the query fail because the current stage is unreclaimable, we can perform a desperate try to release the unused reserved memory, giving the query a chance to succeed.\r\n\r\nPull Request resolved: https://github.com/facebookincubator/velox/pull/10782\r\n\r\nReviewed By: xiaoxmeng\r\n\r\nDifferential Revision: D61510068\r\n\r\nPulled By: tanjialiang\r\n\r\nfbshipit-source-id: 1d62804d22ab11d08080e7cf872da0656cbd1010\r\n(cherry picked from commit 55888da7e2d24f8d747cefc9e856c9e7e942c969)\r\n\r\nCo-authored-by: Jialiang Tan ","shortMessageHtmlLink":"Release excessively reserved memory in HashBuild even if non-reclaima…"}},{"before":"88856e6b139c761e7876b1cd3b29e8dad236d8c7","after":"9e22c2eab67793ec822eb13cd7b404f7b76f79ef","ref":"refs/heads/branch-1.2","pushedAt":"2024-09-18T14:19:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"weiting-chen","name":"Wei-Ting Chen","path":"/weiting-chen","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9245981?s=80&v=4"},"commit":{"message":"Let HashProbe keep track of memory consumption when listing join results (#10652) (#495)\n\nSummary:\r\nHash probe currently has limited memory control when extracting results from the hash table. When a small number of large sized rows from the build side is frequently joined with the left side, the total extracted size will explode, making HashProbe using a large amount of memory. And the process of filling output is not in spillable state, and will often cause OOM.\r\nThis PR computes the total size when listing join results in hash probe if there are any variable size columns from the build side that is going to be extracted. It stops listing further when it reaches the maximum size. This can help to control hash probe side memory usage to a confined limit.\r\n\r\nPull Request resolved: https://github.com/facebookincubator/velox/pull/10652\r\n\r\nReviewed By: xiaoxmeng\r\n\r\nDifferential Revision: D60771773\r\n\r\nPulled By: tanjialiang\r\n\r\nfbshipit-source-id: 2cb8c58ba795a0aa1df0485b58e4f6d0100be8f8\r\n(cherry picked from commit 82e549265f65c72ba780855cfdada556cfeab90c)\r\n\r\nCo-authored-by: Jialiang Tan ","shortMessageHtmlLink":"Let HashProbe keep track of memory consumption when listing join resu…"}},{"before":"9c5a8f0db14773769e4becfb5e797403c4300cfc","after":"d53bc41b4e42c31c5f38aeb17f48cc5020696266","ref":"refs/heads/update","pushedAt":"2024-09-18T05:14:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"JkSelf","name":"JiaKe","path":"/JkSelf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11972570?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":"8a14269ec0019a16c211029213b5bd998b58196c","after":"d53bc41b4e42c31c5f38aeb17f48cc5020696266","ref":"refs/heads/2024_09_18","pushedAt":"2024-09-18T01:56:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"JkSelf","name":"JiaKe","path":"/JkSelf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/11972570?s=80&v=4"},"commit":{"message":"[oap] Expose Task::numThreads()","shortMessageHtmlLink":"[oap] Expose Task::numThreads()"}},{"before":null,"after":"8a14269ec0019a16c211029213b5bd998b58196c","ref":"refs/heads/2024_09_18","pushedAt":"2024-09-17T21:03:56.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[10383 ] Support decimal operation not precision loss mode (10383)\n\nSigned-off-by: Yuan Zhou ","shortMessageHtmlLink":"[10383 ] Support decimal operation not precision loss mode (10383)"}},{"before":"0f86a88c5a03d5aa02115f959fd3769d590e6c84","after":"9c5a8f0db14773769e4becfb5e797403c4300cfc","ref":"refs/heads/update","pushedAt":"2024-09-17T21:03:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[10383 ] Support decimal operation not precision loss mode (10383)\n\nSigned-off-by: Yuan Zhou ","shortMessageHtmlLink":"[10383 ] Support decimal operation not precision loss mode (10383)"}},{"before":null,"after":"9c5a8f0db14773769e4becfb5e797403c4300cfc","ref":"refs/heads/2024_09_17","pushedAt":"2024-09-16T21:03:53.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[10383 ] Support decimal operation not precision loss mode (10383)\n\nSigned-off-by: Yuan Zhou ","shortMessageHtmlLink":"[10383 ] Support decimal operation not precision loss mode (10383)"}},{"before":null,"after":"0f86a88c5a03d5aa02115f959fd3769d590e6c84","ref":"refs/heads/2024_09_16","pushedAt":"2024-09-15T21:03:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[10383 ] Support decimal operation not precision loss mode (10383)\n\nSigned-off-by: Yuan Zhou ","shortMessageHtmlLink":"[10383 ] Support decimal operation not precision loss mode (10383)"}},{"before":"7ec1c28b36d943057c524a3437aa16a4133aa15e","after":"0f86a88c5a03d5aa02115f959fd3769d590e6c84","ref":"refs/heads/update","pushedAt":"2024-09-15T21:03:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[10383 ] Support decimal operation not precision loss mode (10383)\n\nSigned-off-by: Yuan Zhou ","shortMessageHtmlLink":"[10383 ] Support decimal operation not precision loss mode (10383)"}},{"before":null,"after":"0f86a88c5a03d5aa02115f959fd3769d590e6c84","ref":"refs/heads/2024_09_15","pushedAt":"2024-09-14T21:03:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"GlutenPerfBot","name":"Gluten Performance Bot","path":"/GlutenPerfBot","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/137994563?s=80&v=4"},"commit":{"message":"[10383 ] Support decimal operation not precision loss mode (10383)\n\nSigned-off-by: Yuan Zhou ","shortMessageHtmlLink":"[10383 ] Support decimal operation not precision loss mode (10383)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNlQyMTowMzo0Ny4wMDAwMDBazwAAAATB9WRA","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xNFQyMTowMzo1MS4wMDAwMDBazwAAAAS2ZvPN"}},"title":"Activity · oap-project/velox"}