{"push_id":905168017,"size":4,"distinct_size":1,"ref":"refs/heads/master","head":"7b11486aa068aa45651d3c9d129bef9169cc7b13","before":"aad0679b176e226546a89338ecebb5197fadf9c3","commits":[{"sha":"3d40e9e41b4cc6027cc567052c6b778adf27f1b4","author":{"email":"bd6d5394796bee9cca2245486eb583fd64b70226@redhat.com","name":"Patrick Uiterwijk"},"message":"Switch the MirrorList server to use threading rather than forking\n\nThis improves the performance significantly for several reasons:\n1. Threading uses a lot less resources than forking in general.\n2. Forks have Copy-On-Write for variables. This means that at the\n   moment of forking, they will just point to the parent process\n   for all of the memory they stored until now, so they don't have\n   to actually copy all of the bits of memory over during fork().\n   The problem here though is at the moment of metalink update:\n   at this moment, the variables that the master proces uses for\n   the in-memory structure suddenly all change. This means that\n   all of the forks that are still active at that time will have\n   to copy all the previous values to make sure they do not get\n   impacted by the update. (Linux-specific, I am not sure about\n   other Operating Systems on this).\n\nOne possible reason I could think threads have been used rather\nthan forks in the past is that with forking the childs do not\nget impacted at the moment of metalink update. However, since\nthe Operating System has cross-thread locks, this is of no\nissue with regards to locking (the OS will take care of it).\nThe duration of these locks isn't a problem either since the\nonly change that happens under the lock is the swapping of one\npointer (the old value) to a new value (the just parsed value).\n\nSigned-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>","distinct":false,"url":"https://api.github.com/repos/fedora-infra/mirrormanager2/commits/3d40e9e41b4cc6027cc567052c6b778adf27f1b4"},{"sha":"f5bb31373892d7fa48d8e25721f0d74287e539cd","author":{"email":"bd6d5394796bee9cca2245486eb583fd64b70226@redhat.com","name":"Patrick Uiterwijk"},"message":"Make the entire database be a single dictionary\n\nThis will make sure that the entire in-memory structure gets\nupdates all in one go, instead of different parts at different\nmoments.\n\nSigned-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>","distinct":false,"url":"https://api.github.com/repos/fedora-infra/mirrormanager2/commits/f5bb31373892d7fa48d8e25721f0d74287e539cd"},{"sha":"8b568a6f281d182737000904a61d1162504ab957","author":{"email":"bd6d5394796bee9cca2245486eb583fd64b70226@redhat.com","name":"Patrick Uiterwijk"},"message":"Use search_covering in radix to avoid having to modify the tree\n\nSigned-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>","distinct":false,"url":"https://api.github.com/repos/fedora-infra/mirrormanager2/commits/8b568a6f281d182737000904a61d1162504ab957"},{"sha":"7b11486aa068aa45651d3c9d129bef9169cc7b13","author":{"email":"0e23e1aa25183634677db757f9f5e912e5bb8b8c@pingoured.fr","name":"Pierre-Yves Chibon"},"message":"Merge pull request #140 from fedora-infra/switch-to-threading\n\nSwitch the MirrorList server to use threading rather than forking","distinct":true,"url":"https://api.github.com/repos/fedora-infra/mirrormanager2/commits/7b11486aa068aa45651d3c9d129bef9169cc7b13"}]}