{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":17748183,"defaultBranch":"main","name":"StackExchange.Redis","ownerLogin":"StackExchange","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-03-14T14:09:26.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1393171?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1725984752.0","currentOid":""},"activityList":{"items":[{"before":"322c7044d3a056c150099be09b5aa638987a48c8","after":"d7ca83259a868928353088a0435630a850a71c0f","ref":"refs/heads/main","pushedAt":"2024-09-10T16:12:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Add release notes for 2.8.16","shortMessageHtmlLink":"Add release notes for 2.8.16"}},{"before":"77b695e39e323d009e0acd0d58caa1287c42aa2f","after":null,"ref":"refs/heads/craver/fix-connection-dead-check","pushedAt":"2024-09-10T15:54:49.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"}},{"before":"654859f7f5e0e35694f4f65a49c9e65ee122a0dd","after":"322c7044d3a056c150099be09b5aa638987a48c8","ref":"refs/heads/main","pushedAt":"2024-09-10T15:54:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Always perform \"last read\" check in heartbeat when HeartbeatConsistencyChecks is enabled (#2795)\n\nWhen we have slowly adding things to the heartbeat (originally intended just to send data to keep connections alive) like detecting connection health, the if/else has gotten more complicated. With the addition of HeartbeatConsistencyChecks, we prevented some fall throughs to later checks which means that if that option is enabled, we were no longer detecting dead sockets as intended.\r\n\r\nThis is a tactical fix for the combination, but I think overall we should look at refactoring how this entire method works because shoehorning these things into the original structure/purpose has been problematic several times.","shortMessageHtmlLink":"Always perform \"last read\" check in heartbeat when HeartbeatConsisten…"}},{"before":"fb47f20f2edaff46291330e61d89aa35f02cfd5b","after":"77b695e39e323d009e0acd0d58caa1287c42aa2f","ref":"refs/heads/craver/fix-connection-dead-check","pushedAt":"2024-09-10T15:37:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Add release notes","shortMessageHtmlLink":"Add release notes"}},{"before":null,"after":"fb47f20f2edaff46291330e61d89aa35f02cfd5b","ref":"refs/heads/craver/fix-connection-dead-check","pushedAt":"2024-09-10T15:24:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"PhysicalBrdige: Always perform \"last read\" check in heartbeat\n\nWhen we have slowly adding things to the heartbeat (originally intended just to send data to keep connections alive) like detecting connection health, the if/else has gotten more complicated. With the addition of `HeartbeatConsistencyChecks`, we prevented some fall throughs to later checks which means that if that option is enabled, we were no longer detecting dead sockets as intended.\n\nThis is a tactical fix for the combination, but I think overall we should look at refactoring how this entire method works because shoehorning these things into the original structure/purpose has been problematic several times.","shortMessageHtmlLink":"PhysicalBrdige: Always perform \"last read\" check in heartbeat"}},{"before":"4d94342ef4ef01fa0aca9acb61c17616aeca13a2","after":"654859f7f5e0e35694f4f65a49c9e65ee122a0dd","ref":"refs/heads/main","pushedAt":"2024-09-09T15:17:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Release notes for 2.8.14","shortMessageHtmlLink":"Release notes for 2.8.14"}},{"before":"c8d2c28992e6c13053858efc2b04148dd7429899","after":"4d94342ef4ef01fa0aca9acb61c17616aeca13a2","ref":"refs/heads/main","pushedAt":"2024-09-09T15:03:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Update command map for Envoy (#2794)\n\n* Update command map for Envoy\r\n\r\n* Release notes\r\n\r\n* Update format to match other release notes","shortMessageHtmlLink":"Update command map for Envoy (#2794)"}},{"before":"b2b4a88680d7bc43869d6779e0c00ac14bf919da","after":"c8d2c28992e6c13053858efc2b04148dd7429899","ref":"refs/heads/main","pushedAt":"2024-09-03T15:51:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Adding 2.8.12 release notes","shortMessageHtmlLink":"Adding 2.8.12 release notes"}},{"before":"e2e7cdb8d178af150a07eab7a4438c62cbc109c9","after":null,"ref":"refs/heads/craver/fix-cluster-poll","pushedAt":"2024-09-03T15:13:32.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"}},{"before":"e151cd5c8046bb511f144db1999d32b205fef20f","after":"b2b4a88680d7bc43869d6779e0c00ac14bf919da","ref":"refs/heads/main","pushedAt":"2024-09-03T15:13:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Fix #2778: Run CheckInfoReplication even with HeartbeatConsistencyChecks (#2784)\n\n* Fix #2778: Run CheckInfoReplication even with HeartbeatConsistencyChecks\r\n\r\nThis is an issue identified in ##2778 and #2779 where we're not updating replication topology if heartbeat consistency checks are enabled because we exit the `if` structure early. This still runs that check if it's due in both cases, without changing the behavior of the result processor.\r\n\r\n* Add release notes","shortMessageHtmlLink":"Fix #2778: Run CheckInfoReplication even with HeartbeatConsistencyChe…"}},{"before":"4f3409c1cb42dd78e65b8f998d231e0c809b51d7","after":"e2e7cdb8d178af150a07eab7a4438c62cbc109c9","ref":"refs/heads/craver/fix-cluster-poll","pushedAt":"2024-09-03T14:48:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Add release notes","shortMessageHtmlLink":"Add release notes"}},{"before":null,"after":"4f3409c1cb42dd78e65b8f998d231e0c809b51d7","ref":"refs/heads/craver/fix-cluster-poll","pushedAt":"2024-09-03T14:46:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Fix #2778: Run CheckInfoReplication even with HeartbeatConsistencyChecks\n\nThis is an issue identified in ##2778 and #2779 where we're not updating replication topology if heartbeat consistency checks are enabled because we exit the `if` structure early. This still runs that check if it's due in both cases, without changing the behavior of the result processor.","shortMessageHtmlLink":"Fix #2778: Run CheckInfoReplication even with HeartbeatConsistencyChecks"}},{"before":"fe40d17167ec25b16b1d6d6f91b9bea53276d854","after":"e151cd5c8046bb511f144db1999d32b205fef20f","ref":"refs/heads/main","pushedAt":"2024-08-24T15:50:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"docs: fix a PR link (#2776)","shortMessageHtmlLink":"docs: fix a PR link (#2776)"}},{"before":"c0bb4eba181b30c4109d5f561fbf625bb8891fa6","after":"fe40d17167ec25b16b1d6d6f91b9bea53276d854","ref":"refs/heads/main","pushedAt":"2024-08-18T23:38:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Fix #2763: ConnectionMultiplexer.Subscription is not Thread-safe (#2769)\n\n## Issue\r\n#2763\r\n\r\n## Solution\r\nSimply added a lock around `_handlers` in `ConnectionMultiplexer.Subscription`, like I was suggesting in the issue.\r\n\r\n## Unit Test\r\nI added one that does exactly what the example code in #2763 was doing & testing for. I used the other tests as template/guide, let me know if something isn't up to spec.\r\n\r\n---------\r\n\r\nCo-authored-by: Nick Craver ","shortMessageHtmlLink":"Fix #2763: ConnectionMultiplexer.Subscription is not Thread-safe (#2769)"}},{"before":"3701b50430fea92f1bc0a1348549811c8c250903","after":"c0bb4eba181b30c4109d5f561fbf625bb8891fa6","ref":"refs/heads/main","pushedAt":"2024-08-18T13:28:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Add support for HSCAN NOVALUES (#2722)\n\nCloses/Fixes #2721 \r\n\r\nBrings new functions to the API ;\r\n\r\n- IDatabase.HashScanNoValues\r\n- IDatabase.HashScanNoValues\r\n- IDatabaseAsync.HashScanNoValuesAsync\r\n\r\n...to enable the return type consisting of keys in the hash.\r\nAdded some unit and integration tests in paralleled to what is there for `HashScan` and `HashScanAsnyc`.\r\n\r\nCo-authored-by: Nick Craver ","shortMessageHtmlLink":"Add support for HSCAN NOVALUES (#2722)"}},{"before":"0f5545b8437d894e94be27d1a03aaa561d053cba","after":null,"ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-18T13:08:32.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"}},{"before":"e208905e90cbccda1c3f7d8bbcb3ca52828f3c1d","after":"3701b50430fea92f1bc0a1348549811c8c250903","ref":"refs/heads/main","pushedAt":"2024-08-18T13:08:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Build: Simplify Docker layout, fix Envoy, and upgrade tests (#2774)\n\nIt seems the Envoy apts have gone missing breaking out build, so instead of relying on the install let's docker compose their image as a proxy against the Redis supervisor instance as a simpler and faster-to-start setup that also works.\r\n\r\nThis rearranged some things to simplify the Docker story overall. A move to AzDO or just GitHub builds would simplify everything further, but we need to figure out Windows testing against a Docker setup in CI.\r\n\r\nNote: we still can't use Linux containers on a Windows GitHub Actions host (https://github.com/actions/runner/issues/904), so this remains much more complicated and not-really-testing-the-real-thing in the Windows front.","shortMessageHtmlLink":"Build: Simplify Docker layout, fix Envoy, and upgrade tests (#2774)"}},{"before":"7ceb9e7e18539746805f588c76016dda1101ae53","after":"0f5545b8437d894e94be27d1a03aaa561d053cba","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-18T00:24:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Revert to redis-server.exe for now...","shortMessageHtmlLink":"Revert to redis-server.exe for now..."}},{"before":"1893d7c92d5cded589d6498f65c313bf1c2d619a","after":"7ceb9e7e18539746805f588c76016dda1101ae53","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-18T00:07:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Use buildkit","shortMessageHtmlLink":"Use buildkit"}},{"before":"3c6b69fb5941f1874069dd1f051e3a1f8830e57e","after":"1893d7c92d5cded589d6498f65c313bf1c2d619a","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-18T00:01:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Remove image from docker-compose","shortMessageHtmlLink":"Remove image from docker-compose"}},{"before":"2e8e755b6e4047716564401da0f411d8b637a72f","after":"3c6b69fb5941f1874069dd1f051e3a1f8830e57e","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-17T23:55:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Try docker compose on Windows GA","shortMessageHtmlLink":"Try docker compose on Windows GA"}},{"before":"42f6139fdd198d25f04af2b7b2b36e7e605f6865","after":"2e8e755b6e4047716564401da0f411d8b637a72f","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-17T23:47:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Fix Redis docker bits","shortMessageHtmlLink":"Fix Redis docker bits"}},{"before":"e1c76406dbb28d09f9f5f18431745d2fab49d40d","after":"42f6139fdd198d25f04af2b7b2b36e7e605f6865","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-17T18:16:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Add --wait to redis docker startup","shortMessageHtmlLink":"Add --wait to redis docker startup"}},{"before":"f4b78003773c3bd9e17fa9d912be8d18a0923af7","after":"e1c76406dbb28d09f9f5f18431745d2fab49d40d","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-17T18:12:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Upgrade test infrastructure and use --wait for docker health","shortMessageHtmlLink":"Upgrade test infrastructure and use --wait for docker health"}},{"before":null,"after":"f4b78003773c3bd9e17fa9d912be8d18a0923af7","ref":"refs/heads/craver/build-fixes","pushedAt":"2024-08-17T16:52:19.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Build: Simplify Docker layout and fix Envoy\n\nIt seems the Envoy apts have gone missing breaking out build, so instead of relying on the install let's docker compose their image as a proxy against the Redis supervisor instance as a simpler and faster-to-start setup that also works.\n\nThis rearranged some things to simplify the Docker story overall. A move to AzDO or just GitHub builds would simplify everything further, but we need to figure out Windows testing against a Docker setup in CI.","shortMessageHtmlLink":"Build: Simplify Docker layout and fix Envoy"}},{"before":"8346a5c25e56b4823c23d8c13d386025c86603a5","after":"e208905e90cbccda1c3f7d8bbcb3ca52828f3c1d","ref":"refs/heads/main","pushedAt":"2024-08-17T13:04:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Feature: Support for hash field expiration (#2716)\n\nCloses/Fixes #2715 \r\n\r\nThis PR add support for a set of new commands related to expiration of individual members of hash:\r\n\r\n> \t**_HashFieldExpire_** exposes the functionality of commands HPEXPIRE/HPEXPIREAT, for each specified field, it gets the value and sets the field's remaining time to live or expireation timestamp\r\n> \t**_HashFieldExpireTime_** exposes the functionality of command HPEXPIRETIME, for specified field, it gets the remaining time to live in milliseconds or expiration timestamp\r\n> \t**_HashFieldPersist_** exposes the functionality of command HPERSIST, for each specified field, it removes the expiration time\r\n> \t**_HashFieldTimeToLive_** expoes the functionality of command HPTTL, for specified field, it gets the remaining time to live in milliseconds or expiration timestamp\r\n\r\n---------\r\n\r\nCo-authored-by: Nick Craver \r\nCo-authored-by: Nick Craver ","shortMessageHtmlLink":"Feature: Support for hash field expiration (#2716)"}},{"before":"a9a3e2b035e1211b17d4a4d746fda5e3a159aa1b","after":null,"ref":"refs/heads/craver/stylecop","pushedAt":"2024-08-03T14:29:41.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"}},{"before":"4852cca54a4b426bb7244c37153c443ec8bd42f8","after":"8346a5c25e56b4823c23d8c13d386025c86603a5","ref":"refs/heads/main","pushedAt":"2024-08-03T14:29:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Project: Enable StyleCop and fix existing rules to make PRs easier going forward (#2757)\n\n* Project: Enable StyleCop and fix existing rules to make PRs easier going forward\r\n\r\nThis adopts StyleCop and fixes most issues (and disables things we wouldn't want) to make PRs more consistent in an automated way and prevent formatting problems affecting git history, etc. It also does all the documentation enforcement.\r\n\r\nNote: since I had to fix up many anyway, I finally did the `` minimization on `IDatabase`/`IDatabaseAsync` to remove 10% of duplicate documentation. That should also make PRs and maintenance less monotonous.\r\n\r\n* Fix stylecop issues","shortMessageHtmlLink":"Project: Enable StyleCop and fix existing rules to make PRs easier go…"}},{"before":"12384946d8ee99887ec41a03a8bfcbf34f57b3cb","after":"a9a3e2b035e1211b17d4a4d746fda5e3a159aa1b","ref":"refs/heads/craver/stylecop","pushedAt":"2024-08-03T14:21:10.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"Merge remote-tracking branch 'origin/main' into craver/stylecop","shortMessageHtmlLink":"Merge remote-tracking branch 'origin/main' into craver/stylecop"}},{"before":"1e405090ca0b1869088ee48e82ad294c9d4b8339","after":"4852cca54a4b426bb7244c37153c443ec8bd42f8","ref":"refs/heads/main","pushedAt":"2024-08-03T13:47:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NickCraver","name":"Nick Craver","path":"/NickCraver","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/454813?s=80&v=4"},"commit":{"message":"switch to docker compose (#2771)\n\ndocker-compose is not available by default anymore on `ubuntu-latest`\r\n[details here]( https://github.com/actions/runner-images/issues/9692)","shortMessageHtmlLink":"switch to docker compose (#2771)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xMFQxNjoxMjozMi4wMDAwMDBazwAAAASyR1n5","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0wM1QxMzo0NzoyNi4wMDAwMDBazwAAAASQ32lg"}},"title":"Activity · StackExchange/StackExchange.Redis"}