pigeonhole-db 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Cargo.lock +899 -0
- data/Cargo.toml +45 -0
- data/LICENSE +21 -0
- data/README.md +22 -0
- data/extconf.rb +12 -0
- data/lib/pigeonhole/api.rb +615 -0
- data/lib/pigeonhole/index.rb +208 -0
- data/lib/pigeonhole/memory.rb +507 -0
- data/lib/pigeonhole/version.rb +6 -0
- data/lib/pigeonhole-db.rb +6 -0
- data/lib/pigeonhole.rb +47 -0
- data/sig/pigeonhole.rbs +1484 -0
- data/src/budget.rs +205 -0
- data/src/classes.rs +279 -0
- data/src/convert.rs +192 -0
- data/src/db.rs +685 -0
- data/src/error.rs +151 -0
- data/src/feed.rs +316 -0
- data/src/fork.rs +64 -0
- data/src/gvl.rs +112 -0
- data/src/index.rs +1157 -0
- data/src/lib.rs +534 -0
- data/src/memory.rs +2178 -0
- data/src/read.rs +312 -0
- data/src/table.rs +1161 -0
- data/src/vector.rs +262 -0
- data/src/walk.rs +406 -0
- data/vendor/bundle/ruby/3.4.0/bin/minitest +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rake +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rake-compiler +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rake-compiler-dock +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rb-sys-dock +29 -0
- data/vendor/bundle/ruby/3.4.0/bin/rbs +29 -0
- data/vendor/bundle/ruby/3.4.0/cache/drb-2.2.3.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/logger-1.7.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/minitest-6.0.6.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/prism-1.9.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rake-13.4.2.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-1.3.2.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-dock-1.12.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rb_sys-0.9.130.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/rbs-4.2.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/toml-rb-6.0.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/cache/tsort-0.2.0.gem +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem.build_complete +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem_make.out +44 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/mkmf.log +74 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/prism/prism.so +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem.build_complete +0 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem_make.out +41 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/mkmf.log +102 -0
- data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/rbs_extension.so +0 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/drb.gemspec +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/acl.rb +239 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/drb.rb +1993 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/eq.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extserv.rb +44 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extservm.rb +94 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/gw.rb +161 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/observer.rb +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/ssl.rb +354 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/timeridconv.rb +97 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/unix.rb +118 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/version.rb +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/weakidconv.rb +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb.rb +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/BSDL +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/COPYING +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/README.md +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/errors.rb +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/formatter.rb +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/log_device.rb +265 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/period.rb +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/severity.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger.rb +789 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/History.rdoc +1860 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Manifest.txt +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/README.rdoc +763 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Rakefile +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/bin/minitest +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/design_rationale.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/hoe/minitest.rb +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/assertions.rb +821 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/autorun.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/benchmark.rb +452 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/bisect.rb +304 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/complete.rb +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/compress.rb +94 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/error_on_warning.rb +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/expectations.rb +321 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/find_minimal_combination.rb +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/hell.rb +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/manual_plugins.rb +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/parallel.rb +72 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/path_expander.rb +432 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride.rb +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride_plugin.rb +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server_plugin.rb +88 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/spec.rb +324 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint.rb +105 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint_plugin.rb +39 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test.rb +232 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test_task.rb +331 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest.rb +1232 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/metametameta.rb +150 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_bisect.rb +249 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_find_minimal_combination.rb +138 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_assertions.rb +1729 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_benchmark.rb +151 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_reporter.rb +437 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_spec.rb +1095 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test.rb +1295 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test_task.rb +57 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_path_expander.rb +229 -0
- data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_server.rb +146 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/BSDmakefile +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CHANGELOG.md +786 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CODE_OF_CONDUCT.md +76 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CONTRIBUTING.md +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/LICENSE.md +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/Makefile +116 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/README.md +143 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/config.yml +4739 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/build_system.md +119 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/configuration.md +68 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/cruby_compilation.md +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/design.md +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/encoding.md +121 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/fuzzing.md +88 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/heredocs.md +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/javascript.md +118 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/local_variable_depth.md +229 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/mapping.md +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parser_translation.md +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parsing_rules.md +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/releasing.md +75 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/relocation.md +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ripper_translation.md +63 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_api.md +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_parser_translation.md +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/serialization.md +233 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/testing.md +55 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/Makefile +273 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_node.c +6945 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_pack.c +276 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extconf.rb +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.c +1427 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.h +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/ast.h +8254 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/defines.h +260 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/diagnostic.h +458 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/encoding.h +283 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/node.h +129 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/options.h +488 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/pack.h +163 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/parser.h +936 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/prettyprint.h +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/regexp.h +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/static_literals.h +121 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +236 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_char.h +204 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +218 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +130 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_list.h +103 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +113 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_string.h +200 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/version.h +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism.h +408 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/compiler.rb +801 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +392 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +2210 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +4767 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dsl.rb +1003 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/ffi.rb +578 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +2393 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +911 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +772 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node.rb +19966 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node_ext.rb +511 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pack.rb +230 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +188 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result.rb +907 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pattern.rb +269 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/reflection.rb +416 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/relocation.rb +505 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/serialize.rb +2400 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/string_query.rb +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +62 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +2234 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +820 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +376 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +126 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +3520 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +1964 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/visitor.rb +813 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism.rb +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/prism.gemspec +172 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +524 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node.rbi +8750 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +107 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +404 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +473 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism.rbi +63 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/compiler.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dsl.rbs +351 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +159 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node.rbs +4042 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +149 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pack.rbs +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +197 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pattern.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/reflection.rbs +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/relocation.rbs +185 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/serialize.rbs +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/string_query.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/visitor.rbs +169 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism.rbs +272 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/diagnostic.c +854 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/encoding.c +5340 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/node.c +8685 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/options.c +338 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/pack.c +509 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prettyprint.c +8957 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prism.c +22679 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/regexp.c +790 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/serialize.c +2274 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/static_literals.c +617 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/token_type.c +703 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_buffer.c +357 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_char.c +318 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +342 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_integer.c +670 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_list.c +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_memchr.c +35 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_newline_list.c +125 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_string.c +381 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +206 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/History.rdoc +2454 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/README.rdoc +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake.rb +69 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/rake.gemspec +102 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Gemfile +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/History.md +708 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/LICENSE.txt +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/README.md +505 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Rakefile +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/appveyor.yml +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/bin/rake-compiler +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/cucumber.yml +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/compile.feature +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-compile.feature +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package-multi.feature +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package.feature +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-compile.feature +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-no-native-compile.feature +33 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-package.feature +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/package.feature +40 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/compilation.rb +70 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/cross_compilation.rb +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/execution.rb +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/folders.rb +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/gem.rb +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/java_compilation.rb +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/env.rb +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/file_template_helpers.rb +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/generator_helpers.rb +123 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/platform_extension_helpers.rb +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/baseextensiontask.rb +90 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/compiler_config.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensioncompiler.rb +51 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensiontask.rb +621 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/javaextensiontask.rb +321 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bin/cross-ruby.rake +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bootstrap.rake +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/common.rake +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/cucumber.rake +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/gem.rake +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/rspec.rake +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
- data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-APACHE +190 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-MIT +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/README.md +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/certs/ianks.pem +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/exe/rb-sys-dock +495 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/config.rb +72 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/metadata.rb +158 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo.rb +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder/link_flag_converter.rb +37 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder.rb +370 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/error.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/extensiontask.rb +188 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf/config.rb +75 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf.rb +413 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info/data.rb +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info.rb +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/util/logger.rb +73 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys.rb +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/BSDL +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/CHANGELOG.md +2463 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/COPYING +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Dockerfile.jruby +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/README.md +240 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Rakefile +1213 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Steepfile +55 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/config.yml +920 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/array.rbs +4205 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/basic_object.rbs +376 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/binding.rbs +148 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/builtin.rbs +278 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/class.rbs +223 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/comparable.rbs +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/complex.rbs +812 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/constants.rbs +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/data.rbs +415 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/dir.rbs +993 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/encoding.rbs +1368 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerable.rbs +2506 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/product.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator.rbs +705 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/env.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errno.rbs +682 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errors.rbs +789 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/exception.rbs +485 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/false_class.rbs +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber.rbs +570 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber_error.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file.rbs +2045 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_constants.rbs +463 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_stat.rbs +534 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_test.rbs +331 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/float.rbs +1292 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/gc.rbs +788 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/global_variables.rbs +184 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/hash.rbs +2183 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/integer.rbs +1374 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/buffer.rbs +995 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/wait.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io.rbs +3473 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/kernel.rbs +3172 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/marshal.rbs +207 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/match_data.rbs +637 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/math.rbs +770 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/method.rbs +422 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/module.rbs +1856 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/nil_class.rbs +210 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/numeric.rbs +832 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object.rbs +108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space/weak_key_map.rbs +166 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space.rbs +197 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/pathname.rbs +1312 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/proc.rbs +905 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/process.rbs +2316 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ractor.rbs +914 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/random.rbs +255 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/range.rbs +1209 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rational.rbs +502 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rb_config.rbs +88 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/ops.rbs +154 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/argf.rbs +1236 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/env_class.rbs +1214 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/main_class.rbs +123 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/random.rbs +186 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/refinement.rbs +59 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/regexp.rbs +1974 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby.rbs +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby_vm.rbs +809 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/basic_specification.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/config_file.rbs +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/dependency_installer.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/errors.rbs +112 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/installer.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/path_support.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/platform.rbs +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/request_set.rbs +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/requirement.rbs +138 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/rubygems.rbs +1108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/source_list.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/specification.rbs +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/stream_ui.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/uninstaller.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/version.rbs +133 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/set.rbs +751 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/signal.rbs +110 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/string.rbs +5532 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/struct.rbs +668 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/symbol.rbs +482 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread.rbs +1821 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread_group.rbs +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/time.rbs +1793 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/trace_point.rbs +483 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/true_class.rbs +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/unbound_method.rbs +337 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/warning.rbs +87 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/CONTRIBUTING.md +107 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/aliases.md +79 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/architecture.md +110 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/collection.md +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/config.md +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/data_and_struct.md +86 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/encoding.md +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/gem.md +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/inline.md +634 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rbs_by_example.md +309 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/release.md +303 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/repo.md +125 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rust.md +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/sigs.md +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/stdlib.md +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/syntax.md +952 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/tools.md +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/type_fingerprint.md +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/wasm_serialization.md +80 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/exe/rbs +7 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/Makefile +273 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.c +1870 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.h +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.c +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.h +105 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/compat.h +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/extconf.rb +40 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.c +299 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.h +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/main.c +649 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_extension.h +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/goodcheck.yml +91 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/ast.h +1055 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/defines.h +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/lexer.h +208 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/location.h +40 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/parser.h +187 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/serialize.h +39 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/string.h +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_allocator.h +59 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_assert.h +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_buffer.h +83 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_constant_pool.h +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_encoding.h +282 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_unescape.h +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs.h +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ancestor_graph.rb +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/annotations.rb +199 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/formatter.rb +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_annotator.rb +398 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_source.rb +131 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate.rb +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/annotation.rb +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/comment.rb +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/declarations.rb +472 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/directives.rb +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/members.rb +451 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/annotations.rb +451 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/comment_block.rb +247 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/declarations.rb +291 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/members.rb +762 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/type_param.rb +235 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/visitor.rb +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/buffer.rb +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/builtin_names.rb +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/colored_io.rb +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/diff.rb +84 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/validate.rb +294 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli.rb +1253 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/cleaner.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile.rb +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile_generator.rb +269 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config.rb +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/installer.rb +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/base.rb +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/git.rb +265 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/local.rb +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/rubygems.rb +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/stdlib.rb +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources.rb +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection.rb +16 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/constant.rb +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition.rb +415 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/ancestor_builder.rb +681 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/method_builder.rb +295 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder.rb +1057 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/diff.rb +131 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/class_entry.rb +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/module_entry.rb +91 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/use_map.rb +77 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment.rb +1028 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_loader.rb +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_walker.rb +155 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/errors.rb +634 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/factory.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/file_finder.rb +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser.rb +568 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/location_aux.rb +170 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/locator.rb +247 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/method_type.rb +145 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/namespace.rb +154 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/lex_result.rb +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/token.rb +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser_aux.rb +144 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/helpers.rb +164 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/node_usage.rb +99 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rb.rb +816 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rbi.rb +793 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/helpers.rb +59 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/reflection.rb +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/value_object_generator.rb +278 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime.rb +680 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/repository.rb +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/constant_resolver.rb +219 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/type_name_resolver.rb +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/rewriter.rb +70 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/sorter.rb +198 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/source.rb +99 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/substitution.rb +83 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/subtractor.rb +204 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/errors.rb +80 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/guaranteed.rb +30 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/hook.rb +212 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/observer.rb +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup.rb +84 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup_helper.rb +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/tester.rb +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/type_check.rb +457 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test.rb +112 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_dependency.rb +100 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_regularity.rb +126 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_name.rb +122 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/types.rb +1646 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/convertibles.rb +177 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/spy.rb +138 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/type_assertions.rb +383 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/with_aliases.rb +145 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test.rb +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/validator.rb +186 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/variance_calculator.rb +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/vendorer.rb +71 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/deserializer.rb +213 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/location.rb +61 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/parser.rb +174 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/runtime.rb +211 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/serialization_schema.rb +111 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/writer.rb +424 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs.rb +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_extension.so +0 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_jars.rb +39 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc/discover.rb +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc_plugin/parser.rb +168 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/rbs.gemspec +77 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/annotation.json +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/comment.json +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/decls.json +326 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/function.json +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/location.json +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/members.json +266 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/methodType.json +50 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/typeParam.json +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/types.json +317 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_builder.rbs +163 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_graph.rbs +60 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/annotations.rbs +102 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/formatter.rbs +24 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_annotater.rbs +85 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_source.rbs +32 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotation.rbs +27 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/annotations.rbs +470 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/comment_block.rbs +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/declarations.rbs +158 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/members.rbs +198 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/buffer.rbs +108 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/builtin_names.rbs +44 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/colored_io.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/diff.rbs +15 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/validate.rbs +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli.rbs +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/cleaner.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile.rbs +74 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile_generator.rbs +68 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config.rbs +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/installer.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/sources.rbs +214 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection.rbs +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/comment.rbs +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/constant.rbs +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/declarations.rbs +274 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition.rbs +232 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition_builder.rbs +181 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/diff.rbs +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/directives.rbs +77 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/class_entry.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/module_entry.rbs +65 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment.rbs +286 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_loader.rbs +111 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_walker.rbs +65 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/errors.rbs +408 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/factory.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/file_finder.rbs +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser/comment_association.rbs +71 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser.rbs +126 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/location.rbs +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/locator.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/manifest.yaml +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/members.rbs +258 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_builder.rbs +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_types.rbs +58 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/namespace.rbs +161 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/parser.rbs +164 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/helpers.rbs +29 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/node_usage.rbs +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rb.rbs +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rbi.rbs +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/runtime.rbs +182 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rbs.rbs +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rdoc/rbs.rbs +67 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/repository.rbs +85 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/constant_resolver.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/context.rbs +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/type_name_resolver.rbs +61 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rewriter.rbs +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/bundler.rbs +38 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/enumerable.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/rubygems.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/sorter.rbs +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/source.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/substitution.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/subtractor.rbs +37 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/errors.rbs +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/guranteed.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/type_check.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test.rbs +82 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_dependency.rbs +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_regularity.rbs +98 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_param.rbs +115 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/typename.rbs +89 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/types.rbs +588 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/convertibles.rbs +154 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/spy.rbs +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/type_assertions.rbs +211 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/with_aliases.rbs +136 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/use_map.rbs +35 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/util.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/validator.rbs +63 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/variance_calculator.rbs +87 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/vendorer.rbs +51 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/version.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/visitor.rbs +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/deserializer.rbs +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/serialization_schema.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/writer.rbs +127 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/ast.c +1644 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.c +3223 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.re +187 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexstate.c +222 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/location.c +31 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/parser.c +4318 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/serialize.c +965 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/string.c +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_allocator.c +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_assert.c +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_buffer.c +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_constant_pool.c +268 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_encoding.c +21454 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_unescape.c +167 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/abbrev.rbs +66 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/array.rbs +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/base64/0/base64.rbs +355 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/benchmark/0/benchmark.rbs +452 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/core.rbs +911 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/manifest.yaml +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/coverage/0/coverage.rbs +266 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/csv.rbs +3776 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date.rbs +1598 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date_time.rbs +617 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/time.rbs +26 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/dbm/0/dbm.rbs +421 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/delegator.rbs +188 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/kernel.rbs +47 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/simple_delegator.rbs +96 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/digest/0/digest.rbs +693 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/erb/0/erb.rbs +933 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/etc/0/etc.rbs +884 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/fileutils/0/fileutils.rbs +1753 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/find/0/find.rbs +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/forwardable/0/forwardable.rbs +271 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/io-console/0/io-console.rbs +414 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ipaddr/0/ipaddr.rbs +431 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/json/0/json.rbs +1963 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/kconv/0/kconv.rbs +166 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/formatter.rbs +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/log_device.rbs +100 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/logger.rbs +796 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/period.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/severity.rbs +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/kernel.rbs +42 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertion.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertions.rbs +590 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectation.rbs +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectations.rbs +21 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/guard.rbs +64 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/mock.rbs +64 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel.rbs +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reportable.rbs +53 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reporter.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/result.rbs +28 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/runnable.rbs +163 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/skip.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test.rbs +69 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit.rbs +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest.rbs +115 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/monitor/0/monitor.rbs +363 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/mutex_m/0/mutex_m.rbs +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/net-http.rbs +5580 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/net-protocol.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/net-smtp.rbs +55 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/nkf/0/nkf.rbs +402 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/objspace/0/objspace.rbs +470 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/observable/0/observable.rbs +217 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/manifest.yaml +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/open-uri.rbs +433 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open3/0/open3.rbs +606 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/openssl.rbs +12237 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/optparse/0/optparse.rbs +1734 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pathname/0/pathname.rbs +36 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/pp.rbs +301 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/prettyprint/0/prettyprint.rbs +383 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pstore/0/pstore.rbs +608 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/core_ext.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/dbm.rbs +237 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/psych.rbs +455 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/store.rbs +57 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pty/0/pty.rbs +240 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/code_object.rbs +52 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/comment.rbs +61 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/context.rbs +153 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/markup.rbs +117 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/options.rbs +76 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/parser.rbs +56 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/rdoc.rbs +393 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/ri.rbs +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/store.rbs +48 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/top_level.rbs +97 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/resolv.rbs +1787 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ripper/0/ripper.rbs +1654 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/securerandom.rbs +49 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/shellwords/0/shellwords.rbs +229 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/singleton/0/singleton.rbs +137 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/addrinfo.rbs +666 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/basic_socket.rbs +590 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/constants.rbs +2295 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/ip_socket.rbs +94 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket.rbs +4170 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket_error.rbs +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_server.rbs +192 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_socket.rbs +87 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/udp_socket.rbs +133 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_server.rbs +169 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_socket.rbs +172 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/stringio/0/stringio.rbs +1682 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/strscan/0/string_scanner.rbs +1648 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/manifest.yaml +3 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/tempfile.rbs +483 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/time/0/time.rbs +434 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/timeout/0/timeout.rbs +132 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tmpdir/0/tmpdir.rbs +69 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/cyclic.rbs +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/interfaces.rbs +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/tsort.rbs +410 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/common.rbs +621 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/file.rbs +118 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ftp.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/generic.rbs +1111 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/http.rbs +104 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/https.rbs +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldap.rbs +230 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldaps.rbs +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/mailto.rbs +92 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc2396_parser.rbs +189 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc3986_parser.rbs +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ws.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/wss.rbs +9 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/manifest.yaml +2 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/yaml.rbs +1 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/buf_error.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/data_error.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/deflate.rbs +211 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/error.rbs +20 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/error.rbs +23 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file.rbs +156 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_reader.rbs +293 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_writer.rbs +169 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/inflate.rbs +180 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/mem_error.rbs +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/need_dict.rbs +13 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_end.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_error.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/version_error.rbs +11 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zlib.rbs +449 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zstream.rbs +200 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/README.md +109 -0
- data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/rbs_wasm.c +479 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/LICENSE +19 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/README.md +135 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/datetime.rb +54 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/dumper.rb +182 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/errors.rb +17 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/inline_table.rb +18 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/keyvalue.rb +45 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/parser.rb +296 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/string.rb +41 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table.rb +34 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table_array.rb +43 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/version.rb +5 -0
- data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb.rb +90 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Gemfile +4 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/README.md +72 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Rakefile +10 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/console +14 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/setup +8 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb +455 -0
- data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/tsort.gemspec +29 -0
- data/vendor/bundle/ruby/3.4.0/specifications/drb-2.2.3.gemspec +22 -0
- data/vendor/bundle/ruby/3.4.0/specifications/logger-1.7.0.gemspec +22 -0
- data/vendor/bundle/ruby/3.4.0/specifications/minitest-6.0.6.gemspec +35 -0
- data/vendor/bundle/ruby/3.4.0/specifications/prism-1.9.0.gemspec +24 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rake-13.4.2.gemspec +26 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-1.3.2.gemspec +33 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rb_sys-0.9.130.gemspec +29 -0
- data/vendor/bundle/ruby/3.4.0/specifications/rbs-4.2.0.gemspec +33 -0
- data/vendor/bundle/ruby/3.4.0/specifications/toml-rb-6.0.0.gemspec +27 -0
- data/vendor/bundle/ruby/3.4.0/specifications/tsort-0.2.0.gemspec +23 -0
- data/vendor/cache/Cargo.toml +21 -0
- data/vendor/cache/LICENSE +21 -0
- data/vendor/cache/README.md +5 -0
- data/vendor/cache/src/hash.rs +85 -0
- data/vendor/cache/src/lib.rs +751 -0
- data/vendor/cache/src/loom_tests.rs +340 -0
- data/vendor/cache/src/s3fifo.rs +648 -0
- data/vendor/cache/src/sync.rs +25 -0
- data/vendor/cache/src/tests.rs +260 -0
- data/vendor/compaction/Cargo.toml +32 -0
- data/vendor/compaction/LICENSE +21 -0
- data/vendor/compaction/README.md +5 -0
- data/vendor/compaction/src/blob.rs +478 -0
- data/vendor/compaction/src/cursor.rs +700 -0
- data/vendor/compaction/src/gc.rs +802 -0
- data/vendor/compaction/src/job.rs +861 -0
- data/vendor/compaction/src/lib.rs +102 -0
- data/vendor/compaction/src/merge.rs +995 -0
- data/vendor/compaction/src/picker.rs +681 -0
- data/vendor/compaction/src/resolver.rs +1346 -0
- data/vendor/engine/Cargo.toml +56 -0
- data/vendor/engine/LICENSE +21 -0
- data/vendor/engine/README.md +5 -0
- data/vendor/engine/src/admission.rs +421 -0
- data/vendor/engine/src/catalog.rs +1233 -0
- data/vendor/engine/src/check.rs +1386 -0
- data/vendor/engine/src/clock.rs +244 -0
- data/vendor/engine/src/clock_loom.rs +482 -0
- data/vendor/engine/src/close_gate.rs +325 -0
- data/vendor/engine/src/compact.rs +1509 -0
- data/vendor/engine/src/engine/hooks.rs +1654 -0
- data/vendor/engine/src/engine/info.rs +229 -0
- data/vendor/engine/src/engine.rs +6114 -0
- data/vendor/engine/src/error.rs +490 -0
- data/vendor/engine/src/feed.rs +960 -0
- data/vendor/engine/src/feed_reader.rs +1600 -0
- data/vendor/engine/src/flush.rs +839 -0
- data/vendor/engine/src/flushed_roots.rs +158 -0
- data/vendor/engine/src/flushed_through_loom.rs +77 -0
- data/vendor/engine/src/health.rs +201 -0
- data/vendor/engine/src/large.rs +372 -0
- data/vendor/engine/src/large_settle.rs +201 -0
- data/vendor/engine/src/lib.rs +112 -0
- data/vendor/engine/src/load_slot.rs +324 -0
- data/vendor/engine/src/maintenance.rs +935 -0
- data/vendor/engine/src/manifest/flight.rs +563 -0
- data/vendor/engine/src/manifest.rs +1516 -0
- data/vendor/engine/src/nonblocking.rs +603 -0
- data/vendor/engine/src/options.rs +334 -0
- data/vendor/engine/src/position.rs +125 -0
- data/vendor/engine/src/purge_guard.rs +220 -0
- data/vendor/engine/src/read/keys.rs +1049 -0
- data/vendor/engine/src/read/knn.rs +423 -0
- data/vendor/engine/src/read/reduce.rs +2057 -0
- data/vendor/engine/src/read/traverse.rs +1013 -0
- data/vendor/engine/src/read.rs +2429 -0
- data/vendor/engine/src/row_cache.rs +1101 -0
- data/vendor/engine/src/shard/tablets.rs +3582 -0
- data/vendor/engine/src/shard.rs +12215 -0
- data/vendor/engine/src/snapshot.rs +1429 -0
- data/vendor/engine/src/source.rs +1379 -0
- data/vendor/engine/src/timer_state.rs +226 -0
- data/vendor/engine/src/waker.rs +124 -0
- data/vendor/engine/src/watermark_waiters.rs +674 -0
- data/vendor/engine/src/write.rs +1321 -0
- data/vendor/format/Cargo.toml +40 -0
- data/vendor/format/LICENSE +21 -0
- data/vendor/format/README.md +5 -0
- data/vendor/format/src/blob.rs +101 -0
- data/vendor/format/src/block.rs +1120 -0
- data/vendor/format/src/bloom.rs +456 -0
- data/vendor/format/src/buckets.rs +552 -0
- data/vendor/format/src/bytes.rs +101 -0
- data/vendor/format/src/checksum.rs +132 -0
- data/vendor/format/src/compress.rs +196 -0
- data/vendor/format/src/cursor.rs +110 -0
- data/vendor/format/src/distance.rs +598 -0
- data/vendor/format/src/error.rs +93 -0
- data/vendor/format/src/exact.rs +602 -0
- data/vendor/format/src/feed.rs +285 -0
- data/vendor/format/src/filter.rs +157 -0
- data/vendor/format/src/half.rs +182 -0
- data/vendor/format/src/hash.rs +127 -0
- data/vendor/format/src/hll.rs +500 -0
- data/vendor/format/src/ids.rs +95 -0
- data/vendor/format/src/key.rs +620 -0
- data/vendor/format/src/kind_params.rs +101 -0
- data/vendor/format/src/lib.rs +54 -0
- data/vendor/format/src/manifest.rs +1287 -0
- data/vendor/format/src/roaring.rs +865 -0
- data/vendor/format/src/scan.rs +297 -0
- data/vendor/format/src/shm.rs +805 -0
- data/vendor/format/src/sst.rs +233 -0
- data/vendor/format/src/superblock.rs +345 -0
- data/vendor/format/src/value.rs +163 -0
- data/vendor/format/src/varint.rs +87 -0
- data/vendor/format/src/vector.rs +936 -0
- data/vendor/format/src/version.rs +92 -0
- data/vendor/format/src/wal.rs +999 -0
- data/vendor/io/Cargo.toml +29 -0
- data/vendor/io/LICENSE +21 -0
- data/vendor/io/README.md +5 -0
- data/vendor/io/src/async_poll.rs +44 -0
- data/vendor/io/src/buf.rs +694 -0
- data/vendor/io/src/completion.rs +444 -0
- data/vendor/io/src/error.rs +110 -0
- data/vendor/io/src/file.rs +206 -0
- data/vendor/io/src/lib.rs +53 -0
- data/vendor/io/src/nowait.rs +256 -0
- data/vendor/io/src/os/mod.rs +149 -0
- data/vendor/io/src/os/unix.rs +897 -0
- data/vendor/io/src/os/windows.rs +552 -0
- data/vendor/io/src/own.rs +257 -0
- data/vendor/io/src/pread.rs +854 -0
- data/vendor/io/src/ring_wake.rs +113 -0
- data/vendor/io/src/shared.rs +410 -0
- data/vendor/io/src/sim.rs +1545 -0
- data/vendor/io/src/sys.rs +214 -0
- data/vendor/io/src/uring.rs +1839 -0
- data/vendor/io/src/vfs.rs +154 -0
- data/vendor/memory/Cargo.toml +34 -0
- data/vendor/memory/LICENSE +21 -0
- data/vendor/memory/README.md +11 -0
- data/vendor/memory/src/consolidate.rs +640 -0
- data/vendor/memory/src/dedup.rs +231 -0
- data/vendor/memory/src/error.rs +131 -0
- data/vendor/memory/src/feed_loop.rs +572 -0
- data/vendor/memory/src/forget.rs +724 -0
- data/vendor/memory/src/hooks.rs +109 -0
- data/vendor/memory/src/ivf.rs +204 -0
- data/vendor/memory/src/layout.rs +340 -0
- data/vendor/memory/src/lib.rs +61 -0
- data/vendor/memory/src/recall.rs +1182 -0
- data/vendor/memory/src/store.rs +1785 -0
- data/vendor/memory/src/watch.rs +339 -0
- data/vendor/memtable/Cargo.toml +24 -0
- data/vendor/memtable/LICENSE +21 -0
- data/vendor/memtable/README.md +5 -0
- data/vendor/memtable/src/lib.rs +1658 -0
- data/vendor/memtable/src/loom_tests.rs +274 -0
- data/vendor/memtable/src/mem.rs +344 -0
- data/vendor/memtable/src/tests.rs +1061 -0
- data/vendor/pager/Cargo.toml +23 -0
- data/vendor/pager/LICENSE +21 -0
- data/vendor/pager/README.md +5 -0
- data/vendor/pager/src/alloc.rs +1008 -0
- data/vendor/pager/src/lib.rs +1710 -0
- data/vendor/pigeonhole/Cargo.toml +42 -0
- data/vendor/pigeonhole/LICENSE +21 -0
- data/vendor/pigeonhole/README.md +99 -0
- data/vendor/pigeonhole/src/cell.rs +829 -0
- data/vendor/pigeonhole/src/check.rs +368 -0
- data/vendor/pigeonhole/src/db.rs +2324 -0
- data/vendor/pigeonhole/src/doc_support.rs +89 -0
- data/vendor/pigeonhole/src/error.rs +257 -0
- data/vendor/pigeonhole/src/feed.rs +696 -0
- data/vendor/pigeonhole/src/info.rs +425 -0
- data/vendor/pigeonhole/src/lib.rs +202 -0
- data/vendor/pigeonhole/src/merge.rs +135 -0
- data/vendor/pigeonhole/src/metrics.rs +476 -0
- data/vendor/pigeonhole/src/nonblocking.rs +666 -0
- data/vendor/pigeonhole/src/options.rs +2075 -0
- data/vendor/pigeonhole/src/read/budget.rs +584 -0
- data/vendor/pigeonhole/src/read.rs +2463 -0
- data/vendor/pigeonhole/src/recovery.rs +876 -0
- data/vendor/pigeonhole/src/retry.rs +358 -0
- data/vendor/pigeonhole/src/set.rs +103 -0
- data/vendor/pigeonhole/src/table.rs +861 -0
- data/vendor/pigeonhole/src/vector.rs +351 -0
- data/vendor/pigeonhole/src/write.rs +2815 -0
- data/vendor/runtime/Cargo.toml +21 -0
- data/vendor/runtime/LICENSE +21 -0
- data/vendor/runtime/README.md +5 -0
- data/vendor/runtime/src/completion.rs +629 -0
- data/vendor/runtime/src/drivers.rs +1175 -0
- data/vendor/runtime/src/lib.rs +1546 -0
- data/vendor/runtime/src/pool.rs +992 -0
- data/vendor/runtime/src/sched.rs +809 -0
- data/vendor/runtime/src/signal.rs +532 -0
- data/vendor/runtime/src/submit_gate.rs +144 -0
- data/vendor/shm/Cargo.toml +24 -0
- data/vendor/shm/LICENSE +21 -0
- data/vendor/shm/README.md +5 -0
- data/vendor/shm/src/lib.rs +427 -0
- data/vendor/shm/src/lock.rs +153 -0
- data/vendor/shm/src/region.rs +1609 -0
- data/vendor/sst/Cargo.toml +26 -0
- data/vendor/sst/LICENSE +21 -0
- data/vendor/sst/README.md +5 -0
- data/vendor/sst/src/blob.rs +380 -0
- data/vendor/sst/src/iter.rs +803 -0
- data/vendor/sst/src/lib.rs +695 -0
- data/vendor/sst/src/reader.rs +814 -0
- data/vendor/sst/src/writer.rs +596 -0
- data/vendor/text/Cargo.toml +26 -0
- data/vendor/text/LICENSE +21 -0
- data/vendor/text/README.md +9 -0
- data/vendor/text/src/error.rs +108 -0
- data/vendor/text/src/fuzzy.rs +265 -0
- data/vendor/text/src/highlight.rs +236 -0
- data/vendor/text/src/index.rs +1152 -0
- data/vendor/text/src/layout.rs +424 -0
- data/vendor/text/src/lib.rs +75 -0
- data/vendor/text/src/maxscore.rs +658 -0
- data/vendor/text/src/query.rs +450 -0
- data/vendor/text/src/search.rs +569 -0
- data/vendor/text/src/sloppy.rs +460 -0
- data/vendor/text/src/tokenizer.rs +163 -0
- data/vendor/vector/Cargo.toml +28 -0
- data/vendor/vector/LICENSE +21 -0
- data/vendor/vector/README.md +9 -0
- data/vendor/vector/src/error.rs +63 -0
- data/vendor/vector/src/half.rs +167 -0
- data/vendor/vector/src/hooks.rs +135 -0
- data/vendor/vector/src/index.rs +2690 -0
- data/vendor/vector/src/layout.rs +102 -0
- data/vendor/vector/src/lib.rs +52 -0
- data/vendor/vector/src/point.rs +500 -0
- data/vendor/vector/src/rebalancer.rs +200 -0
- data/vendor/vector/src/registry.rs +81 -0
- data/vendor/wal/Cargo.toml +25 -0
- data/vendor/wal/LICENSE +21 -0
- data/vendor/wal/README.md +5 -0
- data/vendor/wal/src/feed.rs +610 -0
- data/vendor/wal/src/foreground.rs +122 -0
- data/vendor/wal/src/lib.rs +458 -0
- data/vendor/wal/src/mem.rs +166 -0
- data/vendor/wal/src/recovery.rs +426 -0
- data/vendor/wal/src/stream.rs +2382 -0
- metadata +1310 -0
|
@@ -0,0 +1,1175 @@
|
|
|
1
|
+
//! Engine-owned driver threads (D289). Each runs the turns of the shards it holds, one
|
|
2
|
+
//! after another, then spins and parks once for all of them. With the load controller
|
|
3
|
+
//! (PR 2) the shards move between drivers: a light load runs on few threads, which park
|
|
4
|
+
//! less, and a heavy one on up to one per shard.
|
|
5
|
+
//!
|
|
6
|
+
//! # Moves
|
|
7
|
+
//! A shard moves only between its turns, and only when its driver's own ring is quiet
|
|
8
|
+
//! (nothing of the thread's in flight): its I/O completes only on the ring of the thread
|
|
9
|
+
//! that submitted it (#402), and a turn may wait on that I/O. So nothing a moved shard
|
|
10
|
+
//! submitted is left on the old ring, and no wait inside a turn can come to depend on
|
|
11
|
+
//! another driver's ring through a move (#1002). The source takes the shard out of its
|
|
12
|
+
//! list (it announces no further sleep for it), pushes it onto the adopter's handoff queue,
|
|
13
|
+
//! and wakes the adopter. The adopter drains its queue at the start of every pass, points
|
|
14
|
+
//! the shard's wakeups at itself, and runs the shard's turn before it next parks: a producer
|
|
15
|
+
//! that read the old target woke the old driver, and the adopter's turn finds its message.
|
|
16
|
+
|
|
17
|
+
use std::collections::VecDeque;
|
|
18
|
+
use std::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering};
|
|
19
|
+
use std::sync::{Arc, Mutex, MutexGuard, PoisonError};
|
|
20
|
+
use std::thread::{self, Thread};
|
|
21
|
+
use std::time::{Duration, Instant};
|
|
22
|
+
|
|
23
|
+
use pigeonhole_io::VfsRef;
|
|
24
|
+
|
|
25
|
+
use crate::signal::WakeTarget;
|
|
26
|
+
use crate::{EnterShard, RING_IDLE_WAIT, ShardCore, ShardHandler, ShardId, Submitter, sched};
|
|
27
|
+
|
|
28
|
+
/// A pass longer than this kept a message waiting too long behind its siblings' turns (#997's
|
|
29
|
+
/// A/B: heavy rows at one driver had pass p99s of 128-256 µs, light ones far under). More
|
|
30
|
+
/// than [`SLOW_PASSES`] of them hold off a shrink.
|
|
31
|
+
const PASS_BUDGET_NANOS: u64 = 100_000;
|
|
32
|
+
/// The controller's window.
|
|
33
|
+
const WINDOW: Duration = Duration::from_millis(100);
|
|
34
|
+
/// Windows a grow condition must hold over (1 s).
|
|
35
|
+
const GROW_WINDOWS: usize = 10;
|
|
36
|
+
/// Windows the sibling-wait rule sums over (2 s): over 10, one spike of sparse-wide's at 2
|
|
37
|
+
/// drivers (0.16) grew it to 4 for 40 s, while over 20 its highest was 0.13, and the loads
|
|
38
|
+
/// that need more drivers held (ycsb-f at 8: 0.27; transfer at 8: 0.15 median; #1015's
|
|
39
|
+
/// first round).
|
|
40
|
+
const WAIT_WINDOWS: usize = 20;
|
|
41
|
+
/// Windows a shrink condition must hold over at first (5 s); doubled by a shrink a grow
|
|
42
|
+
/// undid within [`UNDO`], up to [`MAX_SHRINK_WINDOWS`] (D255's damping).
|
|
43
|
+
const SHRINK_WINDOWS: usize = 50;
|
|
44
|
+
const MAX_SHRINK_WINDOWS: usize = 800;
|
|
45
|
+
/// No resize within this long after another.
|
|
46
|
+
const HOLD: Duration = Duration::from_secs(2);
|
|
47
|
+
const UNDO: Duration = Duration::from_secs(60);
|
|
48
|
+
/// Awake-busy (turn time over the window) above which a driver grows the set: a backstop
|
|
49
|
+
/// for a saturated driver. Sibling wait is the grow signal; in #1015's first round it fired
|
|
50
|
+
/// wherever busy did, and busy at 0.75 added no grow it missed.
|
|
51
|
+
const GROW_BUSY: f64 = 0.9;
|
|
52
|
+
/// A shrink keeps the remaining drivers at most this busy on average.
|
|
53
|
+
const SHRINK_BUSY: f64 = 0.5;
|
|
54
|
+
/// Producer wakes per message above which fewer drivers would park less. #1015's first
|
|
55
|
+
/// round, over the shrink windows of the measured phases: sparse-wide 0.107-0.82 (where
|
|
56
|
+
/// fewer drivers keep its put tail at 33-43 µs, against 553 at 16), and ycsb-f, transfer and
|
|
57
|
+
/// ycsb-a at most 0.082. At 0.05 ycsb-f shrank 16 -> 8 and back (-4% at 8).
|
|
58
|
+
const SHRINK_WAKES_PER_OP: f64 = 0.10;
|
|
59
|
+
/// Slow passes (over [`PASS_BUDGET_NANOS`]) above this fraction hold off a shrink. Not a
|
|
60
|
+
/// grow signal: in #1015's first round it read 50-100% in the settle step on a few ops a
|
|
61
|
+
/// window, and fired in load phases on flush and compaction slices with nothing waiting
|
|
62
|
+
/// (ycsb-a 4 -> 8, wait 0.03); in the measured phases it never fired without sibling wait.
|
|
63
|
+
const SLOW_PASSES: f64 = 0.01;
|
|
64
|
+
/// The fewest drivers the shrink goes to. One driver never paid off: the controller took
|
|
65
|
+
/// sparse-wide to 1 twice in #1015's first round and went back up both times within 2 s
|
|
66
|
+
/// (sibling wait 0.27), while 2 holds its tail gain.
|
|
67
|
+
const MIN_DRIVERS: usize = 2;
|
|
68
|
+
/// A shrink needs at least this many ops per window on average: an idle store's drivers
|
|
69
|
+
/// park and cost nothing, while shrinking it in a gap between bursts left the next burst
|
|
70
|
+
/// growing back through its first seconds (#1006's third A/B: every heavy run started 16 -> 2).
|
|
71
|
+
const SHRINK_MIN_OPS: u64 = 100;
|
|
72
|
+
/// Sibling wait over busy, summed over the active drivers, above which the set grows: their
|
|
73
|
+
/// shards' work waits behind other shards' turns for this share of the time it is served.
|
|
74
|
+
/// Transfer's hops at few drivers cost throughput with neither a busy driver nor slow passes
|
|
75
|
+
/// (#1006's fourth A/B, -6%); this is the cost itself. #1006's fixed-k round put the line
|
|
76
|
+
/// between the loads that gain from more drivers (transfer 1.6 at 2 drivers and 0.55 at 4,
|
|
77
|
+
/// ycsb-f 0.23-0.27 at 8: +50%, +22% and +5% ops a doubling) and sparse-wide at 2 (0.04-0.08,
|
|
78
|
+
/// where its tail gain is). Summed, not the highest driver's: a nearly idle driver's ratio
|
|
79
|
+
/// is noise (0.57-0.64 for sparse-wide's at 8 of 16, at 2% busy). Summed over the grow
|
|
80
|
+
/// windows too, not averaged per window, and only with at least [`SHRINK_MIN_OPS`] per window:
|
|
81
|
+
/// one nearly idle window's ratio (1.1-2.2 at 0.1% busy, between a bench's load and its run)
|
|
82
|
+
/// grew ycsb-a and sparse-wide in #1006's fifth A/B.
|
|
83
|
+
const GROW_WAIT: f64 = 0.15;
|
|
84
|
+
/// A window longer than this ran while every driver that could tick it was parked (an idle
|
|
85
|
+
/// store): it is dropped, not averaged in, so its diluted busy can't read as a light load.
|
|
86
|
+
const IDLE_WINDOW: Duration = Duration::from_millis(200);
|
|
87
|
+
/// Windows a trace keeps before its reader drains them ([`Drivers::trace`]): an hour's.
|
|
88
|
+
const TRACE_WINDOWS: usize = 36_000;
|
|
89
|
+
|
|
90
|
+
/// `d` in nanoseconds, for comparing against the VFS clock.
|
|
91
|
+
const fn nanos(d: Duration) -> u64 {
|
|
92
|
+
d.as_nanos() as u64
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// One driver's counters, read by the controller (Relaxed: windowed estimates).
|
|
96
|
+
#[derive(Default)]
|
|
97
|
+
pub(crate) struct DriverStats {
|
|
98
|
+
/// Nanoseconds in turns (not spinning or parked), on the runtime's clock.
|
|
99
|
+
busy: AtomicU64,
|
|
100
|
+
/// Passes that ran at least one turn.
|
|
101
|
+
passes: AtomicU64,
|
|
102
|
+
/// Of those, passes longer than [`PASS_BUDGET_NANOS`].
|
|
103
|
+
slow: AtomicU64,
|
|
104
|
+
/// Messages handled and background slices run by its shards.
|
|
105
|
+
ops: AtomicU64,
|
|
106
|
+
/// Nanoseconds from each pass's start to the start of each of its turns that handled
|
|
107
|
+
/// work: how long that work waited behind sibling turns (at most; work that arrived
|
|
108
|
+
/// mid-pass waited less). Zero for a lone shard.
|
|
109
|
+
sibling_wait: AtomicU64,
|
|
110
|
+
/// Shards it holds that belong to another driver at the current target (not yet moved:
|
|
111
|
+
/// its ring was never quiet).
|
|
112
|
+
misplaced: AtomicUsize,
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
impl DriverStats {
|
|
116
|
+
/// Busy, passes, slow, ops and sibling wait, as the controller reads them.
|
|
117
|
+
fn counts(&self) -> [u64; 5] {
|
|
118
|
+
[
|
|
119
|
+
self.busy.load(Ordering::Relaxed),
|
|
120
|
+
self.passes.load(Ordering::Relaxed),
|
|
121
|
+
self.slow.load(Ordering::Relaxed),
|
|
122
|
+
self.ops.load(Ordering::Relaxed),
|
|
123
|
+
self.sibling_wait.load(Ordering::Relaxed),
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
struct Handoff<H: ShardHandler> {
|
|
129
|
+
cores: Vec<ShardCore<H>>,
|
|
130
|
+
/// The driver returned (shutdown): nothing may be handed to it.
|
|
131
|
+
exited: bool,
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
struct Slot<H: ShardHandler> {
|
|
135
|
+
handoff: Mutex<Handoff<H>>,
|
|
136
|
+
/// The driver's thread and its ring's waker, to wake it for a handoff.
|
|
137
|
+
thread: Mutex<Option<(Thread, Option<pigeonhole_io::OwnIoWaker>)>>,
|
|
138
|
+
stats: DriverStats,
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
fn lock<T>(m: &Mutex<T>) -> MutexGuard<'_, T> {
|
|
142
|
+
m.lock().unwrap_or_else(PoisonError::into_inner)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// The driver threads' shared state.
|
|
146
|
+
pub(crate) struct Drivers<H: ShardHandler> {
|
|
147
|
+
slots: Box<[Slot<H>]>,
|
|
148
|
+
/// The drivers the shards run on now: shard `i` belongs to driver `i % target`.
|
|
149
|
+
target: AtomicUsize,
|
|
150
|
+
/// Whether the controller sizes `target` (else it stays as started).
|
|
151
|
+
adaptive: bool,
|
|
152
|
+
/// A test's fixed target (0: none), overriding the controller.
|
|
153
|
+
forced: AtomicUsize,
|
|
154
|
+
/// Set by shutdown before the inboxes close: no more moves, and drivers that hold no
|
|
155
|
+
/// shard exit.
|
|
156
|
+
closing: AtomicBool,
|
|
157
|
+
/// Shards handed from one driver to another.
|
|
158
|
+
moves: AtomicU64,
|
|
159
|
+
/// The load controller (`adaptive` only), ticked by whichever driver finds its window
|
|
160
|
+
/// over: driver 0 may be parked while another driver's shards carry the load.
|
|
161
|
+
controller: Mutex<Option<Controller>>,
|
|
162
|
+
/// When the controller's window started, on `vfs`'s monotonic clock: one Relaxed load per
|
|
163
|
+
/// pass decides whether to try the controller's lock.
|
|
164
|
+
window_at: AtomicU64,
|
|
165
|
+
/// A trace was asked for ([`Drivers::trace`], #1015): the controller runs, deciding
|
|
166
|
+
/// without resizing unless `adaptive`, and logs every window.
|
|
167
|
+
tracing: AtomicBool,
|
|
168
|
+
vfs: VfsRef,
|
|
169
|
+
submitters: Arc<[Submitter<H::Msg>]>,
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
impl<H: ShardHandler> Drivers<H> {
|
|
173
|
+
pub(crate) fn new(
|
|
174
|
+
drivers: usize,
|
|
175
|
+
adaptive: bool,
|
|
176
|
+
vfs: VfsRef,
|
|
177
|
+
submitters: Arc<[Submitter<H::Msg>]>,
|
|
178
|
+
) -> Self {
|
|
179
|
+
let controller = adaptive.then(|| {
|
|
180
|
+
let wakes = submitters.iter().map(|s| s.idle_counts().1).sum();
|
|
181
|
+
Controller::new(drivers, wakes, vfs.monotonic_nanos())
|
|
182
|
+
});
|
|
183
|
+
Self {
|
|
184
|
+
slots: (0..drivers)
|
|
185
|
+
.map(|_| Slot {
|
|
186
|
+
handoff: Mutex::new(Handoff {
|
|
187
|
+
cores: Vec::new(),
|
|
188
|
+
exited: false,
|
|
189
|
+
}),
|
|
190
|
+
thread: Mutex::new(None),
|
|
191
|
+
stats: DriverStats::default(),
|
|
192
|
+
})
|
|
193
|
+
.collect(),
|
|
194
|
+
target: AtomicUsize::new(drivers),
|
|
195
|
+
adaptive,
|
|
196
|
+
forced: AtomicUsize::new(0),
|
|
197
|
+
closing: AtomicBool::new(false),
|
|
198
|
+
moves: AtomicU64::new(0),
|
|
199
|
+
controller: Mutex::new(controller),
|
|
200
|
+
window_at: AtomicU64::new(0),
|
|
201
|
+
tracing: AtomicBool::new(false),
|
|
202
|
+
vfs,
|
|
203
|
+
submitters,
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/// Runs the controller if its window is over and no other driver is running it.
|
|
208
|
+
fn tick(&self) {
|
|
209
|
+
let window = nanos(WINDOW);
|
|
210
|
+
let now = self.vfs.monotonic_nanos();
|
|
211
|
+
if now.saturating_sub(self.window_at.load(Ordering::Relaxed)) < window {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
let mut c = match self.controller.try_lock() {
|
|
215
|
+
Ok(c) => c,
|
|
216
|
+
Err(std::sync::TryLockError::Poisoned(p)) => p.into_inner(),
|
|
217
|
+
Err(std::sync::TryLockError::WouldBlock) => return,
|
|
218
|
+
};
|
|
219
|
+
if let Some(c) = c.as_mut() {
|
|
220
|
+
c.tick(self);
|
|
221
|
+
}
|
|
222
|
+
self.window_at.store(now, Ordering::Relaxed);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/// The driver shard `id` belongs to at `k` drivers. Round-robin, not blocks of n/k:
|
|
226
|
+
/// packing (D217) keeps shards `0..active` busy, and round-robin spreads those over the
|
|
227
|
+
/// drivers where blocks would put them all on driver 0.
|
|
228
|
+
pub(crate) fn owner(id: ShardId, k: usize) -> usize {
|
|
229
|
+
usize::from(id.0) % k
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
pub(crate) fn target(&self) -> usize {
|
|
233
|
+
self.target.load(Ordering::Acquire)
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/// Whether every shard is on the driver the target puts it on.
|
|
237
|
+
pub(crate) fn settled(&self) -> bool {
|
|
238
|
+
self.slots
|
|
239
|
+
.iter()
|
|
240
|
+
.all(|s| s.stats.misplaced.load(Ordering::Relaxed) == 0)
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/// Fixes the target at `k` (clamped to the drivers started), or with `None` hands it
|
|
244
|
+
/// back to the controller, or without one back to the drivers started. For tests and
|
|
245
|
+
/// benchmarks.
|
|
246
|
+
pub(crate) fn force_target(&self, k: Option<usize>) {
|
|
247
|
+
let k = k.map_or(0, |k| k.clamp(1, self.slots.len()));
|
|
248
|
+
self.forced.store(k, Ordering::Release);
|
|
249
|
+
if k != 0 {
|
|
250
|
+
self.set_target(k);
|
|
251
|
+
} else if !self.adaptive {
|
|
252
|
+
self.set_target(self.slots.len());
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
fn set_target(&self, k: usize) {
|
|
257
|
+
if self.target.swap(k, Ordering::AcqRel) != k {
|
|
258
|
+
// Every driver looks again: those above `k` give their shards away.
|
|
259
|
+
for d in 0..self.slots.len() {
|
|
260
|
+
self.wake(d);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/// Shutdown, before the inboxes close: no more moves, and every driver wakes to finish.
|
|
266
|
+
pub(crate) fn close(&self) {
|
|
267
|
+
self.closing.store(true, Ordering::Release);
|
|
268
|
+
for d in 0..self.slots.len() {
|
|
269
|
+
self.wake(d);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
fn wake(&self, d: usize) {
|
|
274
|
+
let target = lock(&self.slots[d].thread).clone();
|
|
275
|
+
if let Some((t, w)) = target {
|
|
276
|
+
if let Some(w) = w {
|
|
277
|
+
w.wake();
|
|
278
|
+
}
|
|
279
|
+
t.unpark();
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/// Hands `core` to driver `to`, or gives it back when `to` exited or shutdown began.
|
|
284
|
+
fn hand_off(&self, mut core: ShardCore<H>, to: usize) -> Option<ShardCore<H>> {
|
|
285
|
+
let mut h = lock(&self.slots[to].handoff);
|
|
286
|
+
if h.exited || self.closing.load(Ordering::Acquire) {
|
|
287
|
+
return Some(core);
|
|
288
|
+
}
|
|
289
|
+
core.mark_released();
|
|
290
|
+
h.cores.push(core);
|
|
291
|
+
drop(h);
|
|
292
|
+
self.moves.fetch_add(1, Ordering::Relaxed);
|
|
293
|
+
self.wake(to);
|
|
294
|
+
None
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
pub(crate) fn moves(&self) -> u64 {
|
|
298
|
+
self.moves.load(Ordering::Relaxed)
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/// The controller's windows since the last call, one JSON object each (#1015). The
|
|
302
|
+
/// first call starts the log, and without the load controller starts an observe-only
|
|
303
|
+
/// one: it reads the same windows and logs what it would decide, but never resizes. For
|
|
304
|
+
/// benchmarks: not an API.
|
|
305
|
+
pub(crate) fn trace(&self) -> Vec<String> {
|
|
306
|
+
let wakes = self.wakes();
|
|
307
|
+
let mut c = lock(&self.controller);
|
|
308
|
+
let c = c.get_or_insert_with(|| {
|
|
309
|
+
let mut c = Controller::new(self.slots.len(), wakes, self.vfs.monotonic_nanos());
|
|
310
|
+
for (last, slot) in c.last.iter_mut().zip(self.slots.iter()) {
|
|
311
|
+
*last = slot.stats.counts();
|
|
312
|
+
}
|
|
313
|
+
c
|
|
314
|
+
});
|
|
315
|
+
let out = c.log.get_or_insert_with(VecDeque::new).drain(..).collect();
|
|
316
|
+
self.tracing.store(true, Ordering::Relaxed);
|
|
317
|
+
out
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/// Producer wakes of every shard so far (the sum of their `(parks, wakes)` second half).
|
|
321
|
+
fn wakes(&self) -> u64 {
|
|
322
|
+
self.submitters.iter().map(|s| s.idle_counts().1).sum()
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/// One window of the controller's view. Only drivers below the target count towards
|
|
327
|
+
/// `max_busy`, `sum_busy`, `slow` and `wait`: during a shrink's moves, misplaced shards' time
|
|
328
|
+
/// on drivers at or above it is missed for a window or two.
|
|
329
|
+
#[derive(Clone, Copy, Debug)]
|
|
330
|
+
struct Window {
|
|
331
|
+
/// The busiest driver's awake-busy.
|
|
332
|
+
max_busy: f64,
|
|
333
|
+
/// Awake-busy summed over the active drivers.
|
|
334
|
+
sum_busy: f64,
|
|
335
|
+
/// The highest fraction of slow passes over the active drivers.
|
|
336
|
+
slow: f64,
|
|
337
|
+
/// The active drivers' sibling wait and busy, in nanoseconds.
|
|
338
|
+
wait_nanos: u64,
|
|
339
|
+
busy_nanos: u64,
|
|
340
|
+
wakes: u64,
|
|
341
|
+
ops: u64,
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/// Which rule resized the set. A shrink that cost throughput is undone by the grow rule,
|
|
345
|
+
/// on the sibling wait it causes, not by comparing ops per window before and after it:
|
|
346
|
+
/// sparse-wide's ops per window move 3% in a second about half the time at a fixed driver
|
|
347
|
+
/// count, so that comparison undid its shrink to 2 at random and held it at 4, where its
|
|
348
|
+
/// tail gain is lost (#1015's second round).
|
|
349
|
+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
|
350
|
+
enum Why {
|
|
351
|
+
Grow,
|
|
352
|
+
Shrink,
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/// The load controller (D289 PR 2), run between passes by any driver whose pass finds the
|
|
356
|
+
/// window over. Its times are nanoseconds on the runtime's VFS clock (`monotonic_nanos`),
|
|
357
|
+
/// the clock the drivers' busy time is measured on: real time in production, and the
|
|
358
|
+
/// simulated clock under `SimVfs`, where a test closes a window by advancing it (#1462).
|
|
359
|
+
struct Controller {
|
|
360
|
+
at: u64,
|
|
361
|
+
/// Per driver: busy, passes, slow, ops, sibling wait at the window's start.
|
|
362
|
+
last: Vec<[u64; 5]>,
|
|
363
|
+
last_wakes: u64,
|
|
364
|
+
windows: VecDeque<Window>,
|
|
365
|
+
hold_until: u64,
|
|
366
|
+
shrink_windows: usize,
|
|
367
|
+
last_shrink: Option<u64>,
|
|
368
|
+
/// The trace's windows not yet read ([`Drivers::trace`]), and how many it has logged.
|
|
369
|
+
log: Option<VecDeque<String>>,
|
|
370
|
+
logged: u64,
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
impl Controller {
|
|
374
|
+
fn new(drivers: usize, wakes: u64, now: u64) -> Self {
|
|
375
|
+
Self {
|
|
376
|
+
at: now,
|
|
377
|
+
last: vec![[0; 5]; drivers],
|
|
378
|
+
last_wakes: wakes,
|
|
379
|
+
windows: VecDeque::new(),
|
|
380
|
+
hold_until: now.saturating_add(nanos(HOLD)),
|
|
381
|
+
shrink_windows: SHRINK_WINDOWS,
|
|
382
|
+
last_shrink: None,
|
|
383
|
+
log: None,
|
|
384
|
+
logged: 0,
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
fn tick<H: ShardHandler>(&mut self, drivers: &Drivers<H>) {
|
|
389
|
+
let now = drivers.vfs.monotonic_nanos();
|
|
390
|
+
let elapsed = Duration::from_nanos(now.saturating_sub(self.at));
|
|
391
|
+
if elapsed < WINDOW {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
self.at = now;
|
|
395
|
+
let k = drivers.target();
|
|
396
|
+
let window_nanos = u64::try_from(elapsed.as_nanos()).unwrap_or(u64::MAX).max(1) as f64;
|
|
397
|
+
let (mut max_busy, mut sum_busy, mut slow, mut ops) = (0f64, 0f64, 0f64, 0u64);
|
|
398
|
+
let (mut wait_nanos, mut busy_nanos) = (0u64, 0u64);
|
|
399
|
+
let mut deltas = Vec::new();
|
|
400
|
+
for (d, slot) in drivers.slots.iter().enumerate() {
|
|
401
|
+
let now_counts = slot.stats.counts();
|
|
402
|
+
let last = std::mem::replace(&mut self.last[d], now_counts);
|
|
403
|
+
let delta = |i: usize| now_counts[i].saturating_sub(last[i]);
|
|
404
|
+
if self.log.is_some() {
|
|
405
|
+
deltas.push(std::array::from_fn::<u64, 5, _>(delta));
|
|
406
|
+
}
|
|
407
|
+
ops += delta(3);
|
|
408
|
+
if d < k {
|
|
409
|
+
let busy = delta(0) as f64 / window_nanos;
|
|
410
|
+
max_busy = max_busy.max(busy);
|
|
411
|
+
sum_busy += busy;
|
|
412
|
+
if delta(1) > 0 {
|
|
413
|
+
slow = slow.max(delta(2) as f64 / delta(1) as f64);
|
|
414
|
+
}
|
|
415
|
+
wait_nanos += delta(4);
|
|
416
|
+
busy_nanos += delta(0);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
let wakes_now = drivers.wakes();
|
|
420
|
+
let wakes = wakes_now.saturating_sub(std::mem::replace(&mut self.last_wakes, wakes_now));
|
|
421
|
+
if elapsed > IDLE_WINDOW {
|
|
422
|
+
// Every driver parked through most of it: the counters above are the new
|
|
423
|
+
// baseline, and the window isn't one.
|
|
424
|
+
self.log_window(drivers, elapsed, k, &deltas, wakes, None, false);
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
self.windows.push_back(Window {
|
|
428
|
+
max_busy,
|
|
429
|
+
sum_busy,
|
|
430
|
+
slow,
|
|
431
|
+
wait_nanos,
|
|
432
|
+
busy_nanos,
|
|
433
|
+
wakes,
|
|
434
|
+
ops,
|
|
435
|
+
});
|
|
436
|
+
while self.windows.len() > MAX_SHRINK_WINDOWS {
|
|
437
|
+
self.windows.pop_front();
|
|
438
|
+
}
|
|
439
|
+
let held = drivers.forced.load(Ordering::Acquire) != 0 || now < self.hold_until;
|
|
440
|
+
let decision = if held && self.log.is_none() {
|
|
441
|
+
None
|
|
442
|
+
} else {
|
|
443
|
+
self.decide(k, drivers.slots.len())
|
|
444
|
+
};
|
|
445
|
+
let apply = drivers.adaptive && !held;
|
|
446
|
+
if self.log.is_some() {
|
|
447
|
+
let logged = decision.map(|d| (d, apply));
|
|
448
|
+
self.log_window(drivers, elapsed, k, &deltas, wakes, logged, true);
|
|
449
|
+
}
|
|
450
|
+
if !apply {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
if let Some((next, _)) = decision {
|
|
454
|
+
if next < k {
|
|
455
|
+
self.last_shrink = Some(now);
|
|
456
|
+
} else if self
|
|
457
|
+
.last_shrink
|
|
458
|
+
.is_some_and(|at| now.saturating_sub(at) < nanos(UNDO))
|
|
459
|
+
{
|
|
460
|
+
// A shrink undone: wait twice as long before the next one (D255).
|
|
461
|
+
self.shrink_windows = (self.shrink_windows * 2).min(MAX_SHRINK_WINDOWS);
|
|
462
|
+
}
|
|
463
|
+
self.windows.clear();
|
|
464
|
+
self.hold_until = now.saturating_add(nanos(HOLD));
|
|
465
|
+
drivers.set_target(next);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/// Logs one window: each driver's busy, passes, slow passes, ops and sibling wait over
|
|
470
|
+
/// it, the producer wakes, and what the controller decided and whether it resized.
|
|
471
|
+
#[allow(clippy::too_many_arguments)]
|
|
472
|
+
fn log_window<H: ShardHandler>(
|
|
473
|
+
&mut self,
|
|
474
|
+
drivers: &Drivers<H>,
|
|
475
|
+
elapsed: Duration,
|
|
476
|
+
k: usize,
|
|
477
|
+
deltas: &[[u64; 5]],
|
|
478
|
+
wakes: u64,
|
|
479
|
+
decision: Option<((usize, Why), bool)>,
|
|
480
|
+
counted: bool,
|
|
481
|
+
) {
|
|
482
|
+
let Some(log) = self.log.as_mut() else {
|
|
483
|
+
return;
|
|
484
|
+
};
|
|
485
|
+
let column = |i: usize| {
|
|
486
|
+
let v: Vec<String> = deltas.iter().map(|d| d[i].to_string()).collect();
|
|
487
|
+
v.join(",")
|
|
488
|
+
};
|
|
489
|
+
let at = std::time::SystemTime::now()
|
|
490
|
+
.duration_since(std::time::UNIX_EPOCH)
|
|
491
|
+
.map_or(0, |d| d.as_micros());
|
|
492
|
+
let decided = match decision {
|
|
493
|
+
None => "null".to_owned(),
|
|
494
|
+
Some(((to, why), applied)) => {
|
|
495
|
+
format!(r#"{{"to":{to},"why":"{why:?}","applied":{applied}}}"#)
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
log.push_back(format!(
|
|
499
|
+
r#"{{"seq":{},"at_us":{at},"window_us":{},"k":{k},"ceiling":{},"adaptive":{},"forced":{},"counted":{counted},"busy_ns":[{}],"passes":[{}],"slow":[{}],"ops":[{}],"wait_ns":[{}],"wakes":{wakes},"decided":{decided}}}"#,
|
|
500
|
+
self.logged,
|
|
501
|
+
elapsed.as_micros(),
|
|
502
|
+
drivers.slots.len(),
|
|
503
|
+
drivers.adaptive,
|
|
504
|
+
drivers.forced.load(Ordering::Acquire),
|
|
505
|
+
column(0),
|
|
506
|
+
column(1),
|
|
507
|
+
column(2),
|
|
508
|
+
column(3),
|
|
509
|
+
column(4),
|
|
510
|
+
));
|
|
511
|
+
self.logged += 1;
|
|
512
|
+
while log.len() > TRACE_WINDOWS {
|
|
513
|
+
log.pop_front();
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/// The next target and the rule that set it, if the windows since the last resize call
|
|
518
|
+
/// for one.
|
|
519
|
+
fn decide(&self, k: usize, ceiling: usize) -> Option<(usize, Why)> {
|
|
520
|
+
let recent = |n: usize| self.windows.iter().rev().take(n);
|
|
521
|
+
if k < ceiling && self.windows.len() >= GROW_WINDOWS {
|
|
522
|
+
let n = GROW_WINDOWS as f64;
|
|
523
|
+
let busy = recent(GROW_WINDOWS).map(|w| w.max_busy).sum::<f64>() / n;
|
|
524
|
+
let busy_ops: u64 = recent(GROW_WINDOWS).map(|w| w.ops).sum();
|
|
525
|
+
let saturated = busy_ops >= SHRINK_MIN_OPS * GROW_WINDOWS as u64 && busy > GROW_BUSY;
|
|
526
|
+
let waiting = self.windows.len() >= WAIT_WINDOWS && {
|
|
527
|
+
let (wait, served, ops) = recent(WAIT_WINDOWS).fold((0, 0, 0), |(a, b, o), w| {
|
|
528
|
+
(a + w.wait_nanos, b + w.busy_nanos, o + w.ops)
|
|
529
|
+
});
|
|
530
|
+
ops >= SHRINK_MIN_OPS * WAIT_WINDOWS as u64
|
|
531
|
+
&& wait as f64 > GROW_WAIT * served as f64
|
|
532
|
+
};
|
|
533
|
+
// Doubling, not one at a time: a driver's busy saturates at 1, so it can't say how
|
|
534
|
+
// many more the work needs, and stepping up one per 3 s left transfer at 2-12 of 16
|
|
535
|
+
// drivers through its measured phase (-10%; #1006's second A/B).
|
|
536
|
+
if saturated || waiting {
|
|
537
|
+
return Some(((2 * k).min(ceiling), Why::Grow));
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
if k > 1 && self.windows.len() >= self.shrink_windows {
|
|
541
|
+
let n = self.shrink_windows as f64;
|
|
542
|
+
let sum_busy = recent(self.shrink_windows).map(|w| w.sum_busy).sum::<f64>() / n;
|
|
543
|
+
let slow = recent(self.shrink_windows).map(|w| w.slow).sum::<f64>() / n;
|
|
544
|
+
let wakes: u64 = recent(self.shrink_windows).map(|w| w.wakes).sum();
|
|
545
|
+
let ops: u64 = recent(self.shrink_windows).map(|w| w.ops).sum();
|
|
546
|
+
let wakes_per_op = wakes as f64 / ops.max(1) as f64;
|
|
547
|
+
let busy_enough = ops >= SHRINK_MIN_OPS * self.shrink_windows as u64;
|
|
548
|
+
// Straight to the drivers the work needs at SHRINK_BUSY each, not one at a time:
|
|
549
|
+
// stepping down one driver per 5 s took a light store about 100 s from 16 to 2,
|
|
550
|
+
// past the bench's warm-up and most of its measured phase (#1006's first A/B).
|
|
551
|
+
let needed = ((sum_busy / SHRINK_BUSY).ceil() as usize).max(MIN_DRIVERS);
|
|
552
|
+
if wakes_per_op > SHRINK_WAKES_PER_OP
|
|
553
|
+
&& busy_enough
|
|
554
|
+
&& needed < k
|
|
555
|
+
&& slow <= SLOW_PASSES
|
|
556
|
+
{
|
|
557
|
+
return Some((needed, Why::Shrink));
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
None
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
/// Body of an engine-owned driver thread `d` (D289): the turns of the shards it holds, one
|
|
565
|
+
/// after another, then one spin and one park for all of them. With one shard it is that
|
|
566
|
+
/// shard's thread, as before D289. Returns the handlers of the shards it held at shutdown,
|
|
567
|
+
/// with their ids.
|
|
568
|
+
pub(crate) fn driver_main<H: ShardHandler>(
|
|
569
|
+
drivers: Arc<Drivers<H>>,
|
|
570
|
+
d: usize,
|
|
571
|
+
mut cores: Vec<ShardCore<H>>,
|
|
572
|
+
) -> Vec<(ShardId, H)> {
|
|
573
|
+
let mut idle_park = sched::IdlePark::default();
|
|
574
|
+
let mut done = Vec::new();
|
|
575
|
+
let vfs = Arc::clone(&drivers.vfs);
|
|
576
|
+
// The driver reads the spin window from its first shard: every shard of a runtime
|
|
577
|
+
// shares it.
|
|
578
|
+
debug_assert!(cores.iter().all(|c| Arc::ptr_eq(&c.vfs, &vfs)
|
|
579
|
+
&& (c.spin.window, c.spin.cap) == (cores[0].spin.window, cores[0].spin.cap)));
|
|
580
|
+
// Sized from this thread's idle gaps (#1176); made at the first spin, from a shard's
|
|
581
|
+
// settings (a driver may start with none).
|
|
582
|
+
let mut gaps: Option<GapWindow> = None;
|
|
583
|
+
vfs.attach_thread();
|
|
584
|
+
for core in &mut cores {
|
|
585
|
+
core.attach();
|
|
586
|
+
}
|
|
587
|
+
// Every shard this driver holds wakes this thread: its park, or its wait in its ring.
|
|
588
|
+
let waker = pigeonhole_io::own_io_waker();
|
|
589
|
+
let target = || match &waker {
|
|
590
|
+
Some(w) => WakeTarget::ThreadRing(thread::current(), w.clone()),
|
|
591
|
+
None => WakeTarget::Thread(thread::current()),
|
|
592
|
+
};
|
|
593
|
+
*lock(&drivers.slots[d].thread) = Some((thread::current(), waker.clone()));
|
|
594
|
+
for core in &cores {
|
|
595
|
+
core.signal().set_target(target());
|
|
596
|
+
}
|
|
597
|
+
let stats = &drivers.slots[d].stats;
|
|
598
|
+
loop {
|
|
599
|
+
// Shards handed over since the last pass: their wakeups now reach this thread, and
|
|
600
|
+
// their turns run in this pass, before any park.
|
|
601
|
+
{
|
|
602
|
+
let mut h = lock(&drivers.slots[d].handoff);
|
|
603
|
+
for core in h.cores.drain(..) {
|
|
604
|
+
core.signal().set_target(target());
|
|
605
|
+
cores.push(core);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
let pass_start = vfs.monotonic_nanos();
|
|
609
|
+
let mut more = false;
|
|
610
|
+
let mut sibling_wait = 0;
|
|
611
|
+
let mut i = 0;
|
|
612
|
+
while i < cores.len() {
|
|
613
|
+
let core = &mut cores[i];
|
|
614
|
+
let start = vfs.monotonic_nanos();
|
|
615
|
+
let deadline = start.saturating_add(core.time_slice);
|
|
616
|
+
let work = core.work_done;
|
|
617
|
+
more |= core.run_once(deadline);
|
|
618
|
+
let turn = vfs.monotonic_nanos().saturating_sub(start);
|
|
619
|
+
// The turn's time, for the balancer's view of how busy this shard is (D217) and
|
|
620
|
+
// the controller's of this driver.
|
|
621
|
+
core.signal().add_busy(turn);
|
|
622
|
+
stats.busy.fetch_add(turn, Ordering::Relaxed);
|
|
623
|
+
stats
|
|
624
|
+
.ops
|
|
625
|
+
.fetch_add(core.work_done.saturating_sub(work), Ordering::Relaxed);
|
|
626
|
+
if core.work_done > work {
|
|
627
|
+
sibling_wait += start.saturating_sub(pass_start);
|
|
628
|
+
}
|
|
629
|
+
if core.inbox().is_closed() {
|
|
630
|
+
let mut core = cores.swap_remove(i);
|
|
631
|
+
let _shard = EnterShard::new(core.id);
|
|
632
|
+
core.finish();
|
|
633
|
+
done.push((core.id, core.handler));
|
|
634
|
+
continue;
|
|
635
|
+
}
|
|
636
|
+
i += 1;
|
|
637
|
+
}
|
|
638
|
+
if !cores.is_empty() {
|
|
639
|
+
stats.passes.fetch_add(1, Ordering::Relaxed);
|
|
640
|
+
if sibling_wait > 0 {
|
|
641
|
+
stats
|
|
642
|
+
.sibling_wait
|
|
643
|
+
.fetch_add(sibling_wait, Ordering::Relaxed);
|
|
644
|
+
}
|
|
645
|
+
if vfs.monotonic_nanos().saturating_sub(pass_start) > PASS_BUDGET_NANOS {
|
|
646
|
+
stats.slow.fetch_add(1, Ordering::Relaxed);
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
if drivers.adaptive || drivers.tracing.load(Ordering::Relaxed) {
|
|
650
|
+
drivers.tick();
|
|
651
|
+
}
|
|
652
|
+
// Shards that belong elsewhere at the current target move once this thread's ring
|
|
653
|
+
// is quiet (see the module doc); until then they stay and run here.
|
|
654
|
+
let k = drivers.target();
|
|
655
|
+
let misplaced = cores
|
|
656
|
+
.iter()
|
|
657
|
+
.filter(|c| Drivers::<H>::owner(c.id, k) != d)
|
|
658
|
+
.count();
|
|
659
|
+
if misplaced > 0 && !pigeonhole_io::own_io_in_flight() {
|
|
660
|
+
let mut kept = Vec::with_capacity(cores.len());
|
|
661
|
+
for core in cores.drain(..) {
|
|
662
|
+
let to = Drivers::<H>::owner(core.id, k);
|
|
663
|
+
if to == d {
|
|
664
|
+
kept.push(core);
|
|
665
|
+
} else if let Some(core) = drivers.hand_off(core, to) {
|
|
666
|
+
kept.push(core);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
cores = kept;
|
|
670
|
+
}
|
|
671
|
+
stats.misplaced.store(
|
|
672
|
+
cores
|
|
673
|
+
.iter()
|
|
674
|
+
.filter(|c| Drivers::<H>::owner(c.id, k) != d)
|
|
675
|
+
.count(),
|
|
676
|
+
Ordering::Relaxed,
|
|
677
|
+
);
|
|
678
|
+
if cores.is_empty() && drivers.closing.load(Ordering::Acquire) {
|
|
679
|
+
let mut h = lock(&drivers.slots[d].handoff);
|
|
680
|
+
if h.cores.is_empty() {
|
|
681
|
+
h.exited = true;
|
|
682
|
+
return done;
|
|
683
|
+
}
|
|
684
|
+
continue;
|
|
685
|
+
}
|
|
686
|
+
if more {
|
|
687
|
+
continue;
|
|
688
|
+
}
|
|
689
|
+
// I/O only this thread completes (its ring, #402), for any of its shards: spin
|
|
690
|
+
// first, reaping without blocking, then wait on the ring until a completion, a wake
|
|
691
|
+
// (the ring's eventfd) or the earliest deadline.
|
|
692
|
+
let idle_from = Instant::now();
|
|
693
|
+
if gaps.is_none()
|
|
694
|
+
&& let Some(c) = cores.first()
|
|
695
|
+
{
|
|
696
|
+
gaps = Some(GapWindow::new(c.spin.window, c.spin.cap));
|
|
697
|
+
}
|
|
698
|
+
let window = gaps.as_ref().map_or(Duration::ZERO, GapWindow::window);
|
|
699
|
+
if pigeonhole_io::own_io_in_flight() {
|
|
700
|
+
if spin_before_park(&mut cores, window, true) {
|
|
701
|
+
record_gap(&mut gaps, idle_from);
|
|
702
|
+
continue;
|
|
703
|
+
}
|
|
704
|
+
let now = vfs.monotonic_nanos();
|
|
705
|
+
let until = next_deadline(&cores)
|
|
706
|
+
.map_or(RING_IDLE_WAIT, |d| {
|
|
707
|
+
Duration::from_nanos(d.saturating_sub(now))
|
|
708
|
+
})
|
|
709
|
+
.min(RING_IDLE_WAIT);
|
|
710
|
+
pigeonhole_io::reap_own_io(Some(until));
|
|
711
|
+
record_gap(&mut gaps, idle_from);
|
|
712
|
+
continue;
|
|
713
|
+
}
|
|
714
|
+
if spin_before_park(&mut cores, window, false) {
|
|
715
|
+
record_gap(&mut gaps, idle_from);
|
|
716
|
+
continue;
|
|
717
|
+
}
|
|
718
|
+
// Every shard announced sleep at the end of its turn (or of the spin), so a message
|
|
719
|
+
// sent since wakes this thread, as does a handoff. Until then, or the earliest
|
|
720
|
+
// sleeping task's deadline (re-checked sooner while the clock has not shown it keeps
|
|
721
|
+
// real time: a simulated clock moves without waking anyone).
|
|
722
|
+
if !lock(&drivers.slots[d].handoff).cores.is_empty() {
|
|
723
|
+
continue;
|
|
724
|
+
}
|
|
725
|
+
for core in &cores {
|
|
726
|
+
core.signal().parked();
|
|
727
|
+
}
|
|
728
|
+
match next_deadline(&cores) {
|
|
729
|
+
None => {
|
|
730
|
+
debug_assert!(
|
|
731
|
+
!pigeonhole_io::in_async_poll(),
|
|
732
|
+
"an idle shard driver parks inside an async poll (a lost wake, #1226)"
|
|
733
|
+
);
|
|
734
|
+
thread::park()
|
|
735
|
+
}
|
|
736
|
+
Some(at) => idle_park.park(&*vfs, at),
|
|
737
|
+
}
|
|
738
|
+
record_gap(&mut gaps, idle_from);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
fn record_gap(gaps: &mut Option<GapWindow>, idle_from: Instant) {
|
|
743
|
+
if let Some(g) = gaps {
|
|
744
|
+
g.record(idle_from.elapsed());
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/// A driver's spin window sized from its recent idle gaps (#1176): each gap runs from the
|
|
749
|
+
/// end of a pass with nothing left to the next pass, whether a spin, a ring wait or a park
|
|
750
|
+
/// ended it. A pass a timer starts (a balance pass, a flush deadline, a ring wait's timeout)
|
|
751
|
+
/// ends a gap too, and a parked gap includes the wake: both count gaps as no shorter than
|
|
752
|
+
/// the commits' own, so they bias the window short, never long. The window is the longest, up to the cap, whose expected poll per gap is at
|
|
753
|
+
/// most the base window: a poll ends when the gap does or the window runs out, so it costs
|
|
754
|
+
/// `min(gap, window)`. The base window always qualifies (it costs at most itself), so the
|
|
755
|
+
/// window is never shorter than the base. Gaps mostly short (a steady stream, however
|
|
756
|
+
/// bursty) allow the cap and catch the rare long gap a fixed base would park through;
|
|
757
|
+
/// gaps mostly long allow little more than the base, which then polls no longer per gap
|
|
758
|
+
/// than a fixed one.
|
|
759
|
+
#[derive(Debug)]
|
|
760
|
+
struct GapWindow {
|
|
761
|
+
base: Duration,
|
|
762
|
+
cap: Duration,
|
|
763
|
+
/// Gaps by power-of-two microseconds (bucket `b`: from 2^b to 2^(b+1) µs, bucket 0 from
|
|
764
|
+
/// 0), and their sum in nanoseconds, halved every [`Self::DECAY`] gaps.
|
|
765
|
+
counts: [u32; Self::BUCKETS],
|
|
766
|
+
sums: [u64; Self::BUCKETS],
|
|
767
|
+
/// Gaps since the last halving, and since the window was last chosen.
|
|
768
|
+
seen: u32,
|
|
769
|
+
since: u32,
|
|
770
|
+
window: Duration,
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
impl GapWindow {
|
|
774
|
+
const BUCKETS: usize = 16;
|
|
775
|
+
/// Gaps between choices of the window: the first comes after this many too.
|
|
776
|
+
const CHOOSE: u32 = 32;
|
|
777
|
+
const DECAY: u32 = 1024;
|
|
778
|
+
|
|
779
|
+
fn new(base: Duration, cap: Duration) -> Self {
|
|
780
|
+
Self {
|
|
781
|
+
base,
|
|
782
|
+
cap,
|
|
783
|
+
counts: [0; Self::BUCKETS],
|
|
784
|
+
sums: [0; Self::BUCKETS],
|
|
785
|
+
seen: 0,
|
|
786
|
+
since: 0,
|
|
787
|
+
window: base,
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
fn window(&self) -> Duration {
|
|
792
|
+
self.window
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
fn record(&mut self, gap: Duration) {
|
|
796
|
+
if self.cap <= self.base {
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
let nanos = u64::try_from(gap.as_nanos()).unwrap_or(u64::MAX);
|
|
800
|
+
let b = (nanos / 1000).checked_ilog2().unwrap_or(0) as usize;
|
|
801
|
+
let b = b.min(Self::BUCKETS - 1);
|
|
802
|
+
self.counts[b] += 1;
|
|
803
|
+
self.sums[b] = self.sums[b].saturating_add(nanos);
|
|
804
|
+
self.seen += 1;
|
|
805
|
+
if self.seen >= Self::DECAY {
|
|
806
|
+
self.seen /= 2;
|
|
807
|
+
for (c, s) in self.counts.iter_mut().zip(&mut self.sums) {
|
|
808
|
+
*c /= 2;
|
|
809
|
+
*s /= 2;
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
self.since += 1;
|
|
813
|
+
if self.since >= Self::CHOOSE {
|
|
814
|
+
self.since = 0;
|
|
815
|
+
self.window = self.choose();
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/// The expected poll per gap of a `window`, in nanoseconds, from the buckets: exact
|
|
820
|
+
/// at a bucket edge, and over the bucket it falls inside an upper bound.
|
|
821
|
+
fn cost(&self, window: u64) -> u64 {
|
|
822
|
+
let n: u64 = self.counts.iter().map(|&c| u64::from(c)).sum();
|
|
823
|
+
if n == 0 {
|
|
824
|
+
return 0;
|
|
825
|
+
}
|
|
826
|
+
let mut total: u64 = 0;
|
|
827
|
+
for (b, (&c, &s)) in self.counts.iter().zip(&self.sums).enumerate() {
|
|
828
|
+
let below = if b + 1 < Self::BUCKETS {
|
|
829
|
+
(1000u64 << (b + 1)) <= window
|
|
830
|
+
} else {
|
|
831
|
+
false
|
|
832
|
+
};
|
|
833
|
+
let poll = if below {
|
|
834
|
+
s
|
|
835
|
+
} else {
|
|
836
|
+
s.min(window.saturating_mul(u64::from(c)))
|
|
837
|
+
};
|
|
838
|
+
total = total.saturating_add(poll);
|
|
839
|
+
}
|
|
840
|
+
total / n
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
fn choose(&self) -> Duration {
|
|
844
|
+
let nanos = |d: Duration| u64::try_from(d.as_nanos()).unwrap_or(u64::MAX);
|
|
845
|
+
let (base, cap) = (nanos(self.base), nanos(self.cap));
|
|
846
|
+
let mut best = base;
|
|
847
|
+
// The cap, then each bucket edge above the base and below the cap.
|
|
848
|
+
let edges = (0..Self::BUCKETS).map(|b| 1000u64 << b);
|
|
849
|
+
for w in std::iter::once(cap).chain(edges.filter(|&e| e > base && e < cap)) {
|
|
850
|
+
if w > best && self.cost(w) <= base {
|
|
851
|
+
best = w;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
Duration::from_nanos(best)
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
/// The earliest deadline of a sleeping background task on any of `cores`.
|
|
859
|
+
fn next_deadline<H: ShardHandler>(cores: &[ShardCore<H>]) -> Option<u64> {
|
|
860
|
+
cores.iter().filter_map(ShardCore::next_deadline).min()
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
/// Before parking (engine-owned mode, D198): if any of a driver's shards handled a message
|
|
864
|
+
/// since the last park, polls all their queues for up to the spin window, so a client's
|
|
865
|
+
/// next message is taken without a wakeup. With `reap`, own-ring I/O is in flight: the poll
|
|
866
|
+
/// also completes it without blocking, so a commit waiting on a sync is answered without a
|
|
867
|
+
/// ring wait (#997's A/B: ring waits ended 67-78% of ycsb-f's passes). Returns whether work
|
|
868
|
+
/// arrived (the loop runs again at once). The window is measured on the real clock: a
|
|
869
|
+
/// simulated clock may not move while polling.
|
|
870
|
+
fn spin_before_park<H: ShardHandler>(
|
|
871
|
+
cores: &mut [ShardCore<H>],
|
|
872
|
+
window: Duration,
|
|
873
|
+
reap: bool,
|
|
874
|
+
) -> bool {
|
|
875
|
+
if cores.is_empty() {
|
|
876
|
+
return false;
|
|
877
|
+
}
|
|
878
|
+
// `due` consumes each shard's "handled a message" mark and its backoff.
|
|
879
|
+
let due: Vec<bool> = cores.iter_mut().map(|c| c.spin.due()).collect();
|
|
880
|
+
let n_due = due.iter().filter(|&&d| d).count() as u64;
|
|
881
|
+
if n_due == 0 {
|
|
882
|
+
return false;
|
|
883
|
+
}
|
|
884
|
+
// A poll that runs counts as busy (D256): the thread is awake and polling, kept so by
|
|
885
|
+
// its clients. On the VFS clock, as the turns are (a simulated clock does not move
|
|
886
|
+
// while polling, and counts nothing), split evenly over the shards that made it due.
|
|
887
|
+
// A skipped poll (the window is zero, no message since the last park, or the backoff)
|
|
888
|
+
// adds nothing: timing the skip counted two clock reads' worth on Linux and macOS and
|
|
889
|
+
// nothing on Windows, where consecutive reads of the clock can be equal.
|
|
890
|
+
let spun_from = cores[0].vfs.monotonic_nanos();
|
|
891
|
+
let hit = spin_poll(cores, window, reap);
|
|
892
|
+
let spun = cores[0].vfs.monotonic_nanos().saturating_sub(spun_from);
|
|
893
|
+
let share = spun / n_due;
|
|
894
|
+
for (core, _) in cores.iter_mut().zip(&due).filter(|(_, d)| **d) {
|
|
895
|
+
core.spin.record(hit);
|
|
896
|
+
core.signal().add_spin(share);
|
|
897
|
+
}
|
|
898
|
+
hit
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
/// The poll itself: every shard's queue for up to the spin window, then the sleep
|
|
902
|
+
/// handshake on a miss. Returns whether work arrived.
|
|
903
|
+
fn spin_poll<H: ShardHandler>(cores: &mut [ShardCore<H>], window: Duration, reap: bool) -> bool {
|
|
904
|
+
// Awake while polling, so a producer does not wake the thread (on a ring backend that
|
|
905
|
+
// is a syscall); sleep is announced again, and checked once more, on a miss.
|
|
906
|
+
for core in cores.iter() {
|
|
907
|
+
core.signal().awake();
|
|
908
|
+
}
|
|
909
|
+
let end = std::time::Instant::now() + window;
|
|
910
|
+
let mut polls = 0u32;
|
|
911
|
+
let mut hit = 'poll: loop {
|
|
912
|
+
for core in cores.iter_mut() {
|
|
913
|
+
if core.stash.is_none() {
|
|
914
|
+
core.stash = core.rx.try_recv().ok();
|
|
915
|
+
}
|
|
916
|
+
if core.stash.is_some() || core.signal().task_woken() || core.inbox().is_closed() {
|
|
917
|
+
break 'poll true;
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
polls = polls.wrapping_add(1);
|
|
921
|
+
if polls.is_multiple_of(64) {
|
|
922
|
+
if std::time::Instant::now() >= end {
|
|
923
|
+
break false;
|
|
924
|
+
}
|
|
925
|
+
// Completions resolve here, waking the tasks waiting on them (`task_woken`
|
|
926
|
+
// above): in userspace while the completion queue is empty.
|
|
927
|
+
if reap {
|
|
928
|
+
pigeonhole_io::reap_own_io(None);
|
|
929
|
+
}
|
|
930
|
+
// Let another runnable thread in (an oversubscribed machine).
|
|
931
|
+
thread::yield_now();
|
|
932
|
+
} else {
|
|
933
|
+
std::hint::spin_loop();
|
|
934
|
+
}
|
|
935
|
+
};
|
|
936
|
+
if !hit {
|
|
937
|
+
// The sleep handshake again, for every shard: whatever a producer published
|
|
938
|
+
// before it read the flag is found here, and anything later wakes the thread.
|
|
939
|
+
for core in cores.iter_mut() {
|
|
940
|
+
hit |= core.check_before_sleep();
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
if hit {
|
|
944
|
+
for core in cores.iter() {
|
|
945
|
+
core.signal().awake();
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
hit
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
#[cfg(test)]
|
|
952
|
+
mod tests {
|
|
953
|
+
use super::{Controller, GROW_WINDOWS, GapWindow, SHRINK_WINDOWS, WAIT_WINDOWS, Why, Window};
|
|
954
|
+
use std::collections::VecDeque;
|
|
955
|
+
use std::time::Duration;
|
|
956
|
+
|
|
957
|
+
fn controller(windows: impl IntoIterator<Item = Window>) -> Controller {
|
|
958
|
+
let now = 0;
|
|
959
|
+
Controller {
|
|
960
|
+
at: now,
|
|
961
|
+
last: Vec::new(),
|
|
962
|
+
last_wakes: 0,
|
|
963
|
+
windows: windows.into_iter().collect::<VecDeque<_>>(),
|
|
964
|
+
hold_until: now,
|
|
965
|
+
shrink_windows: SHRINK_WINDOWS,
|
|
966
|
+
last_shrink: None,
|
|
967
|
+
log: None,
|
|
968
|
+
logged: 0,
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
fn window(max_busy: f64, sum_busy: f64, slow: f64, wakes: u64, ops: u64) -> Window {
|
|
973
|
+
Window {
|
|
974
|
+
max_busy,
|
|
975
|
+
sum_busy,
|
|
976
|
+
slow,
|
|
977
|
+
wait_nanos: 0,
|
|
978
|
+
busy_nanos: 0,
|
|
979
|
+
wakes,
|
|
980
|
+
ops,
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
/// A light, wake-heavy load shrinks straight to the drivers its work needs at 0.5 busy
|
|
985
|
+
/// each, not one at a time.
|
|
986
|
+
#[test]
|
|
987
|
+
fn a_light_load_shrinks_to_what_it_needs_in_one_step() {
|
|
988
|
+
let c = controller(vec![window(0.1, 1.4, 0.0, 200, 1000); SHRINK_WINDOWS]);
|
|
989
|
+
assert_eq!(c.decide(16, 16), Some((3, Why::Shrink)));
|
|
990
|
+
// Too little evidence yet: no change.
|
|
991
|
+
let c = controller(vec![window(0.1, 1.4, 0.0, 200, 1000); SHRINK_WINDOWS - 1]);
|
|
992
|
+
assert_eq!(c.decide(16, 16), None);
|
|
993
|
+
// Few producer wakes: the drivers aren't parking, so fewer wouldn't help. 0.08 a
|
|
994
|
+
// message is ycsb-f's and transfer's at 8-16 drivers (#1015), which lose 4% at 8.
|
|
995
|
+
let c = controller(vec![window(0.1, 1.4, 0.0, 80, 1000); SHRINK_WINDOWS]);
|
|
996
|
+
assert_eq!(c.decide(16, 16), None);
|
|
997
|
+
// Slow passes: no shrink, even with wakes.
|
|
998
|
+
let c = controller(vec![window(0.1, 1.4, 0.05, 200, 1000); SHRINK_WINDOWS]);
|
|
999
|
+
assert_eq!(c.decide(16, 16), None);
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
/// The shrink stops at two drivers, however light the load: one never paid off (#1015).
|
|
1003
|
+
#[test]
|
|
1004
|
+
fn the_shrink_stops_at_two_drivers() {
|
|
1005
|
+
let c = controller(vec![window(0.05, 0.1, 0.0, 500, 1000); SHRINK_WINDOWS]);
|
|
1006
|
+
assert_eq!(c.decide(16, 16), Some((2, Why::Shrink)));
|
|
1007
|
+
assert_eq!(c.decide(2, 16), None);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
/// An idle store doesn't shrink, whatever its wakes per op: its drivers park.
|
|
1011
|
+
#[test]
|
|
1012
|
+
fn an_idle_store_does_not_shrink() {
|
|
1013
|
+
let c = controller(vec![window(0.0, 0.0, 0.0, 5, 3); SHRINK_WINDOWS]);
|
|
1014
|
+
assert_eq!(c.decide(16, 16), None);
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
/// A shrink stands through a dip in ops per window that comes without sibling wait: at
|
|
1018
|
+
/// a fixed driver count sparse-wide's ops move 3% in a second about half the time
|
|
1019
|
+
/// (#1015's second round). The sibling wait a shrink that cost throughput causes grows
|
|
1020
|
+
/// the set back instead.
|
|
1021
|
+
#[test]
|
|
1022
|
+
fn a_shrink_stands_through_an_ops_dip_and_sibling_wait_undoes_it() {
|
|
1023
|
+
let before = window(0.3, 0.6, 0.0, 200, 10_000);
|
|
1024
|
+
let dip = window(0.3, 0.6, 0.0, 200, 7_000);
|
|
1025
|
+
let mut windows = vec![before; SHRINK_WINDOWS];
|
|
1026
|
+
windows.extend(vec![dip; WAIT_WINDOWS]);
|
|
1027
|
+
assert_eq!(controller(windows).decide(2, 16), None);
|
|
1028
|
+
let waiting = Window {
|
|
1029
|
+
wait_nanos: 20,
|
|
1030
|
+
busy_nanos: 100,
|
|
1031
|
+
..dip
|
|
1032
|
+
};
|
|
1033
|
+
let c = controller(vec![waiting; WAIT_WINDOWS]);
|
|
1034
|
+
assert_eq!(c.decide(2, 16), Some((4, Why::Grow)));
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
/// A saturated driver doubles the set, up to the ceiling. Slow passes alone don't: they
|
|
1038
|
+
/// come with flush and compaction slices that nothing waits behind (#1015).
|
|
1039
|
+
#[test]
|
|
1040
|
+
fn a_saturated_driver_grows_the_set_and_slow_passes_alone_do_not() {
|
|
1041
|
+
let c = controller(vec![window(0.95, 1.9, 0.0, 0, 1000); GROW_WINDOWS]);
|
|
1042
|
+
assert_eq!(c.decide(2, 16), Some((4, Why::Grow)));
|
|
1043
|
+
let c = controller(vec![window(0.95, 9.5, 0.0, 0, 1000); GROW_WINDOWS]);
|
|
1044
|
+
assert_eq!(c.decide(12, 16), Some((16, Why::Grow)));
|
|
1045
|
+
// At the ceiling: no growth.
|
|
1046
|
+
let c = controller(vec![window(0.95, 1.9, 0.0, 0, 1000); GROW_WINDOWS]);
|
|
1047
|
+
assert_eq!(c.decide(16, 16), None);
|
|
1048
|
+
// Busy but not saturated, or saturated on a few ops: no growth.
|
|
1049
|
+
let c = controller(vec![window(0.8, 1.6, 0.0, 0, 1000); WAIT_WINDOWS]);
|
|
1050
|
+
assert_eq!(c.decide(2, 16), None);
|
|
1051
|
+
let c = controller(vec![window(0.95, 1.9, 0.0, 0, 50); WAIT_WINDOWS]);
|
|
1052
|
+
assert_eq!(c.decide(2, 16), None);
|
|
1053
|
+
// Slow passes alone.
|
|
1054
|
+
let c = controller(vec![window(0.3, 0.6, 0.5, 0, 1000); WAIT_WINDOWS]);
|
|
1055
|
+
assert_eq!(c.decide(2, 16), None);
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
/// Messages waiting behind sibling turns about as long as they're served double the set,
|
|
1059
|
+
/// with neither a busy driver nor slow passes (transfer's hops at few drivers).
|
|
1060
|
+
#[test]
|
|
1061
|
+
fn sibling_wait_grows_the_set() {
|
|
1062
|
+
let waiting = Window {
|
|
1063
|
+
wait_nanos: 64_000_000,
|
|
1064
|
+
busy_nanos: 80_000_000,
|
|
1065
|
+
..window(0.4, 0.8, 0.0, 0, 1000)
|
|
1066
|
+
};
|
|
1067
|
+
let c = controller(vec![waiting; WAIT_WINDOWS]);
|
|
1068
|
+
assert_eq!(c.decide(2, 16), Some((4, Why::Grow)));
|
|
1069
|
+
// Over two seconds, not one: a second of waiting is not enough.
|
|
1070
|
+
let c = controller(vec![waiting; WAIT_WINDOWS - 1]);
|
|
1071
|
+
assert_eq!(c.decide(2, 16), None);
|
|
1072
|
+
let c = controller(vec![
|
|
1073
|
+
Window {
|
|
1074
|
+
wait_nanos: 8_000_000,
|
|
1075
|
+
..waiting
|
|
1076
|
+
};
|
|
1077
|
+
WAIT_WINDOWS
|
|
1078
|
+
]);
|
|
1079
|
+
assert_eq!(c.decide(2, 16), None);
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
/// A nearly idle window's high ratio doesn't grow the set: the windows' nanoseconds are
|
|
1083
|
+
/// summed, so it weighs as little as it served, and without enough ops none counts.
|
|
1084
|
+
#[test]
|
|
1085
|
+
fn idle_windows_do_not_grow_the_set_on_sibling_wait() {
|
|
1086
|
+
let quiet = Window {
|
|
1087
|
+
wait_nanos: 8_000_000,
|
|
1088
|
+
busy_nanos: 80_000_000,
|
|
1089
|
+
..window(0.4, 0.8, 0.0, 0, 1000)
|
|
1090
|
+
};
|
|
1091
|
+
let idle = Window {
|
|
1092
|
+
wait_nanos: 2_000_000,
|
|
1093
|
+
busy_nanos: 1_000_000,
|
|
1094
|
+
..window(0.01, 0.01, 0.0, 0, 50)
|
|
1095
|
+
};
|
|
1096
|
+
let mut windows = vec![quiet; WAIT_WINDOWS - 1];
|
|
1097
|
+
windows.push(idle);
|
|
1098
|
+
assert_eq!(controller(windows).decide(2, 16), None);
|
|
1099
|
+
// All idle: too few ops for the ratio to count, however high.
|
|
1100
|
+
assert_eq!(controller(vec![idle; WAIT_WINDOWS]).decide(2, 16), None);
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
fn gaps(base_us: u64, cap_us: u64, gaps_us: impl IntoIterator<Item = u64>) -> GapWindow {
|
|
1104
|
+
let mut g = GapWindow::new(
|
|
1105
|
+
Duration::from_micros(base_us),
|
|
1106
|
+
Duration::from_micros(cap_us),
|
|
1107
|
+
);
|
|
1108
|
+
for us in gaps_us {
|
|
1109
|
+
g.record(Duration::from_micros(us));
|
|
1110
|
+
}
|
|
1111
|
+
g
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
#[test]
|
|
1115
|
+
fn the_spin_window_starts_at_the_base_and_never_falls_below_it() {
|
|
1116
|
+
assert_eq!(gaps(200, 1000, []).window(), Duration::from_micros(200));
|
|
1117
|
+
// Gaps far over the cap: nothing longer than the base pays for itself.
|
|
1118
|
+
let sparse = gaps(200, 1000, std::iter::repeat_n(5000, 256));
|
|
1119
|
+
assert_eq!(sparse.window(), Duration::from_micros(200));
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
#[test]
|
|
1123
|
+
fn a_steady_stream_spins_to_the_cap() {
|
|
1124
|
+
// sparse-wide's shape: mostly short gaps and the odd long one, which a 200 µs window
|
|
1125
|
+
// parks through. Polling 1 ms costs 0.98 × 20 + 0.02 × 1000 = 40 µs a gap.
|
|
1126
|
+
let g = (0..512).map(|i| if i % 50 == 0 { 700 } else { 20 });
|
|
1127
|
+
assert_eq!(gaps(200, 1000, g).window(), Duration::from_micros(1000));
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
#[test]
|
|
1131
|
+
fn gaps_near_the_base_extend_the_window_only_as_far_as_it_pays() {
|
|
1132
|
+
// Every gap 300 µs: a window of 256 µs or more costs at least 256 µs a gap, over the
|
|
1133
|
+
// base, so the window stays at the base; at 150 µs gaps, polling to the cap costs
|
|
1134
|
+
// 150 µs a gap and catches them all.
|
|
1135
|
+
let at = |us| gaps(200, 1000, std::iter::repeat_n(us, 256)).window();
|
|
1136
|
+
assert_eq!(at(300), Duration::from_micros(200));
|
|
1137
|
+
assert_eq!(at(150), Duration::from_micros(1000));
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
#[test]
|
|
1141
|
+
fn the_window_follows_a_change_of_load() {
|
|
1142
|
+
let mut g = gaps(200, 1000, std::iter::repeat_n(20, 256));
|
|
1143
|
+
assert_eq!(g.window(), Duration::from_micros(1000));
|
|
1144
|
+
for _ in 0..2048 {
|
|
1145
|
+
g.record(Duration::from_micros(5000));
|
|
1146
|
+
}
|
|
1147
|
+
assert_eq!(g.window(), Duration::from_micros(200));
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
#[test]
|
|
1151
|
+
fn the_window_grows_back_when_the_load_returns() {
|
|
1152
|
+
// Slow to fast: the long gaps still weigh until the short ones outnumber them (and
|
|
1153
|
+
// the decay halves them), then the window is the cap again.
|
|
1154
|
+
let mut g = gaps(200, 1000, std::iter::repeat_n(5000, 256));
|
|
1155
|
+
assert_eq!(g.window(), Duration::from_micros(200));
|
|
1156
|
+
for _ in 0..32 {
|
|
1157
|
+
g.record(Duration::from_micros(20));
|
|
1158
|
+
}
|
|
1159
|
+
assert_eq!(g.window(), Duration::from_micros(200), "one choice in");
|
|
1160
|
+
for _ in 0..2048 {
|
|
1161
|
+
g.record(Duration::from_micros(20));
|
|
1162
|
+
}
|
|
1163
|
+
assert_eq!(g.window(), Duration::from_micros(1000));
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
#[test]
|
|
1167
|
+
fn a_cap_at_or_under_the_base_keeps_the_window_fixed() {
|
|
1168
|
+
let g = gaps(200, 200, std::iter::repeat_n(20, 256));
|
|
1169
|
+
assert_eq!(g.window(), Duration::from_micros(200));
|
|
1170
|
+
assert_eq!(
|
|
1171
|
+
gaps(0, 1000, std::iter::repeat_n(20, 256)).window(),
|
|
1172
|
+
Duration::ZERO
|
|
1173
|
+
);
|
|
1174
|
+
}
|
|
1175
|
+
}
|