{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":8104292,"defaultBranch":"master","name":"fishtest","ownerLogin":"official-stockfish","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2013-02-09T00:52:46.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/7926882?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1713029682.0","currentOid":""},"activityList":{"items":[{"before":"002c05190e778c668a385eba8f39aae7ca2881d0","after":"2c9654008d460864573e1288abace32d42778d14","ref":"refs/heads/master","pushedAt":"2024-06-10T19:40:19.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Validate whole run in \"validate_random_run\".\n\nThere are some race conditions in Fishtest so this will trigger\nsome (event) log messages. This will help us fix the race\nconditions.","shortMessageHtmlLink":"Validate whole run in \"validate_random_run\"."}},{"before":"b262cbe8b3234dfca154d72d9e3c0c6bc3cdbf8d","after":"002c05190e778c668a385eba8f39aae7ca2881d0","ref":"refs/heads/master","pushedAt":"2024-06-10T19:39:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Fix for #2060.","shortMessageHtmlLink":"Fix for #2060."}},{"before":"219f3ff58f5c22b81f48fc25019c0fdff9543caf","after":"b262cbe8b3234dfca154d72d9e3c0c6bc3cdbf8d","ref":"refs/heads/master","pushedAt":"2024-06-09T06:03:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Retire self.update_itp_task.schedule_now().\n\nupdate_itp() is a successor to code that also updated the\nlist of unfinished runs but the latter is now managed dynamically.\n\nItp values move slowly on the Fishtest time scale and there is\nno need to micro-manage them.","shortMessageHtmlLink":"Retire self.update_itp_task.schedule_now()."}},{"before":"433e9aef61db2616dd0521a84bca029363b2085b","after":"219f3ff58f5c22b81f48fc25019c0fdff9543caf","ref":"refs/heads/master","pushedAt":"2024-06-08T16:42:26.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Maintain self.unfinished_runs dynamically.","shortMessageHtmlLink":"Maintain self.unfinished_runs dynamically."}},{"before":"582d4ef7248b7fd31d011f94c7fe5aae4a402b1f","after":"433e9aef61db2616dd0521a84bca029363b2085b","ref":"refs/heads/master","pushedAt":"2024-06-08T08:56:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Enhancement of validation.\n\nMany data structure in Fishtest contain references to a run\nobjects. Naively validating such data structures means that we\nare also validating the embedded run objects, which is wasteful\nas these are already validated elsewhere.\n\nThe latest version of vtjson makes it possible to change\nsubschemas during validation.\n\nIn this PR we define the cache_schema as\n\ncache_schema = {\n run_id: {\n \"run\": set_label(runs_schema, \"runs_schema\"),\n\t\"is_changed\": bool,\n \"last_sync_time\": ufloat,\n \"last_access_time\": ufloat,\n },\n}\n\nand we perform validation via\n\nvalidate(cache_schema, self.run_cache, name=\"run_cache\", subs={\"runs_schema\": dict})\n\nRequires upgrade of vtjson.","shortMessageHtmlLink":"Enhancement of validation."}},{"before":"0e0f1c930d3d28bc2590e1df3d030730c0579b60","after":"582d4ef7248b7fd31d011f94c7fe5aae4a402b1f","ref":"refs/heads/master","pushedAt":"2024-06-07T09:26:56.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Dynamic duplicate workers detection.\n\nThis kills the last double loop in request_task().","shortMessageHtmlLink":"Dynamic duplicate workers detection."}},{"before":"d90610c36d1c37325e0721c0cd0604e0f97a979a","after":"0e0f1c930d3d28bc2590e1df3d030730c0579b60","ref":"refs/heads/master","pushedAt":"2024-06-02T08:40:44.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Some fixes in scavenge_dead_tasks\n\n- Remove a race condition\n\n- Do not require a cache entry to be clean before scavenging.\n\nUnder heavy load clean cache entries will be a rarity.","shortMessageHtmlLink":"Some fixes in scavenge_dead_tasks"}},{"before":"fc6b3061f2b358ed83eca0fa595306d6cfcad7eb","after":"d90610c36d1c37325e0721c0cd0604e0f97a979a","ref":"refs/heads/master","pushedAt":"2024-06-01T10:41:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Bug fix for #2030\n\nWith the present code a finished run with run[\"cores\"]>0 will\nnever be evicted from the cache. This is not a legal\ncondition but it happened in the past because of race conditions.\n\nThis explains why #2030 seemed to create more unvalidated runs.\nThe illegal runs become more and more likely to be selected for\nvalidation as they are not evicted and eventually dominate the\ncache.","shortMessageHtmlLink":"Bug fix for #2030"}},{"before":"ed39414cb624686e8f674ed6f0d9b9c4f0934d76","after":"fc6b3061f2b358ed83eca0fa595306d6cfcad7eb","ref":"refs/heads/master","pushedAt":"2024-06-01T10:17:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Only validate unfinished cache runs\n\nOld runs often do not validate due to the existence race\nconditions in the past.","shortMessageHtmlLink":"Only validate unfinished cache runs"}},{"before":"a217f3f1c4e25c870a7b437633522eda3289b145","after":"ed39414cb624686e8f674ed6f0d9b9c4f0934d76","ref":"refs/heads/master","pushedAt":"2024-06-01T10:16:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Add run[\"finished\"]=True to set_inactive_run().\n\nThis eliminates a race condition between stop_run() and\nrequest_task().","shortMessageHtmlLink":"Add run[\"finished\"]=True to set_inactive_run()."}},{"before":"4b461feeb705dc48dac5ac41628449f09df38741","after":"a217f3f1c4e25c870a7b437633522eda3289b145","ref":"refs/heads/master","pushedAt":"2024-06-01T06:03:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Do not evict a run from the cache which has active tasks.\n\nA dead task (a task which has not been updated for 360s) will only\nbe scavenged if it belongs to a run in the cache. However clean\nruns are evicted from the cache after 300s. So if the run does\nnot get new tasks, for example because it has low priority, the\ndead tasks remain unscavenged until somebody explicitly looks at\nthe run (this pulls the run back in the cache).\n\nObviously it is not nice that dead tasks are not scavenged as soon\nas possible. Moreover the fact that the behaviour of the server\nis affected by executing a GET request is a violation of the HTTP\nspecs.","shortMessageHtmlLink":"Do not evict a run from the cache which has active tasks."}},{"before":"9e6310e9b2bacce9c2640e5ebbb2017087729a49","after":"4b461feeb705dc48dac5ac41628449f09df38741","ref":"refs/heads/master","pushedAt":"2024-05-31T16:20:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Every three minutes validate a random run from the cache.\n\nThe reason for this PR is that before introducing more dynamic\nupdates we would like to verify that the dynamic updates of\nrun[\"workers\"] and run[\"cores\"] introduced in\nhttps://github.com/official-stockfish/fishtest/pull/2010\nare bug free.\n\nIn order to facilitate the use of periodic timers in Fishtest\nwe have introduced a new scheduler in utils.py which may be\ninteresting in its own right.\n\nCurrently the timers defined are the cache flush timer and the\ntimer introduced in this PR.","shortMessageHtmlLink":"Every three minutes validate a random run from the cache."}},{"before":"630e5fd19fbc2f932425f8e6a719c4a711c90be4","after":"9e6310e9b2bacce9c2640e5ebbb2017087729a49","ref":"refs/heads/master","pushedAt":"2024-05-31T11:56:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Warn about too low hash values/tc_ratio\n\ncode and idea by @Dubslow, math reviewed by Viz","shortMessageHtmlLink":"Warn about too low hash values/tc_ratio"}},{"before":"b683e47e59e4f12a51d8284614c49210f4e6c8c0","after":"630e5fd19fbc2f932425f8e6a719c4a711c90be4","ref":"refs/heads/master","pushedAt":"2024-05-31T11:37:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Refactor minimum requirement version for compiler and add logic to clang\n\nSame behaviour except that we reject clang in case it is older\nthan 8.0 (released 2019), 7.0 wasn't able to compile latest master for\nme.\n\nRaise worker version to 239 (also server side)","shortMessageHtmlLink":"Refactor minimum requirement version for compiler and add logic to clang"}},{"before":"0771195b8164b5b82c306314b986c7c1de92d133","after":"b683e47e59e4f12a51d8284614c49210f4e6c8c0","ref":"refs/heads/master","pushedAt":"2024-05-31T10:40:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Force c>0, c_end>0 in the schema.\n\nRequires upgrade of vtjson.","shortMessageHtmlLink":"Force c>0, c_end>0 in the schema."}},{"before":"dac696019bc8824670fa2fc35221d64d9a99a6f5","after":"0771195b8164b5b82c306314b986c7c1de92d133","ref":"refs/heads/master","pushedAt":"2024-05-31T10:36:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Document the format of the cache in schemas.py.\n\nRequires upgrade of vtjson.","shortMessageHtmlLink":"Document the format of the cache in schemas.py."}},{"before":"fe39141f64196acf5a64dd33d9de88590445e07a","after":"dac696019bc8824670fa2fc35221d64d9a99a6f5","ref":"refs/heads/master","pushedAt":"2024-05-23T16:41:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Drop not used imports","shortMessageHtmlLink":"Drop not used imports"}},{"before":"5e8653a2fe67a9d86ce49ad71e474594c9ecee71","after":"fe39141f64196acf5a64dd33d9de88590445e07a","ref":"refs/heads/master","pushedAt":"2024-05-22T17:32:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Use \"failed_task\" api to flag a stale active task.\n\nThis is the right thing to do in order to have an audit trail for\ntasks that have not played all their games.","shortMessageHtmlLink":"Use \"failed_task\" api to flag a stale active task."}},{"before":"9875a87d79361506856b4a84cb91f329c73f460c","after":"5e8653a2fe67a9d86ce49ad71e474594c9ecee71","ref":"refs/heads/master","pushedAt":"2024-05-22T16:04:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Show more info about user and in profile\n\ntest_repo added to signup and profile","shortMessageHtmlLink":"Show more info about user and in profile"}},{"before":"7be6f511998c53ae2eb704c27319b355bdf33120","after":"9875a87d79361506856b4a84cb91f329c73f460c","ref":"refs/heads/master","pushedAt":"2024-05-22T14:41:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"This adds a 404 page\n\nI personally prefer a wide banner just like GitHub in https://github.com/ghost/dummy ,\nbut this is good enough to have as a placeholder, feel free to overwrite me with a design.","shortMessageHtmlLink":"This adds a 404 page"}},{"before":"dc8af3e1cb23cd29de1c381cedb63af7846624f4","after":"7be6f511998c53ae2eb704c27319b355bdf33120","ref":"refs/heads/master","pushedAt":"2024-05-19T20:28:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Enhance ugly design","shortMessageHtmlLink":"Enhance ugly design"}},{"before":"2695e6d4d7b23757bf338e26b64c5b352aa90be9","after":"dc8af3e1cb23cd29de1c381cedb63af7846624f4","ref":"refs/heads/master","pushedAt":"2024-05-19T17:55:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Require confirmation before rejecting users\n\nthis adds a confirmation dialog with the approver to confirm rejecting a new user since the decision is sensitive.","shortMessageHtmlLink":"Require confirmation before rejecting users"}},{"before":"6bd86b9cc7afc464b165f41ac382eddc60925bbd","after":"2695e6d4d7b23757bf338e26b64c5b352aa90be9","ref":"refs/heads/master","pushedAt":"2024-05-19T17:32:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Danger alert for mismatching options\n\nthis gives a warning for mismatching options\na patch with hash=512 vs hash=64 has made its place in Stockfish master","shortMessageHtmlLink":"Danger alert for mismatching options"}},{"before":"f45bbd8ab81462ecc0131e55e79f96a3b5cbdd84","after":"6bd86b9cc7afc464b165f41ac382eddc60925bbd","ref":"refs/heads/master","pushedAt":"2024-05-19T16:36:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Give warning for (TP,Prio) exceeds than the normal limits","shortMessageHtmlLink":"Give warning for (TP,Prio) exceeds than the normal limits"}},{"before":"a8797326da3161c706fe892b4d1ce25344e2fdca","after":"f45bbd8ab81462ecc0131e55e79f96a3b5cbdd84","ref":"refs/heads/master","pushedAt":"2024-05-19T16:16:12.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Raise worker version to 238 (also server side)","shortMessageHtmlLink":"Raise worker version to 238 (also server side)"}},{"before":"62486e40e95ad3e392170d04a9bea4c5f99c8a6d","after":"a8797326da3161c706fe892b4d1ce25344e2fdca","ref":"refs/heads/master","pushedAt":"2024-05-19T13:38:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Set days_ltc in clear way and rename script\n\nThe new name reflects that we are purging the \"pgns\" collection.\nThe scheduled task must be updated with the new name.","shortMessageHtmlLink":"Set days_ltc in clear way and rename script"}},{"before":"df646b215538f83a90248669a834230e8bd57ed4","after":"62486e40e95ad3e392170d04a9bea4c5f99c8a6d","ref":"refs/heads/master","pushedAt":"2024-05-18T17:39:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Send an info message to worker if server too busy.","shortMessageHtmlLink":"Send an info message to worker if server too busy."}},{"before":"a51582a974c960ceef2695da345d07c461aa2b33","after":"df646b215538f83a90248669a834230e8bd57ed4","ref":"refs/heads/master","pushedAt":"2024-05-18T17:33:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Do not assign a task for a finished run.","shortMessageHtmlLink":"Do not assign a task for a finished run."}},{"before":"c14a094aa3fc6768975db18757bdead6a8d9dfa0","after":"a51582a974c960ceef2695da345d07c461aa2b33","ref":"refs/heads/master","pushedAt":"2024-05-18T15:49:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Use active_run_lock(run) to protect updates of aggregated data.\n\nWe changed the active_run_locks to be reentrant.","shortMessageHtmlLink":"Use active_run_lock(run) to protect updates of aggregated data."}},{"before":"35cc71d897f232df6dbc07fdd3d1e31704f952f8","after":"c14a094aa3fc6768975db18757bdead6a8d9dfa0","ref":"refs/heads/master","pushedAt":"2024-05-18T13:50:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ppigazzini","name":null,"path":"/ppigazzini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15718418?s=80&v=4"},"commit":{"message":"Fully dynamic updates of run[\"cores\"] and run[\"workers\"].\n\nWe have everywhere replaced\n\ntask[\"active\"] = False\n\nby\n\nset_inactive(task_id, run)\n\nwhich does the required bookkeeping under the task_lock.\n\nThe intention is that the task_lock will only be held for a very\nshort time. So in request_task we only grab it at the moment\nwhen we actually add a task to the run (currently it is held\nduring the whole invocation of request_task).\n\nIf it works then this PR can serve as a model for other types of\nbookkeeping like the number of committed games.\n\nOther change:\n\nWe start the cache timer in __init__.py at application start up\ninstead of during the first invocation of buffer().","shortMessageHtmlLink":"Fully dynamic updates of run[\"cores\"] and run[\"workers\"]."}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEYXzaAwA","startCursor":null,"endCursor":null}},"title":"Activity ยท official-stockfish/fishtest"}