{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":601468720,"defaultBranch":"main","name":"mcshredder","ownerLogin":"memcached","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-02-14T06:01:02.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/41836?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1715804736.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"0950400b97e2deeef7c78e91c5db0b50f259e58c","ref":"refs/heads/tls","pushedAt":"2024-05-15T20:25:36.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"TLS checkpoint: POC\n\nThis is now a proof of concept stage for io_uring + openssl.\n\nThere is a _lot_ of work remaining to be done. The code as-is does not\nreflect where it will be.\n\nThis proof of concept gives us:\n- A custom OpenSSL BIO that uses temporary memory buffers and avoids\n double-memcpy'ing data coming in or out, vs using BIO_s_mem directly.\n- Working handshake\n- Working writes (in perfect conditions)\n- Working reads (in perfect conditions)\n\nThis is missing:\n\n- Any close/error handling\n- Lots of edge cases around resizing buffers\n- Buffer caching\n- Lots of unknown crap I'm figuring out with how OpenSSL BIO's work.\n- Proper code isolation.\n\nNext steps:\n\n- Need to rework the io_uring loop to not need to constantly check and\n handle SQE allocation errors.\n- Rework the client read/write buffers into structs similar to\n mcs_tls_buf and move common structures to a new file.\n- Start the long slog of ironing out all of the edge cases and figure\n out buffer object caching for the TLS read/write handlers.","shortMessageHtmlLink":"TLS checkpoint: POC"}},{"before":"860e390ec40040f6c98dca39175fa5ef07f3e5b6","after":"58c3c3d634b43dc30e9ea14ddde4cda818ecd0a3","ref":"refs/heads/main","pushedAt":"2024-03-25T19:55:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"missing free in arg splitter","shortMessageHtmlLink":"missing free in arg splitter"}},{"before":"23d6fb32aafc7b6b93794795386da147a6219983","after":"860e390ec40040f6c98dca39175fa5ef07f3e5b6","ref":"refs/heads/main","pushedAt":"2023-07-28T22:39:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"custom stats example","shortMessageHtmlLink":"custom stats example"}},{"before":"89c4f06dac2e71a6725d6e26098e29f539be57c4","after":"23d6fb32aafc7b6b93794795386da147a6219983","ref":"refs/heads/main","pushedAt":"2023-07-28T22:23:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"update conf/customtest.lua for the res API change","shortMessageHtmlLink":"update conf/customtest.lua for the res API change"}},{"before":"c013e16ceb99845595d85c208e495cffdce4aead","after":"89c4f06dac2e71a6725d6e26098e29f539be57c4","ref":"refs/heads/main","pushedAt":"2023-07-28T21:36:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"build fixes\n\nremoves redundant -O2 from MYCFLAGS for lua compile\nadds -ldl to main binary linkage for older GCC versions.","shortMessageHtmlLink":"build fixes"}},{"before":"75dc10eefa9236f39e0120ce1dd464b0275391cf","after":"c013e16ceb99845595d85c208e495cffdce4aead","ref":"refs/heads/main","pushedAt":"2023-07-27T21:40:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"example data loader + validator.\n\nhad this kicking around a while. feel like committing it so I have the\nhistory.","shortMessageHtmlLink":"example data loader + validator."}},{"before":"7fdfa341ce968f1dfe973530f80c69ef384afe42","after":"75dc10eefa9236f39e0120ce1dd464b0275391cf","ref":"refs/heads/main","pushedAt":"2023-07-27T21:39:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"fix idiot bug + add ms factory\n\nFix fucking dumbassery with request rate.\n\nAdds:\nmcs.ms_factory(prefix, \"flags\")\nmcs.write_factory(req, num, size)\n\nzero alloc writes.","shortMessageHtmlLink":"fix idiot bug + add ms factory"}},{"before":"2a608b4ff5f82090e681de4b507912bda8b58d2d","after":"7fdfa341ce968f1dfe973530f80c69ef384afe42","ref":"refs/heads/main","pushedAt":"2023-07-27T03:48:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"add argument check for add_custom","shortMessageHtmlLink":"add argument check for add_custom"}},{"before":"1ce4fb5a36ea755e61b9265b62b453d304d000c4","after":"2a608b4ff5f82090e681de4b507912bda8b58d2d","ref":"refs/heads/main","pushedAt":"2023-07-26T06:21:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"fix stack leak in mcs.add_custom() with arg\n\nwas copying the table then referencing it.\n\nthink it's fixable in a more specific way but I threw the settop in\nthere because there's no reason not to.\n\nalso moves the thread free code to run in the actual thread instead of\nthe main thread.","shortMessageHtmlLink":"fix stack leak in mcs.add_custom() with arg"}},{"before":"9afe46fe96a9204efc9648bcff97ae91d6496593","after":"1ce4fb5a36ea755e61b9265b62b453d304d000c4","ref":"refs/heads/main","pushedAt":"2023-07-26T05:06:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"mcs.out_wait() tuning\n\n- don't sleep if there's data in the buffer\n- continue sleeping if we wake and there's no data in the buffer.\n\nio_uring doesn't work as well with the eventfd notify pattern in use\nelsewhere in mc-land.","shortMessageHtmlLink":"mcs.out_wait() tuning"}},{"before":"5c91ae54a6c011295ee08c8adb9eee6a1b5f70df","after":"9afe46fe96a9204efc9648bcff97ae91d6496593","ref":"refs/heads/main","pushedAt":"2023-07-26T01:47:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"wrong cflags override for lua make\n\nshould actually optimize + add debug info now.","shortMessageHtmlLink":"wrong cflags override for lua make"}},{"before":"b8ff0d156ec5932eeb27fe6b37fba2bbfcc656ea","after":"5c91ae54a6c011295ee08c8adb9eee6a1b5f70df","ref":"refs/heads/main","pushedAt":"2023-07-25T18:33:54.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"rate_limit: fix accidental unlimited wait\n\nrate_limit = 1 + threads > 1 landed on 0 and thus uncapped rate.","shortMessageHtmlLink":"rate_limit: fix accidental unlimited wait"}},{"before":"74ce5b79ecbf1ac9b6d094ef7f212eecba06503e","after":"b8ff0d156ec5932eeb27fe6b37fba2bbfcc656ea","ref":"refs/heads/main","pushedAt":"2023-07-25T17:21:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"mcs.out_readline() fix off by one\n\nFffffffffffffffffffffffffffffffffffffffffu.","shortMessageHtmlLink":"mcs.out_readline() fix off by one"}},{"before":"5ecbfc2e7fbf06d882252117cac2bac76d675f58","after":"74ce5b79ecbf1ac9b6d094ef7f212eecba06503e","ref":"refs/heads/main","pushedAt":"2023-07-21T18:47:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"make mcs.match work with factories\n\nmerged the requests into a unioned struct.","shortMessageHtmlLink":"make mcs.match work with factories"}},{"before":"9d04703677514483e510b598cc228229c11a32c0","after":"5ecbfc2e7fbf06d882252117cac2bac76d675f58","ref":"refs/heads/main","pushedAt":"2023-07-20T16:27:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"add --memprofile option, improve profiling\n\nif --memprofile is given , prints some memory alloc/free statistics\nonce per second per active test thread.\n\nthis isn't for debugging leaks (though that would be obvious from the\nlack of free calls), but for a/b comparisons of memory usage for test\nfunctions.\n\nfor performance sensitive functions alloc/frees must be minimized.","shortMessageHtmlLink":"add --memprofile option, improve profiling"}},{"before":"b8c6e3d3c3b62a2651c5c9d54c3597669683b09e","after":"9d04703677514483e510b598cc228229c11a32c0","ref":"refs/heads/main","pushedAt":"2023-07-19T00:52:03.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"add mcs.res_startswith(res, \"string\")\n\nconvert usage of:\nline = mcs.resline(res)\nif line == \"EN\" then etc\n\nto:\n\nif mcs.res_startswith(res, \"string\") then etc\n\nin this latter case we avoid string allocations in lua.","shortMessageHtmlLink":"add mcs.res_startswith(res, \"string\")"}},{"before":"b2285caea284e3442ed099c62fb9b7e5257533df","after":"b8c6e3d3c3b62a2651c5c9d54c3597669683b09e","ref":"refs/heads/main","pushedAt":"2023-07-17T21:35:23.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"example config for the new factory changes\n\nusing the power of comments to compare before/after just to annoy\neveryone else!","shortMessageHtmlLink":"example config for the new factory changes"}},{"before":"525ae627264380efb5ed7a0de36871932bc79a07","after":"b2285caea284e3442ed099c62fb9b7e5257533df","ref":"refs/heads/main","pushedAt":"2023-07-17T06:04:36.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"add mcs.stop()\n\nTells the schredder to stop as soon as possible.\n\nThe stopping code still needs some work after this: this will only cut\nthe operation short if there's a hang or threads know to stop.\n\nmight be good enough for now if I just ensure the custom funcs see\nt->stop during their yield process? will fix soon.","shortMessageHtmlLink":"add mcs.stop()"}},{"before":"720bc19c9657fb4069e96930abfc7d07a4f2bf27","after":"525ae627264380efb5ed7a0de36871932bc79a07","ref":"refs/heads/main","pushedAt":"2023-07-16T21:10:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"allow 64b key numeric","shortMessageHtmlLink":"allow 64b key numeric"}},{"before":"3891efe57ce5196145860fdc6b108c0686f4676d","after":"720bc19c9657fb4069e96930abfc7d07a4f2bf27","ref":"refs/heads/main","pushedAt":"2023-07-09T21:53:37.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"dumpload: add dumpload_testdata.lua file\n\ngenerates some garbagey data to stress test the dumpload handlers.\n\nif you specify enough keys and run the dump immediately it should pick\nup a few misses as well.","shortMessageHtmlLink":"dumpload: add dumpload_testdata.lua file"}},{"before":"80e95bb49065c5246be5084b51881dfd9de8b111","after":"3891efe57ce5196145860fdc6b108c0686f4676d","ref":"refs/heads/main","pushedAt":"2023-07-08T06:06:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"dumpload: concurrent dest flushing\n\ngets fancy with extra coroutines to make flushing concurrent.\nmcs.client_flush() only returns once the entire buffer has been written\nout. I toyed with other semantics for this, but just using extra\ncoroutines keeps the code a lot cleaner.\n\nIn localhost tests through the proxy, this doubled the multi-dest\nperformance.\n\nthrough proxy-\nsingle dest: 210k rps\nmulti-dest: 380k rps\nmulti-dest-concurrent: 810k rps","shortMessageHtmlLink":"dumpload: concurrent dest flushing"}},{"before":"0c5f4ac066315da03e8011954fd992ecba4b4f03","after":"80e95bb49065c5246be5084b51881dfd9de8b111","ref":"refs/heads/main","pushedAt":"2023-07-08T06:01:08.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"dumpload: concurrent dest flushing\n\ngets fancy with extra coroutines to make flushing concurrent.\nmcs.client_flush() only returns once the entire buffer has been written\nout. I toyed with other semantics for this, but just using extra\ncoroutines keeps the code a lot cleaner.\n\nIn localhost tests through the proxy, this doubled the multi-dest\nperformance.\n\nthrough proxy-\nsingle dest: 210k rps\nmulti-dest: 380k rps\nmulti-dest-concurrent: 810k rps","shortMessageHtmlLink":"dumpload: concurrent dest flushing"}},{"before":"ba8fd553500d8f56007c801bb684e2253565b7d9","after":"0c5f4ac066315da03e8011954fd992ecba4b4f03","ref":"refs/heads/main","pushedAt":"2023-07-07T21:59:14.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"throw error if mcs.shredder() time isn't numeric\n\nwas just ignoring it before.","shortMessageHtmlLink":"throw error if mcs.shredder() time isn't numeric"}},{"before":"58cc0536ad8cbf5a54fc0bc4547912ee8368163e","after":"ba8fd553500d8f56007c801bb684e2253565b7d9","ref":"refs/heads/main","pushedAt":"2023-07-05T22:25:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"throw error if mcs.shredder() time isn't numeric\n\nwas just ignoring it before.","shortMessageHtmlLink":"throw error if mcs.shredder() time isn't numeric"}},{"before":"e359db06acf5e2b53bfec3213b332424206d03f1","after":"58cc0536ad8cbf5a54fc0bc4547912ee8368163e","ref":"refs/heads/main","pushedAt":"2023-07-05T22:22:05.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"ensure client objects are closed\n\nadds GC function for the new client objects so they actually get closed\nwhen the thread is done.\n\nalso kicks the GC a bunch of times to clear out memory and force clients\nto close inbetween runs.","shortMessageHtmlLink":"ensure client objects are closed"}},{"before":"50c7197d896b47bd0d8d1af02d75a8bcd89696c8","after":"e359db06acf5e2b53bfec3213b332424206d03f1","ref":"refs/heads/main","pushedAt":"2023-07-04T00:11:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"mcs.client_readline(c): don't chop last log char\n\nlog lines don't (always?) terminate with \\r\\n. ugh.","shortMessageHtmlLink":"mcs.client_readline(c): don't chop last log char"}},{"before":"1ac9883c873c6ae565d32d795a60c65d87053004","after":"50c7197d896b47bd0d8d1af02d75a8bcd89696c8","ref":"refs/heads/main","pushedAt":"2023-07-03T23:31:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"fix mcs.client_connect() missing successful return","shortMessageHtmlLink":"fix mcs.client_connect() missing successful return"}},{"before":"f651fd61ceb0d9aa18cc0cbdfd997ac6d7c2f514","after":"1ac9883c873c6ae565d32d795a60c65d87053004","ref":"refs/heads/main","pushedAt":"2023-07-01T22:16:08.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"hack fix for \"zombie\" functions across runs\n\nMy test suite re-runs mcs.schredder over and over with new arguments. I\nwas noticing the \"stats\" runner doubling up and screwing up outputs.\nTurns out the previous runner wasn't always reaping properly.\n\nNote for the proper fix (which requires kernel 5.19!? Ugh).\n\nI don't have anything (myself) that sleeps for more than a second, so\nsetting the io uring loop timeout to 5.5 seconds should avoid the bug\nfor now.","shortMessageHtmlLink":"hack fix for \"zombie\" functions across runs"}},{"before":"fda261644fa3289849eeb5d32d88148cd76f4e5b","after":"f651fd61ceb0d9aa18cc0cbdfd997ac6d7c2f514","ref":"refs/heads/main","pushedAt":"2023-06-24T00:59:15.443Z","pushType":"push","commitsCount":1,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"dumpload.lua: add per-second stats output.","shortMessageHtmlLink":"dumpload.lua: add per-second stats output."}},{"before":"a3d24b49b770bf41b642ae4cbd2cee3269d6ead9","after":"fda261644fa3289849eeb5d32d88148cd76f4e5b","ref":"refs/heads/main","pushedAt":"2023-06-23T22:32:33.125Z","pushType":"push","commitsCount":3,"pusher":{"login":"dormando","name":"dormando","path":"/dormando","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/66832?s=80&v=4"},"commit":{"message":"dumpload.lua: take commandline arguments.\n\nalso adds --help output.","shortMessageHtmlLink":"dumpload.lua: take commandline arguments."}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAESvOsiQA","startCursor":null,"endCursor":null}},"title":"Activity ยท memcached/mcshredder"}