{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":368994540,"defaultBranch":"main","name":"kafka-quotas-plugin","ownerLogin":"strimzi","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2021-05-19T20:33:38.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/34767428?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1716479824.0","currentOid":""},"activityList":{"items":[{"before":"241ca523ba3cdb149dbef4e79a41dd79ddab0499","after":"1b1e75036261ab697188f527d171bcf1331b9bf0","ref":"refs/heads/release-0.3.x","pushedAt":"2024-05-16T09:57:39.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Prepare for 0.3.1 release\n\nSigned-off-by: Jakub Scholz ","shortMessageHtmlLink":"Prepare for 0.3.1 release"}},{"before":"21b8e290cfae3b5f57875246493dd75cfa92b7f1","after":"61aa537a5b4f21e36c28637ddfe06aacad7fa8c1","ref":"refs/heads/main","pushedAt":"2024-05-09T06:42:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"im-konge","name":"Lukáš Král","path":"/im-konge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/53821852?s=80&v=4"},"commit":{"message":"Fix principal exclusion in case of comma in the name (#50)\n\n* fix principal exclusion in case of comma in the name\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* reformat table\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* Keith's comments\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* change CHANGELOG\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* apply comments\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* Jakub's comment - throw an exception when principal is missing User: prefix\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* Update README.md\r\n\r\nCo-authored-by: Keith Wall \r\nSigned-off-by: Lukáš Král <53821852+im-konge@users.noreply.github.com>\r\n\r\n---------\r\n\r\nSigned-off-by: Lukas Kral \r\nSigned-off-by: Lukáš Král <53821852+im-konge@users.noreply.github.com>\r\nCo-authored-by: Keith Wall ","shortMessageHtmlLink":"Fix principal exclusion in case of comma in the name (#50)"}},{"before":"f2baf0601e010e7427b8bac9c2debaf0fabd6b8c","after":"21b8e290cfae3b5f57875246493dd75cfa92b7f1","ref":"refs/heads/main","pushedAt":"2024-04-03T10:20:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"im-konge","name":"Lukáš Král","path":"/im-konge","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/53821852?s=80&v=4"},"commit":{"message":"Set default check interval and add table of properties to README.md (#47)\n\n* set default check-interval to 60s\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* update README with properties table and defaults, fix tests\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* Sam's and Rob's comments\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* comments vol.2\r\n\r\nSigned-off-by: Lukas Kral \r\n\r\n* Update README.md\r\n\r\nCo-authored-by: Sam Barker \r\nSigned-off-by: Lukáš Král <53821852+im-konge@users.noreply.github.com>\r\n\r\n---------\r\n\r\nSigned-off-by: Lukas Kral \r\nSigned-off-by: Lukáš Král <53821852+im-konge@users.noreply.github.com>\r\nCo-authored-by: Sam Barker ","shortMessageHtmlLink":"Set default check interval and add table of properties to README.md (#47"}},{"before":"d6ff6fbe97a64d438607a3cdcdeda0f49a0e1086","after":"f2baf0601e010e7427b8bac9c2debaf0fabd6b8c","ref":"refs/heads/main","pushedAt":"2024-03-27T22:16:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Allow a storage check interval >0 along with no limit configuration (#48)\n\nWhy:\r\nThis will enable us to set a default interval, which will help prevent\r\nconfiguration errors. In the absense of any limit configuration the\r\nstorage check scheduled work will not be enabled, but the broker\r\nwill start and can apply the static produce/fetch quotas.\r\n\r\nSigned-off-by: Robert Young ","shortMessageHtmlLink":"Allow a storage check interval >0 along with no limit configuration (#48"}},{"before":null,"after":"241ca523ba3cdb149dbef4e79a41dd79ddab0499","ref":"refs/heads/release-0.3.x","pushedAt":"2024-03-17T16:58:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Prepare for 0.3.0 release\n\nSigned-off-by: Jakub Scholz ","shortMessageHtmlLink":"Prepare for 0.3.0 release"}},{"before":"baf43802ded23893fbcc1f5ddba859e2eb820432","after":"d6ff6fbe97a64d438607a3cdcdeda0f49a0e1086","ref":"refs/heads/main","pushedAt":"2024-03-17T16:55:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Revert invalid commit\n\nSigned-off-by: Jakub Scholz ","shortMessageHtmlLink":"Revert invalid commit"}},{"before":"b118411441de071b41937804cf8742aac5424ec3","after":"baf43802ded23893fbcc1f5ddba859e2eb820432","ref":"refs/heads/main","pushedAt":"2024-03-17T16:54:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Prepare for 0.3.0 release\n\nSigned-off-by: Jakub Scholz ","shortMessageHtmlLink":"Prepare for 0.3.0 release"}},{"before":"c9e4bf578a395b181e1af8692ecf1fefe55371a9","after":"b118411441de071b41937804cf8742aac5424ec3","ref":"refs/heads/main","pushedAt":"2024-03-17T14:59:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Update some of the dependencies before the release (#45)\n\nSigned-off-by: Jakub Scholz ","shortMessageHtmlLink":"Update some of the dependencies before the release (#45)"}},{"before":"96abfcbcb215589dda1d61c907f890d1016c1bc4","after":"c9e4bf578a395b181e1af8692ecf1fefe55371a9","ref":"refs/heads/main","pushedAt":"2024-03-16T21:00:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Update the Azure CI pipeline (#46)\n\n* Update the Azure CI pipeline\r\n\r\nSigned-off-by: Jakub Scholz \r\n\r\n* Mark the main build\r\n\r\nSigned-off-by: Jakub Scholz \r\n\r\n---------\r\n\r\nSigned-off-by: Jakub Scholz ","shortMessageHtmlLink":"Update the Azure CI pipeline (#46)"}},{"before":"08197ea90d58e615ffc87cceee043cb65e929292","after":"96abfcbcb215589dda1d61c907f890d1016c1bc4","ref":"refs/heads/main","pushedAt":"2024-03-13T15:21:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Add metrics note (#44)\n\n* Add metrics note\r\n\r\nSigned-off-by: Federico Valeri \r\n\r\n* Improve note\r\n\r\nSigned-off-by: Federico Valeri \r\n\r\n---------\r\n\r\nSigned-off-by: Federico Valeri ","shortMessageHtmlLink":"Add metrics note (#44)"}},{"before":"d8327a2857f9ad0fd55ddf624acd4e52e9ab233f","after":"08197ea90d58e615ffc87cceee043cb65e929292","ref":"refs/heads/main","pushedAt":"2023-10-26T07:51:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppatierno","name":"Paolo Patierno","path":"/ppatierno","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5842311?s=80&v=4"},"commit":{"message":"Add caching of volume observations to mitigate inconsistencies between API calls. (#42)\n\n* remove un-needed access modifiers in test.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Refactor: switch to more appropriate functional interface\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add observedAt to VolumeUsageResult and VolumeUsage\r\n\r\nSigned-off-by: Sam Barker \r\nCo-authored-by: Robert Young \r\n\r\n* Caching observations of broker disk usage.\r\n\r\nSigned-off-by: Sam Barker \r\nCo-authored-by: Robert Young \r\n\r\n* Make cache expiry configurable\r\n\r\nSigned-off-by: Sam Barker \r\nCo-authored-by: Robert Young \r\n\r\n* Inject a time source into the quota callback to improve testability\r\n\r\nSigned-off-by: Sam Barker \r\nCo-authored-by: Robert Young \r\n\r\n* Add metric for cache evictions.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Less whining from static analysis.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Add gauge to cover the number of entries in the volume observer cache.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Remove unnecessary qualification of java.lang.String\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* `getEvictionCounter` -> `evictionCounter`.\r\n\r\nAlso document why we get it and ignore it during `createCacheKey`\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* We only have one counter in volumeObserver so drop the name parameter.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Document additiona metrics in the README.md\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n---------\r\n\r\nSigned-off-by: Sam Barker \r\nCo-authored-by: Robert Young ","shortMessageHtmlLink":"Add caching of volume observations to mitigate inconsistencies betwee…"}},{"before":"e8a9da49fa58e538cb80abb48e979937e21fff63","after":"d8327a2857f9ad0fd55ddf624acd4e52e9ab233f","ref":"refs/heads/main","pushedAt":"2023-07-26T08:17:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppatierno","name":"Paolo Patierno","path":"/ppatierno","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5842311?s=80&v=4"},"commit":{"message":"Metrics (#39)\n\n* Create available and consumed bytes metrics per broker per log dir observed.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Fixup intellij warning.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Fix metric tagging so that we can identify which broker emitted each metric.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add io.strimzi.kafka.quotas:type=ThrottleFactor,name=ThrottleFactor\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add io.strimzi.kafka.quotas:type=ThrottleFactor,name=FallbackThrottleFactorApplied\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add io.strimzi.kafka.quotas:type=ThrottleFactor,name=LimitViolated\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add io.strimzi.kafka.quotas:type=VolumeSource,name=ActiveBrokers\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add io.strimzi.kafka.quotas:type=VolumeSource,name=ActiveLogDirs\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Fix issue where the available and consumer bytes would be static over time.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Update spotbugs suppression.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* PR Feedback: update naming convention for counter names.\r\n\r\navailable_bytes -> AvailableBytes\r\nconsumed_bytes -> ConsumedBytes\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* PR Feedback: use constant in defining broker ID tag.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* PR Feedback: More accurate javadoc.\r\n\r\nThe metric names are Yammer metric names rather than mBean names per se.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* PR Feedback: Sanitized mbean names.\r\n\r\nComplies with https://docs.oracle.com/javase/8/docs/api/javax/management/ObjectName.html and excludes `*` and `?` as they indicate patterns and shouldn't appear in object names.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* comma and equals are also not allowed in keys.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Better validation of object name key properties.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add metrics to README.md\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* PR Feedback: Simplify and document sanitization rules.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* PR Feedback: extract constants for static data\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Replace @see with a direct link to JDK 17 docs\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Remove fall back to system properties.\r\n\r\nCan't find any reference to that actually being a supported configuration mechanism.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Document why we use AtomicLongGauge instead of a simple volatile long.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Include `broker.id` in minimum viable config.\r\n\r\nAlso AbstractConfig applies a namespace so need to use `originals` to get at the `broker.id`.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n---------\r\n\r\nSigned-off-by: Sam Barker ","shortMessageHtmlLink":"Metrics (#39)"}},{"before":"32601116f515c7442f8ad43b8037c2e4ee0c6e89","after":"e8a9da49fa58e538cb80abb48e979937e21fff63","ref":"refs/heads/main","pushedAt":"2023-04-14T07:56:35.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"scholzj","name":"Jakub Scholz","path":"/scholzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5658439?s=80&v=4"},"commit":{"message":"Add throttle factor resilience (#37)\n\n* Create VolumeUsageObservation class and use it to wrap observation results\r\n\r\nWhy:\r\nWe are going to introduce a fallback throttle factor that will be used if we\r\nfail to obtain a valid throttle factor for some period of time. To drive this\r\nlogic we will need to tell the observer when there is some failure during\r\nobservation.\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Implement fallback throttle factor with hardcoded 5 minute expiry\r\n\r\nWith this change a throttle factor generated from a successful volume usage\r\nobservation will be eligible for expiry 5 minutes after it is applied in\r\nPolicyBasedThrottle. After 5 minutes, if there have been no successful volume\r\nusage observations in the intervening time, then the throttle factor will be\r\nset to 0.0. This occurs as part of the scheduled job in reaction to a failed\r\nobservation.\r\n\r\nWhy:\r\nFailures are part of life and we can expect calls from the adminclient to\r\nfail at some point. We need to build in some resilience or we risk blocking\r\nall message production to a cluster based on some spurious errors. The other\r\nside of the coin is the user may have no appetite for the risk of filling a volume\r\nwhile we are failing to observe the cluster disk usage.\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Add independent scheduled job checking staleness\r\n\r\nWe execute a second runnable that is only responsible for checking the\r\nvalidity.\r\n\r\nWhy:\r\nIf a volume usage result is not successful, we trigger an expiry check on\r\nthe current throttle factor. This means a long delay in getting the usage\r\nresult could prolong how long the cluster operates with the stale throttle\r\nfactor.\r\n\r\nNote that we need another thread in the pool or a separate thread for this\r\njob as the other job is executing a blocking `get` on a future.\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Parallelise storage check and throttle factor expiry jobs\r\n\r\nWhy:\r\nWe now schedule two jobs with a fixed delay, one to observe the volumes\r\nand update the throttle factor if required and a second to check if the\r\nfactor has expired and set a fallback throttle factor if required. This\r\nsecond job is supposed to be a failsafe in case the volume observation\r\nis taking a long time, delaying the application of stale checking. If\r\nwe drive both jobs on one thread then the volume observation job may\r\nblock the throttle expiration check job. By running with 2 threads the\r\nexpiration check can run.\r\n\r\nThe factor can now be updated from multiple threads so we need better\r\ncontrol over when it is read and written to. With this change we will\r\nbe sure that it has been changed in our thread. Synchronised should\r\nbe fine as it's a relatively infrequent operation and we've synchronized\r\nsome simple computation.\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Make throttle factor resilience options configurable\r\n\r\nAdds config properties:\r\n- client.quota.callback.static.throttle.factor.fallback\r\n Defaults to 1.0, valid values are (0.0, 1.0)\r\n- client.quota.callback.static.throttle.factor.validity.duration\r\n Defaults to PT5M (5 minutes), any ISO 8601 duration string is valid\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Fix spotbugs failures\r\n\r\n- guard against passing reference to mutable collection\r\n- remove throwable getter and use throwable only internally for the toString\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Rename VolumeUsageObservation to VolumeUsageResult\r\n\r\nWhy:\r\nIt's a more typical way to name a success value or failure\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Increase throttle factor expiry check frequency\r\n\r\nWhy:\r\nWe don't need to tie it to the storage check interval and it should be\r\ncheap to run often, keeping in mind that it info logs on each run\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Update help text\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Improve VolumeUsageResult javadoc\r\n\r\nDescribe the states we expect result to be in\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Add comment to mark constructor as test\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Improve javadoc of ThrottleFactor\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Rename TickingClock to TickableClock\r\n\r\nWhy:\r\nTicking makes it sound like it can act independently when it\r\nis only driven by clients calling tick.\r\n\r\nSigned-off-by: Robert Young \r\nCo-authored-by: Sam Barker \r\n\r\n* Fix config property naming.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Consistently start log messages with capital letter.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Improve grammar in comments.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Remove unused fields.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Clean up comments\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Use static import for `VolumeUsageResult.failure`\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Improve test coverage for VolumeSource error conditions.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Consistent exception handling\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Removing downward traveling promise.\r\n\r\nChain calls together in a fashion which handles errors better.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Fixing javadoc warnings.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* Keep spotbugs happy and use the Exception class as a failure marker instead of the full stacktrace.\r\n\r\nCo-authored-by: Robert Young \r\nSigned-off-by: Sam Barker \r\n\r\n* update comment describing default background executor.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Fixup logging to ensure we log call outcomes.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Standardise on ratio as the terminology.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Add a check to ensure result represents one outcome or the other.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Remove the controversial log statement.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* reanme lamda argument\r\n\r\nMakes it consistent with usage at call sites.\r\n\r\nCo-authored-by: Tom Bentley \r\nSigned-off-by: Sam Barker \r\n\r\n* Inline calculate factor.\r\n\r\nAddresses: https://github.com/strimzi/kafka-quotas-plugin/pull/37#discussion_r1159533055\r\nSigned-off-by: Sam Barker \r\n\r\n* Compare double primitives to avoid autoboxing.\r\n\r\nAddresses: https://github.com/strimzi/kafka-quotas-plugin/pull/37#discussion_r1159542350\r\n\r\nGiven the range of values involved concerns about NaN and positive and negative infinity are moot.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* Drop the `fallback` package.\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n* `expireAfter` -> `validFor`\r\n\r\nSigned-off-by: Sam Barker \r\n\r\n---------\r\n\r\nSigned-off-by: Robert Young \r\nSigned-off-by: Sam Barker \r\nSigned-off-by: Sam Barker \r\nCo-authored-by: Sam Barker \r\nCo-authored-by: Sam Barker \r\nCo-authored-by: Tom Bentley ","shortMessageHtmlLink":"Add throttle factor resilience (#37)"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAES3TifwA","startCursor":null,"endCursor":null}},"title":"Activity · strimzi/kafka-quotas-plugin"}