mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-29 11:10:40 +00:00
" A big problem with scylla tool executables is that they include the entire scylla codebase and thus they are just as big as the scylla executable itself, making them impractical to deploy on production machines. We could try to combat this by selectively including only the actually needed dependencies but even ignoring the huge churn of sorting out our depedency hell (which we should do at one point anyway), some tools may genuinely depend on most of the scylla codebase. A better solution is to host the tool executables in the scylla executable itself, switching between the actual main function to run some way. The tools themselves don't contain a lot of code so this won't cause any considerable bloat in the size of the scylla executable itself. This series does exactly this, folds all the tool executables into the scylla one, with main() switching between the actual main it will delegate to based on a argv[1] command line argument. If this is a known tool name, the respective tool's main will be invoked. If it is "server", missing or unrecognized, the scylla main is invoked. Originally this series used argv[0] as the mean to switch between the main to run. This approach was abandoned for the approach mentioned above for the following reasons: * No launcher script, hard link, soft link or similar games are needed to launch a specific tool. * No packaging needed, all tools are automatically deployed. * Explicit tool selection, no surprises after renaming scylla to something else. * Tools are discoverable via scylla's description. * Follows the trend set by modern command line multi-command or multi-app programs, like git. Fixes: #7801 Tests: unit(dev) " * 'tools-in-scylla-exec-v5' of https://github.com/denesb/scylla: main,tools,configure.py: fold tools into scylla exec tools: prepare for inclusion in scylla's main main: add skeleton switching code on argv[1] main: extract scylla specific code into scylla_main()