run.pl 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env perl
  2. use v5.36;
  3. use Data::Dumper;
  4. my $max_reqs = $ENV{MAX_REQS};
  5. my $test_name = $ENV{TEST_NAME};
  6. my $socket_file = $ENV{SOCKET_FILE};
  7. my $app_runner = 'app.psgi';
  8. my $max_workers = `nproc`;
  9. chomp $max_workers;
  10. my %runner_map = (
  11. gazelle => [
  12. 'start_server',
  13. '--path' => $socket_file,
  14. '--backlog' => 16384,
  15. '--',
  16. 'plackup',
  17. '-E' => 'production',
  18. '-s' => 'Gazelle',
  19. '--max-workers' => $max_workers,
  20. '--max-reqs-per-child' => $max_reqs,
  21. '-a' => $app_runner,
  22. ],
  23. starman => [
  24. 'start_server',
  25. '--backlog' => 16384,
  26. '--',
  27. 'plackup',
  28. '-E' => 'production',
  29. '-s' => 'Starman',
  30. '-l' => $socket_file,
  31. '--workers' => $max_workers,
  32. '--max-requests' => $max_reqs,
  33. '-a' => $app_runner,
  34. ],
  35. starlet => [
  36. 'start_server',
  37. '--path' => $socket_file,
  38. '--backlog' => 16384,
  39. '--',
  40. 'plackup',
  41. '-E' => 'production',
  42. '-s' => 'Starlet',
  43. '--max-workers' => $max_workers,
  44. '--max-reqs-per-child' => $max_reqs,
  45. '-a' => $app_runner,
  46. ],
  47. # NOTE: twiggy does not play well with Server::Starter
  48. # NOTE: twiggy couldn't pass update tests, so I disabled them
  49. twiggy => [
  50. 'plackup',
  51. '-E' => 'production',
  52. '-s' => 'Twiggy::Prefork',
  53. '-l' => $socket_file,
  54. '--backlog' => 16384,
  55. '--max-workers' => $max_workers,
  56. '--max-reqs-per-child' => $max_reqs,
  57. '-a' => $app_runner,
  58. ],
  59. );
  60. # default is gazelle-mysql (techempower will warn if there is no default)
  61. $test_name = 'kelp-gazelle-mysql'
  62. if $test_name eq 'kelp';
  63. die "invalid test name $test_name"
  64. unless $test_name =~ m{^kelp-(\w+)-(\w+)$};
  65. die 'database mismatch'
  66. unless $2 eq $ENV{DATABASE};
  67. my $command = $runner_map{$1};
  68. die "invalid server $1"
  69. unless $command;
  70. say 'Running command: ' . Dumper($command);
  71. exec @$command;