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,1654 @@
|
|
|
1
|
+
//! Test hooks: the `test-hooks` feature, which only the engine's own tests and benches
|
|
2
|
+
//! enable (its dev-dependency on itself). Everything a test reaches into the engine with
|
|
3
|
+
//! is here: the `#[doc(hidden)]` `Engine` methods, the types they return, and the state
|
|
4
|
+
//! they keep in `Shared::hooks` and `ShardMetrics::hooks`.
|
|
5
|
+
//!
|
|
6
|
+
//! The rules:
|
|
7
|
+
//! - Every hook is used by a committed test; delete one when its last test goes.
|
|
8
|
+
//! - A hook does nothing until a test sets it: callbacks run once, flags start clear.
|
|
9
|
+
//! `take_appended` and `take_compactions` record only after a test turns recording on
|
|
10
|
+
//! with `record_history` (D164's follow-up, #148): with workspace feature unification
|
|
11
|
+
//! every `test-hooks` build would otherwise grow those vectors for a whole run nobody
|
|
12
|
+
//! reads. The [`ShardCounters`] are plain counters and always count. None changes what
|
|
13
|
+
//! the engine does.
|
|
14
|
+
//! - Prefer a public or application-owned seam (`EngineShard` over `SimVfs`,
|
|
15
|
+
//! `Engine::shard_stats`) to a new hook.
|
|
16
|
+
//!
|
|
17
|
+
//! The `#[cfg(feature = "test-hooks")]` sites elsewhere in the crate only run, check or
|
|
18
|
+
//! record into this state; `manifest.rs` keeps the three helpers that need its private
|
|
19
|
+
//! commit state (`race_window`, `parked`, `parks`).
|
|
20
|
+
|
|
21
|
+
use std::collections::BTreeMap;
|
|
22
|
+
use std::path::Path;
|
|
23
|
+
use std::sync::atomic::{AtomicBool, AtomicU16, AtomicU64, AtomicUsize, Ordering};
|
|
24
|
+
use std::sync::{Arc, Mutex, PoisonError};
|
|
25
|
+
|
|
26
|
+
use pigeonhole_compaction::MergeRegistry;
|
|
27
|
+
use pigeonhole_format::{
|
|
28
|
+
Durability, FamilyId, Lsn, ManifestVersion, Seqno, StreamId, TableId, TabletId, Timestamp,
|
|
29
|
+
};
|
|
30
|
+
use pigeonhole_pager::Pager;
|
|
31
|
+
use pigeonhole_runtime::{ShardId, TaskWaker, Waiter, completion};
|
|
32
|
+
|
|
33
|
+
pub use super::PendingMaintenance;
|
|
34
|
+
pub use crate::compact::CompactionRecord;
|
|
35
|
+
|
|
36
|
+
use super::Engine;
|
|
37
|
+
use crate::manifest;
|
|
38
|
+
use crate::shard::ShardMsg;
|
|
39
|
+
use crate::snapshot::{Snapshot, TabletMap};
|
|
40
|
+
use crate::{Error, Result};
|
|
41
|
+
|
|
42
|
+
/// Where a one-shot test callback runs (`Engine::on_next`).
|
|
43
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
44
|
+
pub enum HookSite {
|
|
45
|
+
/// At the start of the next view publish (a shard publishing its memtables or a
|
|
46
|
+
/// manifest commit), before that publish takes the publish lock: where another thread's
|
|
47
|
+
/// publish can land in between.
|
|
48
|
+
ViewPublish,
|
|
49
|
+
/// On the calling thread of the next writer `snapshot()`, after it pinned its seqno and
|
|
50
|
+
/// before it loads the view: where a test publishes a flush in between (#315 review).
|
|
51
|
+
SnapshotViewLoad,
|
|
52
|
+
/// On the calling thread of the next unpinned read as of now (`get_latest`,
|
|
53
|
+
/// `read_row_latest_into`), after its first visible-seqno read and before it loads the
|
|
54
|
+
/// view. The callback may set this site again, to run in the read's next try too.
|
|
55
|
+
LatestViewLoad,
|
|
56
|
+
/// At the start of the next `shrink` round, before it reclaims and checks what pins
|
|
57
|
+
/// retired space: where a test releases a pin between rounds (#1107).
|
|
58
|
+
ShrinkRound,
|
|
59
|
+
/// In the next `shrink` round, after it has read the catalog and before it relocates
|
|
60
|
+
/// anything: where a compaction or `drop_table` can commit under it.
|
|
61
|
+
ShrinkRelocates,
|
|
62
|
+
/// On the thread that `Engine::wait_failed` woke with a failure, before it returns:
|
|
63
|
+
/// where the recovery supervisor has not marked the failure yet, and a `close()` can
|
|
64
|
+
/// reach the failed engine first (D265).
|
|
65
|
+
FailureWake,
|
|
66
|
+
/// On the calling thread of the next `backup`, right after it released its snapshot's
|
|
67
|
+
/// memtables and before it merges the SSTs: where a test writes past the arena while
|
|
68
|
+
/// the backup still runs (#262).
|
|
69
|
+
BackupReleasedMemtables,
|
|
70
|
+
/// In the next `shrink` round that commits, after it has written its copies and before
|
|
71
|
+
/// it commits them: where a `drop_table` makes a copy one to abandon.
|
|
72
|
+
ShrinkCommits,
|
|
73
|
+
/// Reader processes: in the next snapshot, between reading the view record from shared
|
|
74
|
+
/// memory and loading the catalog of its manifest version.
|
|
75
|
+
ReaderViewRecord,
|
|
76
|
+
/// Reader processes: when a snapshot found the durable root at the view record's
|
|
77
|
+
/// manifest version and is about to read that manifest.
|
|
78
|
+
ReaderManifestLoad,
|
|
79
|
+
/// Reader processes: in the next change-feed poll, after its stale-attachment check and
|
|
80
|
+
/// before it reads the streams: where a test restarts the writer in between (D310 PR 4,
|
|
81
|
+
/// simp724's B2).
|
|
82
|
+
ReaderFeedReads,
|
|
83
|
+
/// On the coordinator's shard, right after it answered `OutcomeUnknown` for a
|
|
84
|
+
/// cross-shard commit whose share apply failed: where a caller that heard the answer
|
|
85
|
+
/// commits again while the shard thread is still inside the handler (#1358).
|
|
86
|
+
FailedShareAnswered,
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// A one-shot test callback.
|
|
90
|
+
type Callback = Box<dyn FnOnce() + Send>;
|
|
91
|
+
|
|
92
|
+
/// The one-shot callbacks tests set, at most one per site (`Hooks::sites`).
|
|
93
|
+
#[derive(Default)]
|
|
94
|
+
pub(crate) struct Sites(Mutex<Vec<(HookSite, Callback)>>);
|
|
95
|
+
|
|
96
|
+
impl Sites {
|
|
97
|
+
/// Sets the callback for `site`, replacing one that has not run.
|
|
98
|
+
pub(crate) fn set(&self, site: HookSite, f: Callback) {
|
|
99
|
+
let mut v = self.0.lock().unwrap_or_else(PoisonError::into_inner);
|
|
100
|
+
v.retain(|(s, _)| *s != site);
|
|
101
|
+
v.push((site, f));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// Runs `site`'s callback if one is set (outside the lock).
|
|
105
|
+
pub(crate) fn run(&self, site: HookSite) {
|
|
106
|
+
let f = {
|
|
107
|
+
let mut v = self.0.lock().unwrap_or_else(PoisonError::into_inner);
|
|
108
|
+
let i = v.iter().position(|(s, _)| *s == site);
|
|
109
|
+
i.map(|i| v.swap_remove(i).1)
|
|
110
|
+
};
|
|
111
|
+
if let Some(f) = f {
|
|
112
|
+
f();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/// A fault or forced path a test switches on (`Engine::inject`). The `Next` ones are
|
|
118
|
+
/// one-shot: the site that takes one clears it.
|
|
119
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
120
|
+
pub enum Fault {
|
|
121
|
+
/// While on, the manifest writer refuses every batch made only of WAL checkpoints with
|
|
122
|
+
/// `NoSpace`, through the path a snapshot rewrite that finds no space takes (nothing
|
|
123
|
+
/// written, the writer stays usable).
|
|
124
|
+
RefuseCheckpoints = 0,
|
|
125
|
+
/// While on, manifest commits drop every `SstBlobRefs` edit and the catalog keeps no
|
|
126
|
+
/// blob references, so the file looks as one written before tag 13 (#240).
|
|
127
|
+
OmitBlobRefs = 1,
|
|
128
|
+
/// Fails the next apply after its WAL append, of a single-shard batch or of a
|
|
129
|
+
/// cross-shard share: it is not applied, and the shard poisons itself, as an arena
|
|
130
|
+
/// miscount would (#230). The commit returns `OutcomeUnknown` either way: a single-shard
|
|
131
|
+
/// one's record replays at the next open, and a cross-shard one decided to commit is
|
|
132
|
+
/// settled there too (D227, ICR 0038, ICR 0040).
|
|
133
|
+
NextApply = 2,
|
|
134
|
+
/// Fails the next freeze a tablet change (a split, merge or move) makes of its tablets'
|
|
135
|
+
/// memtables: the shard poisons itself, as an arena miscount would, and the instance
|
|
136
|
+
/// reports the failure (ICR 0040).
|
|
137
|
+
NextTabletFreeze = 3,
|
|
138
|
+
/// The next commit group's second member waits for room as if the arena were full: the
|
|
139
|
+
/// stall path freezes memtables after the group's first member was admitted (#315
|
|
140
|
+
/// review).
|
|
141
|
+
NextRoomWait = 4,
|
|
142
|
+
/// The next freeze finds no chunk for a fresh memtable, as a starved arena would give
|
|
143
|
+
/// it: a closing shard then flushes the active memtable in place (#111, #838).
|
|
144
|
+
NextFreezeStarved = 5,
|
|
145
|
+
/// As `NextRoomWait`, for the group's third member: two members are admitted first, so a
|
|
146
|
+
/// group can wait for room with two singles on one row admitted, ranked 0 and 1 (#900).
|
|
147
|
+
ThirdRoomWait = 6,
|
|
148
|
+
/// The next commit group's second append fails as an I/O error would, before anything of
|
|
149
|
+
/// that member reaches the stream's buffer; the first member is appended (and written and
|
|
150
|
+
/// synced if it is a `Sync` one). The shard poisons itself (#921, #925).
|
|
151
|
+
SecondAppend = 7,
|
|
152
|
+
/// The next commit group's view publish (`publish_memtables`, after its write and apply)
|
|
153
|
+
/// fails: every member of the group fails with `Corruption` and the shard poisons itself.
|
|
154
|
+
/// A Buffered PREPARE in it has voted already (D279), so its commit ends `OutcomeUnknown`.
|
|
155
|
+
NextGroupPublish = 8,
|
|
156
|
+
/// While on, a coordinator holds every PREPARE it would send another shard (in
|
|
157
|
+
/// `Hooks::held_prepares`) instead of sending it, until `Engine::release_held_prepares`
|
|
158
|
+
/// sends them. Hand-driven tests use it to build an arrival order explicitly, rather
|
|
159
|
+
/// than from the order messages were queued in: a participant's turn between the
|
|
160
|
+
/// coordinator reserving a commit's seqno and the PREPARE reaching it.
|
|
161
|
+
HoldPrepares = 9,
|
|
162
|
+
/// While on, a coordinator sets its DECISION members aside instead of admitting them
|
|
163
|
+
/// (D286's tests: an early `Decide` is applied while its DECISION is unwritten). Switch
|
|
164
|
+
/// it off with `Engine::release_held_decisions`, which kicks the shards: the held
|
|
165
|
+
/// DECISIONs rejoin the end of their shard's queue at its next group. That reorders them
|
|
166
|
+
/// after anything queued meanwhile, so don't use it to reason about group order.
|
|
167
|
+
HoldDecisionRecords = 10,
|
|
168
|
+
/// As `NextApply`, but only a single-shard batch's apply takes it: a cross-shard share
|
|
169
|
+
/// applies as usual. For tests that poison a shard with a share still to apply somewhere,
|
|
170
|
+
/// which would otherwise take the fault in its place (#998).
|
|
171
|
+
NextSingleApply = 11,
|
|
172
|
+
/// While on, a coordinator holds every commit `Decide` it would send another shard (in
|
|
173
|
+
/// `Hooks::held_decides`) instead of sending it, until `Engine::release_held_decides`
|
|
174
|
+
/// sends them: a participant's turn between a share's decision and its apply there
|
|
175
|
+
/// (D314's ordering tests).
|
|
176
|
+
HoldDecides = 12,
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/// The faults on, a bit per `Fault` (`Hooks::faults`).
|
|
180
|
+
#[derive(Default)]
|
|
181
|
+
pub(crate) struct Faults(AtomicU16);
|
|
182
|
+
|
|
183
|
+
impl Faults {
|
|
184
|
+
fn bit(f: Fault) -> u16 {
|
|
185
|
+
1 << (f as u16)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/// Switches `f` on or off.
|
|
189
|
+
fn set(&self, f: Fault, on: bool) {
|
|
190
|
+
if on {
|
|
191
|
+
self.0.fetch_or(Self::bit(f), Ordering::AcqRel);
|
|
192
|
+
} else {
|
|
193
|
+
self.0.fetch_and(!Self::bit(f), Ordering::AcqRel);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/// Whether `f` is on.
|
|
198
|
+
pub(crate) fn on(&self, f: Fault) -> bool {
|
|
199
|
+
self.0.load(Ordering::Acquire) & Self::bit(f) != 0
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/// Whether `f` was on, switching it off (a one-shot fault's site).
|
|
203
|
+
pub(crate) fn take(&self, f: Fault) -> bool {
|
|
204
|
+
self.0.fetch_and(!Self::bit(f), Ordering::AcqRel) & Self::bit(f) != 0
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/// The engine-wide hook state (`Shared::hooks`).
|
|
209
|
+
#[derive(Default)]
|
|
210
|
+
pub(crate) struct Hooks {
|
|
211
|
+
/// The one-shot callbacks tests set at named sites (`Engine::on_next`).
|
|
212
|
+
pub sites: Sites,
|
|
213
|
+
/// The error of a refused arena discard (`Shared::try_discard_arenas`, D265).
|
|
214
|
+
pub arena_discard_error: Mutex<Option<String>>,
|
|
215
|
+
/// The faults and forced paths tests switch on (`Engine::inject`).
|
|
216
|
+
pub faults: Faults,
|
|
217
|
+
/// PREPAREs held by `Fault::HoldPrepares`, with their participant, in send order
|
|
218
|
+
/// (`Engine::release_held_prepares`).
|
|
219
|
+
pub held_prepares: Mutex<Vec<(pigeonhole_runtime::ShardId, crate::shard::ShardMsg)>>,
|
|
220
|
+
/// Commit `Decide`s held by `Fault::HoldDecides`, with their participant, in send order
|
|
221
|
+
/// (`Engine::release_held_decides`).
|
|
222
|
+
pub held_decides: Mutex<Vec<(pigeonhole_runtime::ShardId, crate::shard::ShardMsg)>>,
|
|
223
|
+
/// Whether `compactions` and `appended` record (`Engine::record_history`); off until a
|
|
224
|
+
/// test turns it on.
|
|
225
|
+
pub record: AtomicBool,
|
|
226
|
+
/// Every committed compaction (`Engine::take_compactions`; the records are never built
|
|
227
|
+
/// without the feature, 5-6 6.2).
|
|
228
|
+
pub compactions: Mutex<Vec<CompactionRecord>>,
|
|
229
|
+
/// Every WAL record appended, in append order (`Engine::take_appended`).
|
|
230
|
+
pub appended: Mutex<Vec<AppendedRecord>>,
|
|
231
|
+
/// The seqnos of cross-shard attempts a participant refused (`Moved`, `Room` or
|
|
232
|
+
/// `PendingOverlap`),
|
|
233
|
+
/// whose commit was retried under a new seqno or gave up (`Engine::take_refused_attempts`).
|
|
234
|
+
pub refused: Mutex<Vec<Seqno>>,
|
|
235
|
+
/// PREPAREs refused for arena room (D245, `Engine::room_refusals`).
|
|
236
|
+
pub room_refusals: AtomicU64,
|
|
237
|
+
/// Arms the manifest queue's release window (`manifest::race_window`,
|
|
238
|
+
/// `Engine::probe_manifest_release_window`), and the waiter of the request it pushed.
|
|
239
|
+
pub manifest_race: AtomicBool,
|
|
240
|
+
pub manifest_race_waiter: Mutex<Option<Waiter<Result<ManifestVersion>>>>,
|
|
241
|
+
/// Threads that parked in `manifest::commit_req_from_thread`, counted after their last
|
|
242
|
+
/// look and just before `park` (`Engine::manifest_thread_parks`).
|
|
243
|
+
pub manifest_thread_parks: AtomicUsize,
|
|
244
|
+
/// Values `large::separate` wrote to a blob file at commit time (#230, #306;
|
|
245
|
+
/// `Engine::commit_separations`).
|
|
246
|
+
pub commit_separations: AtomicU64,
|
|
247
|
+
/// Parks background manifest commits before `end` (`manifest::parked`,
|
|
248
|
+
/// `Engine::park_manifest_commits`), and the parked pump's waker.
|
|
249
|
+
pub manifest_park: AtomicBool,
|
|
250
|
+
pub manifest_parked: Mutex<Option<TaskWaker>>,
|
|
251
|
+
/// Holds each compaction job before its first slice (`Engine::hold_compactions`), and
|
|
252
|
+
/// the held jobs' ids and wakers, oldest first (`Engine::release_held_compaction` takes
|
|
253
|
+
/// one to let it run; clearing the hold takes them all).
|
|
254
|
+
pub compaction_hold: AtomicBool,
|
|
255
|
+
pub compaction_held: Mutex<Vec<(u64, TaskWaker)>>,
|
|
256
|
+
pub compaction_hold_ids: AtomicU64,
|
|
257
|
+
/// Compaction jobs that finished and submitted their commit (`Engine::
|
|
258
|
+
/// compaction_commits_submitted`, D284's tests).
|
|
259
|
+
pub compaction_commits: AtomicU64,
|
|
260
|
+
/// Compaction jobs run a few units per slice (`Engine::compaction_tiny_slices`).
|
|
261
|
+
pub compaction_tiny_slices: AtomicBool,
|
|
262
|
+
/// A deliberate fault in the flush GC (`Engine::mutate_flush_gc`, #287): 1 treats the
|
|
263
|
+
/// guard as always holding, 2 drops the snapshot floor (no live read point is kept), 3
|
|
264
|
+
/// lets writes pass guarded flushes and compactions without voiding them.
|
|
265
|
+
pub flush_gc_mutation: std::sync::atomic::AtomicU8,
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/// A deliberate fault in the flush GC, for tests that check the oracle catches it
|
|
269
|
+
/// (`Engine::mutate_flush_gc`, #287).
|
|
270
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
271
|
+
#[doc(hidden)]
|
|
272
|
+
pub enum FlushGcMutation {
|
|
273
|
+
/// The real GC.
|
|
274
|
+
None,
|
|
275
|
+
/// Purge versions beyond `max_versions` even when another source holds a delete.
|
|
276
|
+
DropGuard,
|
|
277
|
+
/// Keep no live snapshot's versions (only the latest read point).
|
|
278
|
+
DropSnapshotFloor,
|
|
279
|
+
/// A delete arriving while a guarded flush is in flight, or a write below a running
|
|
280
|
+
/// bottommost compaction's bound (#316), does not void it or wait for its install.
|
|
281
|
+
IgnoreVoids,
|
|
282
|
+
/// A counter family's flush is told of another source of the slot whose seqnos span its
|
|
283
|
+
/// memtable's (D287): it must then keep every operand rather than combine them.
|
|
284
|
+
CounterSourceInside,
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/// A balancer load term a test chooses for a shard (`Engine::set_shard_load`).
|
|
288
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
289
|
+
pub enum LoadTerm {
|
|
290
|
+
/// The shard thread's busy fraction (0 to 1; D217).
|
|
291
|
+
Busy = 0,
|
|
292
|
+
/// Its writers' stall term (D255): 0 or 1 as measured. A fraction in between reads as
|
|
293
|
+
/// stalled only past `PACK_HOT` (0.9), like a turn busy fraction.
|
|
294
|
+
Stalled = 1,
|
|
295
|
+
/// The pool's work for it (a fraction of the time; it may exceed 1 when several pool
|
|
296
|
+
/// threads serve the shard at once; D256).
|
|
297
|
+
Pool = 2,
|
|
298
|
+
/// Client commits in flight at it on average (0 up; a closed-loop client's worth is at
|
|
299
|
+
/// most 1; D257).
|
|
300
|
+
Inflight = 3,
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
impl LoadTerm {
|
|
304
|
+
const COUNT: usize = 4;
|
|
305
|
+
|
|
306
|
+
/// The largest value a test may choose.
|
|
307
|
+
fn max(self) -> f64 {
|
|
308
|
+
match self {
|
|
309
|
+
LoadTerm::Busy | LoadTerm::Stalled => 1.0,
|
|
310
|
+
LoadTerm::Pool => 16.0,
|
|
311
|
+
LoadTerm::Inflight => 1e6,
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/// A shard's test-hook counters (`ShardMetrics::hooks`), stored after each batch.
|
|
317
|
+
#[derive(Debug, Default)]
|
|
318
|
+
pub(crate) struct ShardCounters {
|
|
319
|
+
/// Size of the shard's aborted-seqno set (`Engine::aborted_seqnos`).
|
|
320
|
+
pub aborted: AtomicU64,
|
|
321
|
+
/// The arena's free bytes, largest free run and size (`Engine::arena_free`: a test
|
|
322
|
+
/// checks it built the fragmented arena it means to, issue #141).
|
|
323
|
+
/// One snapshot, so a reader never pairs values from different batches.
|
|
324
|
+
pub arena: Mutex<(u64, u64, u64)>,
|
|
325
|
+
/// Reservations that found enough free bytes but no run long enough for their largest
|
|
326
|
+
/// entry (`Engine::arena_run_waits`: a test checks it reached that case, issue #141).
|
|
327
|
+
pub run_waits: AtomicU64,
|
|
328
|
+
/// Compactions whose purge a write voided before they installed
|
|
329
|
+
/// (`Engine::compaction_purge_voids`, #316).
|
|
330
|
+
pub purge_voids: AtomicU64,
|
|
331
|
+
/// The load terms the shard's balancer measures, by `LoadTerm` (millionths plus one; 0
|
|
332
|
+
/// measures the real one), `Engine::set_shard_load` (D217, D255, D256, D257's packing
|
|
333
|
+
/// tests).
|
|
334
|
+
pub load_overrides: [AtomicU64; LoadTerm::COUNT],
|
|
335
|
+
/// The flushed-through seqno the shard last published from `on_unpin` (an unpin that
|
|
336
|
+
/// found nothing unflushed at or below its seqno, #724), `Engine::unpin_published`.
|
|
337
|
+
pub unpin_published: AtomicU64,
|
|
338
|
+
/// Flushes the manifest refused because a delete voided one of their purge guards,
|
|
339
|
+
/// flushed again without it (#287), `Engine::flush_voids` (#838's test).
|
|
340
|
+
pub voided_flushes: AtomicU64,
|
|
341
|
+
/// Decisions that reached the shard before their share's PREPARE settled and waited for
|
|
342
|
+
/// it (D279), `Engine::parked_decisions`.
|
|
343
|
+
pub parked_decisions: AtomicU64,
|
|
344
|
+
/// `Decide { commit: false }` messages the shard sent as a coordinator,
|
|
345
|
+
/// `Engine::abort_decides_sent` (D286's tests: no abort follows an early commit
|
|
346
|
+
/// `Decide`).
|
|
347
|
+
pub abort_decides: AtomicU64,
|
|
348
|
+
/// Entries read validation visited in the shard's memtables (`Engine::validate_entries`,
|
|
349
|
+
/// D273's tests: a hot row validates in a few entries, not one per version).
|
|
350
|
+
pub validate_entries: AtomicU64,
|
|
351
|
+
/// The active shard count (`k`, D217) the shard's balancer used at its last pass, plus
|
|
352
|
+
/// one (0 before its first pass), `Engine::pack_ks`.
|
|
353
|
+
pub pack_k: AtomicU64,
|
|
354
|
+
/// PREPAREs the shard refuses as overlapping an undecided share before routing them as
|
|
355
|
+
/// usual (`Engine::refuse_prepares`).
|
|
356
|
+
pub refuse_prepares: AtomicU64,
|
|
357
|
+
/// `AwaitFlushed` and `FlushedThrough` messages the shard handled
|
|
358
|
+
/// (`Engine::flushed_msgs`, D266).
|
|
359
|
+
pub flushed_msgs: AtomicU64,
|
|
360
|
+
/// Records in the shard's log (those its checkpoint has not passed) after its last
|
|
361
|
+
/// batch (`Engine::logged_records`, D254).
|
|
362
|
+
pub logged: AtomicU64,
|
|
363
|
+
/// Spans the shard added to `commit_inflight_nanos` (`ShardMetrics::count_inflight`):
|
|
364
|
+
/// one per commit it replied to and one per share it decided for another coordinator
|
|
365
|
+
/// (D257, D262), `Engine::inflight_counts`.
|
|
366
|
+
pub inflight_counts: AtomicU64,
|
|
367
|
+
/// The most log records the shard's checkpoint popped in one batch (#763's budget),
|
|
368
|
+
/// `Engine::max_checkpoint_pops`.
|
|
369
|
+
pub checkpoint_pops_max: AtomicU64,
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
impl ShardCounters {
|
|
373
|
+
/// The value a test chose for `term`, or `None` to measure the real one.
|
|
374
|
+
pub(crate) fn load_override(&self, term: LoadTerm) -> Option<f64> {
|
|
375
|
+
match self.load_overrides[term as usize].load(Ordering::Relaxed) {
|
|
376
|
+
0 => None,
|
|
377
|
+
v => Some((v - 1) as f64 / 1e6),
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/// What a closed instance still holds (`Engine::memory_release`, D265).
|
|
383
|
+
#[doc(hidden)]
|
|
384
|
+
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
385
|
+
pub struct MemoryRelease {
|
|
386
|
+
/// Memtable sets the current view lists.
|
|
387
|
+
pub view_memtables: usize,
|
|
388
|
+
/// SSTs the current view's set holds open.
|
|
389
|
+
pub view_ssts: usize,
|
|
390
|
+
/// Bytes in the block cache.
|
|
391
|
+
pub block_cache_bytes: usize,
|
|
392
|
+
/// Bytes in the row cache (`None` when it is off).
|
|
393
|
+
pub row_cache_bytes: Option<usize>,
|
|
394
|
+
/// The arenas' state.
|
|
395
|
+
pub arenas: ArenaDiscard,
|
|
396
|
+
/// The error of a refused discard.
|
|
397
|
+
pub arena_error: Option<String>,
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/// What became of a closed instance's arena pages (`Engine::memory_release`, D265).
|
|
401
|
+
#[doc(hidden)]
|
|
402
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
403
|
+
pub enum ArenaDiscard {
|
|
404
|
+
/// Not freed yet: the instance is open, a view lives, or the region is still current.
|
|
405
|
+
Pending,
|
|
406
|
+
/// Freed.
|
|
407
|
+
Discarded,
|
|
408
|
+
/// The OS refused (`Unsupported` on macOS and Windows, `EOPNOTSUPP` on a `shm_dir` file
|
|
409
|
+
/// system without hole punching, …): they stay until the last mapping goes. The error is
|
|
410
|
+
/// in `MemoryRelease::arena_error`.
|
|
411
|
+
Refused,
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/// A WAL record the engine appended to a stream (test hook): the per-stream append order,
|
|
415
|
+
/// which decides what a crash keeps (a stream survives as a prefix).
|
|
416
|
+
#[doc(hidden)]
|
|
417
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
418
|
+
pub struct AppendedRecord {
|
|
419
|
+
pub stream: u16,
|
|
420
|
+
pub seqno: Seqno,
|
|
421
|
+
pub kind: AppendedKind,
|
|
422
|
+
pub durability: Durability,
|
|
423
|
+
/// The record's commit timestamp (0 for a COMMIT record): a harness reads a commit's
|
|
424
|
+
/// timestamp here when its record was checkpointed and compaction dropped every entry
|
|
425
|
+
/// it wrote.
|
|
426
|
+
pub commit_ts: Timestamp,
|
|
427
|
+
/// A COMMIT's (DECISION's) applied seqno, the commit's `seqno` being its id (D263); 0
|
|
428
|
+
/// for other records.
|
|
429
|
+
pub apply_seqno: Seqno,
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/// The kind of an [`AppendedRecord`].
|
|
433
|
+
#[doc(hidden)]
|
|
434
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
435
|
+
pub enum AppendedKind {
|
|
436
|
+
Batch,
|
|
437
|
+
Prepare,
|
|
438
|
+
Commit,
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/// One raw entry of a table (a test hook).
|
|
442
|
+
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
443
|
+
#[doc(hidden)]
|
|
444
|
+
pub struct RawEntry {
|
|
445
|
+
/// Table.
|
|
446
|
+
pub table: TableId,
|
|
447
|
+
/// Family.
|
|
448
|
+
pub family: FamilyId,
|
|
449
|
+
/// Internal key.
|
|
450
|
+
pub key: Vec<u8>,
|
|
451
|
+
/// Stored value.
|
|
452
|
+
pub value: Vec<u8>,
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/// A tablet's id, table and row range `[start, end)` (a test hook).
|
|
456
|
+
#[doc(hidden)]
|
|
457
|
+
pub type TabletRange = (TabletId, TableId, Vec<u8>, Option<Vec<u8>>);
|
|
458
|
+
|
|
459
|
+
/// What the manifest of a closed database records (a test hook).
|
|
460
|
+
#[derive(Debug, Clone, Default)]
|
|
461
|
+
#[doc(hidden)]
|
|
462
|
+
pub struct ManifestInfo {
|
|
463
|
+
/// Manifest version.
|
|
464
|
+
pub version: ManifestVersion,
|
|
465
|
+
/// Per-stream checkpoints.
|
|
466
|
+
pub checkpoints: BTreeMap<StreamId, Lsn>,
|
|
467
|
+
/// Flushed-through seqno per `(tablet, family)`.
|
|
468
|
+
pub flushed: BTreeMap<(TabletId, FamilyId), Seqno>,
|
|
469
|
+
/// Tablets and their tables.
|
|
470
|
+
pub tablets: Vec<(TabletId, TableId)>,
|
|
471
|
+
/// Tablets with their tables and row ranges `[start, end)` (empty start and `None` end
|
|
472
|
+
/// are unbounded).
|
|
473
|
+
pub tablet_ranges: Vec<TabletRange>,
|
|
474
|
+
/// Whether the last close was clean.
|
|
475
|
+
pub clean: bool,
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
impl Engine {
|
|
479
|
+
/// Runs `f` once, the next time the engine reaches `site` (test hook): see
|
|
480
|
+
/// [`HookSite`] for where each runs. Replaces a callback set there that has not run.
|
|
481
|
+
#[doc(hidden)]
|
|
482
|
+
pub fn on_next(&self, site: HookSite, f: Box<dyn FnOnce() + Send>) {
|
|
483
|
+
self.inner.shared.hooks.sites.set(site, f);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/// Switches fault `fault` on or off (test hook): see [`Fault`] for each. A one-shot fault
|
|
487
|
+
/// (`Next…`) switches itself off where it fires.
|
|
488
|
+
#[doc(hidden)]
|
|
489
|
+
pub fn inject(&self, fault: Fault, on: bool) {
|
|
490
|
+
self.inner.shared.hooks.faults.set(fault, on);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/// Sends the PREPAREs `Fault::HoldPrepares` held, in the order they were held; returns
|
|
494
|
+
/// how many (test hook). Switch `HoldPrepares` off first, so a hold can't leak into a
|
|
495
|
+
/// later step. A participant already closed refuses the send (`Closed`) and the PREPARE
|
|
496
|
+
/// is dropped: the test then sees its commit unanswered.
|
|
497
|
+
///
|
|
498
|
+
/// # Panics
|
|
499
|
+
/// If `HoldPrepares` is still on.
|
|
500
|
+
#[doc(hidden)]
|
|
501
|
+
pub fn release_held_prepares(&self) -> usize {
|
|
502
|
+
let hooks = &self.inner.shared.hooks;
|
|
503
|
+
assert!(
|
|
504
|
+
!hooks.faults.on(Fault::HoldPrepares),
|
|
505
|
+
"release_held_prepares with Fault::HoldPrepares still on"
|
|
506
|
+
);
|
|
507
|
+
let held = std::mem::take(&mut *hooks.held_prepares.lock().unwrap());
|
|
508
|
+
let n = held.len();
|
|
509
|
+
let subs = self
|
|
510
|
+
.inner
|
|
511
|
+
.shared
|
|
512
|
+
.submitters
|
|
513
|
+
.get()
|
|
514
|
+
.expect("the shards started");
|
|
515
|
+
for (to, msg) in held {
|
|
516
|
+
let _ = subs[usize::from(to.0)].submit(msg);
|
|
517
|
+
}
|
|
518
|
+
n
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/// Sends the oldest `max` of the `Decide`s `Fault::HoldDecides` held, in the order they
|
|
522
|
+
/// were held; returns how many (test hook). The rest stay held, so a test can let one
|
|
523
|
+
/// decision land before another; switch `HoldDecides` off before the last release.
|
|
524
|
+
#[doc(hidden)]
|
|
525
|
+
pub fn release_held_decides(&self, max: usize) -> usize {
|
|
526
|
+
let hooks = &self.inner.shared.hooks;
|
|
527
|
+
let held: Vec<_> = {
|
|
528
|
+
let mut h = hooks
|
|
529
|
+
.held_decides
|
|
530
|
+
.lock()
|
|
531
|
+
.unwrap_or_else(std::sync::PoisonError::into_inner);
|
|
532
|
+
let n = max.min(h.len());
|
|
533
|
+
h.drain(..n).collect()
|
|
534
|
+
};
|
|
535
|
+
let n = held.len();
|
|
536
|
+
let subs = self
|
|
537
|
+
.inner
|
|
538
|
+
.shared
|
|
539
|
+
.submitters
|
|
540
|
+
.get()
|
|
541
|
+
.expect("the shards started");
|
|
542
|
+
for (to, msg) in held {
|
|
543
|
+
let _ = subs[usize::from(to.0)].submit(msg);
|
|
544
|
+
}
|
|
545
|
+
n
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/// The flushed-through seqno shard `shard` last published from an unpin that found
|
|
549
|
+
/// nothing unflushed at or below its seqno, 0 if none (test hook, #724).
|
|
550
|
+
#[doc(hidden)]
|
|
551
|
+
pub fn unpin_published(&self, shard: usize) -> Seqno {
|
|
552
|
+
self.inner.shared.metrics[shard]
|
|
553
|
+
.hooks
|
|
554
|
+
.unpin_published
|
|
555
|
+
.load(Ordering::Relaxed)
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/// Asks shard `shard` to unpin through `through`, as a peer whose checkpoint a commit's
|
|
559
|
+
/// records pin does (`ShardMsg::Unpin`, test hook).
|
|
560
|
+
#[doc(hidden)]
|
|
561
|
+
pub fn request_unpin(&self, shard: usize, through: Seqno) -> Result<()> {
|
|
562
|
+
self.inner
|
|
563
|
+
.shared
|
|
564
|
+
.submitter(ShardId(shard as u16))
|
|
565
|
+
.submit(ShardMsg::Unpin { through })?;
|
|
566
|
+
Ok(())
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/// Shard `shard`'s published flushed-through seqno (`Shared::flushed_through`, #724):
|
|
570
|
+
/// every write it will hold at or below it is in a durable SST. 0 before its first
|
|
571
|
+
/// publish (test hook).
|
|
572
|
+
#[doc(hidden)]
|
|
573
|
+
pub fn flushed_through(&self, shard: usize) -> Seqno {
|
|
574
|
+
self.inner.shared.flushed_through[shard]
|
|
575
|
+
.0
|
|
576
|
+
.load(Ordering::Acquire)
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/// Makes shard `shard`'s balancer measure `term` as `value` from now on (clamped to the
|
|
580
|
+
/// term's range, `LoadTerm`), or the real value with `None` (test hook: the packing
|
|
581
|
+
/// tests, decided on chosen loads under any clock).
|
|
582
|
+
#[doc(hidden)]
|
|
583
|
+
pub fn set_shard_load(&self, shard: usize, term: LoadTerm, value: Option<f64>) {
|
|
584
|
+
let v = value.map_or(0, |b| (b.clamp(0.0, term.max()) * 1e6).round() as u64 + 1);
|
|
585
|
+
self.inner.shared.metrics[shard].hooks.load_overrides[term as usize]
|
|
586
|
+
.store(v, Ordering::Relaxed);
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/// The seqnos of this process's live snapshots, the ones compaction's GC keeps
|
|
590
|
+
/// (`gc_snapshots`): a transaction's commit holds its snapshot here until it resolves
|
|
591
|
+
/// (#672).
|
|
592
|
+
#[doc(hidden)]
|
|
593
|
+
pub fn live_snapshot_seqnos(&self) -> Vec<Seqno> {
|
|
594
|
+
self.inner.shared.live_seqnos.list()
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/// The next seqno to reserve (D263: a harness learns which seqnos a crash
|
|
598
|
+
/// freed for reuse).
|
|
599
|
+
#[doc(hidden)]
|
|
600
|
+
pub fn next_seqno(&self) -> Seqno {
|
|
601
|
+
self.inner.shared.shm.next_seqno()
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/// `flush` as a future (test harnesses that drive the shards themselves).
|
|
605
|
+
#[doc(hidden)]
|
|
606
|
+
pub fn flush_pending(&self) -> Result<PendingMaintenance> {
|
|
607
|
+
self.inner.flush_pending()
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/// `compact` as a future.
|
|
611
|
+
#[doc(hidden)]
|
|
612
|
+
pub fn compact_pending(&self, table: Option<TableId>) -> Result<PendingMaintenance> {
|
|
613
|
+
self.inner.compact_pending(table)
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/// Every entry of every table in `snapshot`'s view, raw (no resolution; separated
|
|
617
|
+
/// values read from their blob files), in key order per `(table, family)`.
|
|
618
|
+
#[doc(hidden)]
|
|
619
|
+
pub fn raw_entries(&self, snapshot: &Snapshot) -> Result<Vec<RawEntry>> {
|
|
620
|
+
let read = || -> Result<Vec<RawEntry>> {
|
|
621
|
+
use pigeonhole_compaction::MergingCursor;
|
|
622
|
+
use pigeonhole_format::Cursor;
|
|
623
|
+
let view = &snapshot.view;
|
|
624
|
+
let mut out = Vec::new();
|
|
625
|
+
let all = pigeonhole_format::scan::ScanFilter::all();
|
|
626
|
+
for t in view.catalog.tablets() {
|
|
627
|
+
// Children of a split share SSTs holding their siblings' rows too.
|
|
628
|
+
let (start, end) = crate::read::clamp_to_tablet(&t, None, None)?;
|
|
629
|
+
for family in view.catalog.family_ids_of(t.table) {
|
|
630
|
+
let sources = view.scan_sources(t.shard, t.id, family, &all, None, None)?;
|
|
631
|
+
let mut merged = MergingCursor::new(sources);
|
|
632
|
+
match &start {
|
|
633
|
+
Some(s) => merged.seek(s)?,
|
|
634
|
+
None => merged.seek_to_first()?,
|
|
635
|
+
}
|
|
636
|
+
while merged.valid() && end.as_deref().is_none_or(|e| merged.key() < e) {
|
|
637
|
+
// A separated value is listed as the value, not its pointer.
|
|
638
|
+
let value = match view.ssts.read_blob(merged.value())? {
|
|
639
|
+
Some(v) => v.to_vec(),
|
|
640
|
+
None => merged.value().to_vec(),
|
|
641
|
+
};
|
|
642
|
+
out.push(RawEntry {
|
|
643
|
+
table: t.table,
|
|
644
|
+
family,
|
|
645
|
+
key: merged.key().to_vec(),
|
|
646
|
+
value,
|
|
647
|
+
});
|
|
648
|
+
merged.next()?;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
Ok(out)
|
|
653
|
+
};
|
|
654
|
+
snapshot.checked(read())
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/// Bytes the pager holds (allocated or retired) that neither the catalog nor the
|
|
658
|
+
/// manifest root references: output in flight, extents awaiting reclamation, or leaked.
|
|
659
|
+
/// Zero once idle and reclaimed (test hook).
|
|
660
|
+
#[doc(hidden)]
|
|
661
|
+
pub fn unreferenced_bytes(&self) -> u64 {
|
|
662
|
+
let shared = &self.inner.shared;
|
|
663
|
+
let root = shared
|
|
664
|
+
.manifest
|
|
665
|
+
.lock()
|
|
666
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
667
|
+
.root();
|
|
668
|
+
let mut live: Vec<_> = shared.view.load().catalog.data_extents();
|
|
669
|
+
live.extend(root.snapshot);
|
|
670
|
+
live.extend(root.log);
|
|
671
|
+
live.sort();
|
|
672
|
+
live.dedup();
|
|
673
|
+
let referenced: u64 = live.iter().map(|e| e.len()).sum();
|
|
674
|
+
let stats = shared.pager.stats();
|
|
675
|
+
(stats.allocated_bytes + stats.retired_bytes).saturating_sub(referenced)
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/// [`unreferenced_bytes`](Self::unreferenced_bytes) split: `(allocated, retired)`, the
|
|
679
|
+
/// unreferenced bytes still allocated (output in flight or leaked: a compaction or
|
|
680
|
+
/// flush that never committed and was never abandoned) and those retired, which a
|
|
681
|
+
/// later reclaim frees once no view reaches them (test hook, D284).
|
|
682
|
+
#[doc(hidden)]
|
|
683
|
+
pub fn unreferenced_split(&self) -> (u64, u64) {
|
|
684
|
+
let shared = &self.inner.shared;
|
|
685
|
+
let root = shared
|
|
686
|
+
.manifest
|
|
687
|
+
.lock()
|
|
688
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
689
|
+
.root();
|
|
690
|
+
let mut live: Vec<_> = shared.view.load().catalog.data_extents();
|
|
691
|
+
live.extend(root.snapshot);
|
|
692
|
+
live.extend(root.log);
|
|
693
|
+
live.sort();
|
|
694
|
+
live.dedup();
|
|
695
|
+
let referenced: u64 = live.iter().map(|e| e.len()).sum();
|
|
696
|
+
let stats = shared.pager.stats();
|
|
697
|
+
(
|
|
698
|
+
stats.allocated_bytes.saturating_sub(referenced),
|
|
699
|
+
stats.retired_bytes,
|
|
700
|
+
)
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/// Holds the pager's allocator until the guard drops (test hook, D284): a reclaim a
|
|
704
|
+
/// dropped view only tries (`Shared::try_reclaim`) skips meanwhile, as when another
|
|
705
|
+
/// thread grows the file or commits.
|
|
706
|
+
#[doc(hidden)]
|
|
707
|
+
pub fn hold_pager_alloc(&self) -> impl Sized + '_ {
|
|
708
|
+
self.inner.shared.pager.hold_alloc_for_test()
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
/// Every SST the current catalog names, as `(level, length, size class)` (test hook:
|
|
712
|
+
/// the footprint test reads the live bytes and the SST count per run, #185).
|
|
713
|
+
#[doc(hidden)]
|
|
714
|
+
pub fn sst_lens(&self) -> Vec<(u8, u64, u8)> {
|
|
715
|
+
let catalog = Arc::clone(&self.inner.shared.view.load().catalog);
|
|
716
|
+
catalog
|
|
717
|
+
.ssts
|
|
718
|
+
.values()
|
|
719
|
+
.flat_map(|l| l.iter())
|
|
720
|
+
.map(|(level, meta)| (*level, meta.len, meta.extent.size_class))
|
|
721
|
+
.collect()
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/// Every SST the current catalog names, as `(table, first page, size class)` of its
|
|
725
|
+
/// extent (test hook: where `shrink` put it, #314).
|
|
726
|
+
#[doc(hidden)]
|
|
727
|
+
pub fn sst_extents(&self) -> Vec<(TableId, u64, u8)> {
|
|
728
|
+
let catalog = Arc::clone(&self.inner.shared.view.load().catalog);
|
|
729
|
+
let mut out = Vec::new();
|
|
730
|
+
for ((tablet, _), list) in catalog.ssts.iter() {
|
|
731
|
+
let Some(entry) = catalog.tablet(*tablet) else {
|
|
732
|
+
continue;
|
|
733
|
+
};
|
|
734
|
+
out.extend(
|
|
735
|
+
list.iter()
|
|
736
|
+
.map(|(_, meta)| (entry.table, meta.extent.page, meta.extent.size_class)),
|
|
737
|
+
);
|
|
738
|
+
}
|
|
739
|
+
out
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
/// Every SST the current catalog names, as `(table, level, sst id)` (test hook).
|
|
743
|
+
#[doc(hidden)]
|
|
744
|
+
pub fn sst_levels(&self) -> Vec<(TableId, u8, u64)> {
|
|
745
|
+
let catalog = Arc::clone(&self.inner.shared.view.load().catalog);
|
|
746
|
+
let mut out = Vec::new();
|
|
747
|
+
for ((tablet, _), list) in catalog.ssts.iter() {
|
|
748
|
+
let Some(entry) = catalog.tablet(*tablet) else {
|
|
749
|
+
continue;
|
|
750
|
+
};
|
|
751
|
+
out.extend(
|
|
752
|
+
list.iter()
|
|
753
|
+
.map(|(level, meta)| (entry.table, *level, meta.id.0)),
|
|
754
|
+
);
|
|
755
|
+
}
|
|
756
|
+
out
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/// Sets the inline value limit (D16) to `payload_bytes`: a put whose value payload is
|
|
760
|
+
/// longer is separated into a blob file at commit time (#230). Lets tests reach that
|
|
761
|
+
/// path with small values (the real limit is tens of MiB). Test hook.
|
|
762
|
+
#[doc(hidden)]
|
|
763
|
+
pub fn set_inline_value_limit(&self, payload_bytes: usize) {
|
|
764
|
+
self.inner.max_value.store(payload_bytes, Ordering::Relaxed);
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/// Every blob file the current catalog names, as `(family, blob file id, total bytes,
|
|
768
|
+
/// live bytes)` (test hook).
|
|
769
|
+
#[doc(hidden)]
|
|
770
|
+
pub fn blob_files(&self) -> Vec<(FamilyId, u32, u64, u64)> {
|
|
771
|
+
let catalog = Arc::clone(&self.inner.shared.view.load().catalog);
|
|
772
|
+
catalog
|
|
773
|
+
.blob_files
|
|
774
|
+
.iter()
|
|
775
|
+
.map(|(id, b)| (b.family, id.0, b.total_bytes, b.live_bytes))
|
|
776
|
+
.collect()
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/// Checks blob accounting in the current view (test hook): every blob pointer an SST
|
|
780
|
+
/// holds within its tablet's rows names a blob file of the catalog, of the same family,
|
|
781
|
+
/// and each file's live bytes are exactly the bytes those pointers reference (16 plus
|
|
782
|
+
/// the value's length each; an SST shared by several tablets counts once per tablet,
|
|
783
|
+
/// for its rows in that tablet; memtable pointers count too), and every SST's recorded
|
|
784
|
+
/// blob references (#240) are
|
|
785
|
+
/// exactly the pointers it holds. Describes the first mismatch.
|
|
786
|
+
#[doc(hidden)]
|
|
787
|
+
pub fn check_blob_accounting(&self) -> std::result::Result<(), String> {
|
|
788
|
+
use pigeonhole_compaction::{blob_pointer, record_bytes};
|
|
789
|
+
use pigeonhole_format::Cursor;
|
|
790
|
+
use pigeonhole_format::key::{Kind, split_suffix};
|
|
791
|
+
use pigeonhole_sst::{ReadOptions, ScanFilter};
|
|
792
|
+
|
|
793
|
+
// A file is settling if `large_pending` holds it before or after the view is loaded:
|
|
794
|
+
// a release (`large.rs`) drops it from `large_pending` only after the view without
|
|
795
|
+
// it is published (so the set read before covers a view that still has it), and a
|
|
796
|
+
// new file joins `large_pending` before the view with it is published (so the set
|
|
797
|
+
// read after covers that).
|
|
798
|
+
let settling = || self.inner.shared.large.pending();
|
|
799
|
+
let mut pending = settling();
|
|
800
|
+
let view = self.inner.shared.view.load_full();
|
|
801
|
+
pending.extend(settling());
|
|
802
|
+
let catalog = &view.catalog;
|
|
803
|
+
let mut refs: BTreeMap<u32, u64> = BTreeMap::new();
|
|
804
|
+
let err = |e: &dyn std::fmt::Display| e.to_string();
|
|
805
|
+
for tablet in catalog.tablets() {
|
|
806
|
+
let range = crate::compact::tablet_range(&tablet).map_err(|e| err(&e))?;
|
|
807
|
+
for family in catalog.family_ids_of(tablet.table) {
|
|
808
|
+
let Some(fam) = view.ssts.family(tablet.id, family) else {
|
|
809
|
+
continue;
|
|
810
|
+
};
|
|
811
|
+
for sst in fam.iter() {
|
|
812
|
+
let reader = sst
|
|
813
|
+
.reader(&view.ssts, pigeonhole_cache::Priority::Low)
|
|
814
|
+
.map_err(|e| err(&e))?;
|
|
815
|
+
let mut it = reader.iter(ScanFilter::all(), ReadOptions::default());
|
|
816
|
+
match &range.start {
|
|
817
|
+
Some(s) => it.seek(s),
|
|
818
|
+
None => it.seek_to_first(),
|
|
819
|
+
}
|
|
820
|
+
.map_err(|e| err(&e))?;
|
|
821
|
+
while it.valid() {
|
|
822
|
+
if range.end.as_deref().is_some_and(|e| it.key() >= e) {
|
|
823
|
+
break;
|
|
824
|
+
}
|
|
825
|
+
let (_, _, _, kind) = split_suffix(it.key()).map_err(|e| err(&e))?;
|
|
826
|
+
if kind == Kind::Put
|
|
827
|
+
&& let Some(p) = blob_pointer(it.value())
|
|
828
|
+
{
|
|
829
|
+
match catalog.blob_files.get(&p.blob_file) {
|
|
830
|
+
Some(b) if b.family == family => {}
|
|
831
|
+
Some(b) => {
|
|
832
|
+
return Err(format!(
|
|
833
|
+
"SST {} of family {} points into blob file {} of family {}",
|
|
834
|
+
sst.meta.id.0, family.0, p.blob_file.0, b.family.0
|
|
835
|
+
));
|
|
836
|
+
}
|
|
837
|
+
None => {
|
|
838
|
+
return Err(format!(
|
|
839
|
+
"SST {} points into blob file {}, which the catalog \
|
|
840
|
+
does not name",
|
|
841
|
+
sst.meta.id.0, p.blob_file.0
|
|
842
|
+
));
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
*refs.entry(p.blob_file.0).or_default() += record_bytes(p.len);
|
|
846
|
+
}
|
|
847
|
+
it.next().map_err(|e| err(&e))?;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
// Memtables hold the pointers of values separated at commit time (#230) until their
|
|
853
|
+
// flush; a frozen memtable never appears together with its SST.
|
|
854
|
+
for (_, set) in view.all_memtables() {
|
|
855
|
+
for reader in &set.readers {
|
|
856
|
+
let mut it = reader.iter();
|
|
857
|
+
it.seek_to_first().map_err(|e| err(&e))?;
|
|
858
|
+
while it.valid() {
|
|
859
|
+
let (_, _, _, kind) = split_suffix(it.key()).map_err(|e| err(&e))?;
|
|
860
|
+
if kind == Kind::Put
|
|
861
|
+
&& let Some(p) = blob_pointer(it.value())
|
|
862
|
+
{
|
|
863
|
+
if !catalog.blob_files.contains_key(&p.blob_file) {
|
|
864
|
+
return Err(format!(
|
|
865
|
+
"a memtable points into blob file {}, which the catalog \
|
|
866
|
+
does not name",
|
|
867
|
+
p.blob_file.0
|
|
868
|
+
));
|
|
869
|
+
}
|
|
870
|
+
*refs.entry(p.blob_file.0).or_default() += record_bytes(p.len);
|
|
871
|
+
}
|
|
872
|
+
it.next().map_err(|e| err(&e))?;
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
// Each SST's recorded references (#240) are exactly the pointers it holds.
|
|
877
|
+
let mut seen = std::collections::HashSet::new();
|
|
878
|
+
for fam in view.ssts.map.values() {
|
|
879
|
+
for sst in fam.iter() {
|
|
880
|
+
if !seen.insert(sst.meta.id) {
|
|
881
|
+
continue;
|
|
882
|
+
}
|
|
883
|
+
let Some(recorded) = catalog.blob_refs.get(&sst.meta.id) else {
|
|
884
|
+
continue;
|
|
885
|
+
};
|
|
886
|
+
let reader = sst
|
|
887
|
+
.reader(&view.ssts, pigeonhole_cache::Priority::Low)
|
|
888
|
+
.map_err(|e| err(&e))?;
|
|
889
|
+
let mut it = reader.iter(ScanFilter::all(), ReadOptions::default());
|
|
890
|
+
it.seek_to_first().map_err(|e| err(&e))?;
|
|
891
|
+
let mut actual = Vec::new();
|
|
892
|
+
while it.valid() {
|
|
893
|
+
pigeonhole_compaction::note_blob_ref(&mut actual, it.key(), it.value());
|
|
894
|
+
it.next().map_err(|e| err(&e))?;
|
|
895
|
+
}
|
|
896
|
+
if &actual != recorded {
|
|
897
|
+
return Err(format!(
|
|
898
|
+
"SST {} records blob references {recorded:?} but holds {actual:?}",
|
|
899
|
+
sst.meta.id.0
|
|
900
|
+
));
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
// A large value's file whose commit has not settled (or whose release has not
|
|
905
|
+
// committed) may have nothing pointing into it yet (#230).
|
|
906
|
+
for (id, b) in catalog.blob_files.iter() {
|
|
907
|
+
if pending.contains(id) {
|
|
908
|
+
continue;
|
|
909
|
+
}
|
|
910
|
+
let referenced = refs.get(&id.0).copied().unwrap_or(0);
|
|
911
|
+
if referenced != b.live_bytes {
|
|
912
|
+
return Err(format!(
|
|
913
|
+
"blob file {}: {} live bytes recorded, {referenced} referenced \
|
|
914
|
+
({} written)",
|
|
915
|
+
id.0, b.live_bytes, b.total_bytes
|
|
916
|
+
));
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
Ok(())
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
/// Makes shard `shard` refuse the next `n` PREPAREs as overlapping an undecided share
|
|
923
|
+
/// (`PendingOverlap`), whatever their rows (test hook: the cost of refused rounds). Each
|
|
924
|
+
/// refused round aborts with no record on that shard, and its coordinator retries once
|
|
925
|
+
/// the abort's decision there wakes it.
|
|
926
|
+
#[doc(hidden)]
|
|
927
|
+
pub fn refuse_prepares(&self, shard: usize, n: u64) {
|
|
928
|
+
self.inner.shared.metrics[shard]
|
|
929
|
+
.hooks
|
|
930
|
+
.refuse_prepares
|
|
931
|
+
.store(n, Ordering::Release);
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
/// The mean commits in flight shard `shard`'s balancer published at its last pass
|
|
935
|
+
/// (D257's moving average of the rise of `commit_inflight_nanos` over each interval),
|
|
936
|
+
/// `None` before its first pass. Test hook: one blocking client reads at most about 1.
|
|
937
|
+
#[doc(hidden)]
|
|
938
|
+
pub fn shard_inflight(&self, shard: usize) -> Option<f64> {
|
|
939
|
+
self.inner.shared.loads[shard]
|
|
940
|
+
.read_inflight_fresh(u64::MAX, u64::MAX)
|
|
941
|
+
.map(|v| v as f64 / 1e6)
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
/// The stall fraction shard `shard`'s balancer published at its last pass (D255: the
|
|
945
|
+
/// moving average of the time its commits waited for arena room or were paced on L0
|
|
946
|
+
/// depth, 0 to 1), `None` before its first pass. Test hook.
|
|
947
|
+
#[doc(hidden)]
|
|
948
|
+
pub fn shard_stall_busy(&self, shard: usize) -> Option<f64> {
|
|
949
|
+
self.inner.shared.loads[shard]
|
|
950
|
+
.read_stall_busy_fresh(u64::MAX, u64::MAX)
|
|
951
|
+
.map(|v| v as f64 / 1e6)
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
/// The busy fraction and the turn-busy fraction shard `shard`'s balancer published at
|
|
955
|
+
/// its last pass (D217's moving average of the largest of turn + pool, sync and stall,
|
|
956
|
+
/// D256, D257; and D251's turn-and-stall average), `None` before its first pass. Test
|
|
957
|
+
/// hook: with the pool term above zero the first exceeds the second.
|
|
958
|
+
#[doc(hidden)]
|
|
959
|
+
pub fn shard_busy_terms(&self, shard: usize) -> Option<(f64, f64)> {
|
|
960
|
+
let slot = &self.inner.shared.loads[shard];
|
|
961
|
+
let busy = slot.read_busy_fresh(u64::MAX, u64::MAX)?;
|
|
962
|
+
let turn = slot.read_turn_busy_fresh(u64::MAX, u64::MAX)?;
|
|
963
|
+
Some((busy as f64 / 1e6, turn as f64 / 1e6))
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
/// Claims shard `shard` as a skew change handing it load would (D224), for `passes` of
|
|
967
|
+
/// its balancer passes. False while another claim holds it. Test hook: D270's packing
|
|
968
|
+
/// moves leave a claimed shard alone.
|
|
969
|
+
#[doc(hidden)]
|
|
970
|
+
pub fn claim_shard(&self, shard: usize, passes: u64) -> bool {
|
|
971
|
+
let now = self.inner.shared.vfs.monotonic_nanos();
|
|
972
|
+
self.inner.shared.loads[shard].claim(passes, u64::MAX, now)
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
/// Whether a skew change's claim holds shard `shard` now (D224). Test hook: D270's
|
|
976
|
+
/// change that waits on a compaction claims nothing.
|
|
977
|
+
#[doc(hidden)]
|
|
978
|
+
pub fn shard_claimed(&self, shard: usize) -> bool {
|
|
979
|
+
let now = self.inner.shared.vfs.monotonic_nanos();
|
|
980
|
+
!self.inner.shared.loads[shard].claimable(now)
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
/// The active shard count (`k`, D217's packing) each shard's balancer used at its last
|
|
984
|
+
/// pass, by shard (`None` before its first pass). Test hook: every shard must use the same.
|
|
985
|
+
#[doc(hidden)]
|
|
986
|
+
pub fn pack_ks(&self) -> Vec<Option<usize>> {
|
|
987
|
+
self.inner
|
|
988
|
+
.shared
|
|
989
|
+
.metrics
|
|
990
|
+
.iter()
|
|
991
|
+
.map(|m| match m.hooks.pack_k.load(Ordering::Relaxed) {
|
|
992
|
+
0 => None,
|
|
993
|
+
v => Some(v as usize - 1),
|
|
994
|
+
})
|
|
995
|
+
.collect()
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
/// Bytes in the block cache (test hook: `shrink`'s tests check that an abandoned copy
|
|
999
|
+
/// leaves nothing cached).
|
|
1000
|
+
#[doc(hidden)]
|
|
1001
|
+
pub fn block_cache_usage(&self) -> usize {
|
|
1002
|
+
self.inner.shared.cache.usage()
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
/// Runs `f` once, in the calling thread's next row read, after its first family and
|
|
1006
|
+
/// before its second: where a test flushes, compacts and reclaims while the read holds
|
|
1007
|
+
/// its view (#392 review; test hook).
|
|
1008
|
+
#[doc(hidden)]
|
|
1009
|
+
pub fn between_row_read_families(&self, f: Box<dyn FnOnce()>) {
|
|
1010
|
+
crate::read::BETWEEN_ROW_FAMILIES.with(|h| *h.borrow_mut() = Some(f));
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
/// Splits the tablet of `table` holding row `at` at `at`; both halves stay on its shard.
|
|
1014
|
+
/// Fails with `InvalidArgument` when `at` is the tablet's first row.
|
|
1015
|
+
#[doc(hidden)]
|
|
1016
|
+
pub fn split_tablet_pending(&self, table: TableId, at: &[u8]) -> Result<PendingMaintenance> {
|
|
1017
|
+
let (tablet, shard) = self.inner.tablet_at(table, at)?;
|
|
1018
|
+
self.inner.tablet_op(
|
|
1019
|
+
shard,
|
|
1020
|
+
crate::shard::TabletOpKind::Split {
|
|
1021
|
+
tablet,
|
|
1022
|
+
keys: vec![at.to_vec()],
|
|
1023
|
+
owners: vec![shard, shard],
|
|
1024
|
+
},
|
|
1025
|
+
)
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
/// Moves the tablet of `table` holding `row` to shard `to`.
|
|
1029
|
+
#[doc(hidden)]
|
|
1030
|
+
pub fn move_tablet_pending(
|
|
1031
|
+
&self,
|
|
1032
|
+
table: TableId,
|
|
1033
|
+
row: &[u8],
|
|
1034
|
+
to: u16,
|
|
1035
|
+
) -> Result<PendingMaintenance> {
|
|
1036
|
+
let (tablet, shard) = self.inner.tablet_at(table, row)?;
|
|
1037
|
+
self.inner.tablet_op(
|
|
1038
|
+
shard,
|
|
1039
|
+
crate::shard::TabletOpKind::Move {
|
|
1040
|
+
tablet,
|
|
1041
|
+
to: ShardId(to),
|
|
1042
|
+
},
|
|
1043
|
+
)
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
/// Merges the tablet of `table` holding `row` with its right neighbour (both must be on
|
|
1047
|
+
/// one shard).
|
|
1048
|
+
#[doc(hidden)]
|
|
1049
|
+
pub fn merge_tablets_pending(&self, table: TableId, row: &[u8]) -> Result<PendingMaintenance> {
|
|
1050
|
+
let view = self.inner.shared.view.load_full();
|
|
1051
|
+
let list = view.tablets.tablets_of(table);
|
|
1052
|
+
let i = list
|
|
1053
|
+
.iter()
|
|
1054
|
+
.position(|t| {
|
|
1055
|
+
t.start.as_slice() <= row && t.end.as_ref().is_none_or(|e| row < e.as_slice())
|
|
1056
|
+
})
|
|
1057
|
+
.ok_or_else(|| Error::TableNotFound(format!("table {}", table.0)))?;
|
|
1058
|
+
let (Some(l), Some(r)) = (list.get(i), list.get(i + 1)) else {
|
|
1059
|
+
return Err(Error::InvalidArgument("no right neighbour".to_owned()));
|
|
1060
|
+
};
|
|
1061
|
+
self.inner.tablet_op(
|
|
1062
|
+
l.shard,
|
|
1063
|
+
crate::shard::TabletOpKind::Merge {
|
|
1064
|
+
left: l.id,
|
|
1065
|
+
right: r.id,
|
|
1066
|
+
},
|
|
1067
|
+
)
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
/// Runs every shard's balancer now (whatever interval is configured); resolves once the
|
|
1071
|
+
/// splits, moves or merges it started are done.
|
|
1072
|
+
#[doc(hidden)]
|
|
1073
|
+
pub fn balance_pending(&self) -> Result<PendingMaintenance> {
|
|
1074
|
+
self.inner.check_open()?;
|
|
1075
|
+
let mut waiters = Vec::with_capacity(self.inner.shared.shards);
|
|
1076
|
+
for i in 0..self.inner.shared.shards {
|
|
1077
|
+
let (tx, rx) = completion();
|
|
1078
|
+
self.inner
|
|
1079
|
+
.shared
|
|
1080
|
+
.submitter(ShardId(i as u16))
|
|
1081
|
+
.submit(ShardMsg::Balance { reply: Some(tx) })?;
|
|
1082
|
+
waiters.push(rx);
|
|
1083
|
+
}
|
|
1084
|
+
Ok(PendingMaintenance {
|
|
1085
|
+
waiters,
|
|
1086
|
+
rounds: None,
|
|
1087
|
+
failed: None,
|
|
1088
|
+
owner: pigeonhole_io::sys::process_id(),
|
|
1089
|
+
})
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
/// The largest default timestamp handed out (the allocator's `H`, D271): every default
|
|
1093
|
+
/// timestamp so far is at or below it.
|
|
1094
|
+
#[doc(hidden)]
|
|
1095
|
+
pub fn last_default_ts(&self) -> pigeonhole_format::Timestamp {
|
|
1096
|
+
self.inner.shared.clock.last_ts()
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
/// Memtable jumps reads have taken in this process (D194). Test hook.
|
|
1100
|
+
#[doc(hidden)]
|
|
1101
|
+
pub fn tail_skips() -> u64 {
|
|
1102
|
+
crate::shard::TAIL_SKIPS.load(Ordering::Relaxed)
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
/// SST column skips reads have taken in this process (ICR 0041). Test hook.
|
|
1106
|
+
#[doc(hidden)]
|
|
1107
|
+
pub fn sst_skips() -> u64 {
|
|
1108
|
+
crate::shard::SST_SKIPS.load(Ordering::Relaxed)
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
/// Breaks the flush GC on purpose (#287), so a test can check the oracle catches it;
|
|
1112
|
+
/// [`FlushGcMutation::None`] restores it.
|
|
1113
|
+
#[doc(hidden)]
|
|
1114
|
+
pub fn mutate_flush_gc(&self, m: FlushGcMutation) {
|
|
1115
|
+
let v = match m {
|
|
1116
|
+
FlushGcMutation::None => 0,
|
|
1117
|
+
FlushGcMutation::DropGuard => 1,
|
|
1118
|
+
FlushGcMutation::DropSnapshotFloor => 2,
|
|
1119
|
+
FlushGcMutation::IgnoreVoids => 3,
|
|
1120
|
+
FlushGcMutation::CounterSourceInside => 4,
|
|
1121
|
+
};
|
|
1122
|
+
self.inner
|
|
1123
|
+
.shared
|
|
1124
|
+
.hooks
|
|
1125
|
+
.flush_gc_mutation
|
|
1126
|
+
.store(v, Ordering::Release);
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
/// Turns recording for [`take_compactions`](Self::take_compactions) (flushes too, #287)
|
|
1130
|
+
/// and [`take_appended`](Self::take_appended) on or off (off at open). A test that reads
|
|
1131
|
+
/// them turns it on first.
|
|
1132
|
+
#[doc(hidden)]
|
|
1133
|
+
pub fn record_history(&self, on: bool) {
|
|
1134
|
+
self.inner.shared.hooks.record.store(on, Ordering::Release);
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
/// The compactions committed since the last call (or since recording started), when
|
|
1138
|
+
/// recording is on ([`record_history`](Self::record_history)).
|
|
1139
|
+
#[doc(hidden)]
|
|
1140
|
+
pub fn take_compactions(&self) -> Vec<crate::compact::CompactionRecord> {
|
|
1141
|
+
let mut all = self
|
|
1142
|
+
.inner
|
|
1143
|
+
.shared
|
|
1144
|
+
.hooks
|
|
1145
|
+
.compactions
|
|
1146
|
+
.lock()
|
|
1147
|
+
.unwrap_or_else(PoisonError::into_inner);
|
|
1148
|
+
let (flushes, compactions) = std::mem::take(&mut *all).into_iter().partition(|r| r.flush);
|
|
1149
|
+
*all = flushes;
|
|
1150
|
+
compactions
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
/// Every compaction and flush record committed since the last call, in commit order
|
|
1154
|
+
/// (#287: a flush's GC drops history and may purge versions, so the model replays both).
|
|
1155
|
+
#[doc(hidden)]
|
|
1156
|
+
pub fn take_gc_records(&self) -> Vec<crate::compact::CompactionRecord> {
|
|
1157
|
+
std::mem::take(
|
|
1158
|
+
&mut *self
|
|
1159
|
+
.inner
|
|
1160
|
+
.shared
|
|
1161
|
+
.hooks
|
|
1162
|
+
.compactions
|
|
1163
|
+
.lock()
|
|
1164
|
+
.unwrap_or_else(PoisonError::into_inner),
|
|
1165
|
+
)
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
/// What a closed instance still holds of what `Engine::release_memory` releases (D265):
|
|
1169
|
+
/// how many memtable sets and SSTs the current view lists, the bytes in the block cache
|
|
1170
|
+
/// and in the row cache (`None` when it is off), the arenas' state and the error of a
|
|
1171
|
+
/// refused discard.
|
|
1172
|
+
#[doc(hidden)]
|
|
1173
|
+
pub fn memory_release(&self) -> MemoryRelease {
|
|
1174
|
+
let shared = &self.inner.shared;
|
|
1175
|
+
let view = shared.view.load();
|
|
1176
|
+
MemoryRelease {
|
|
1177
|
+
view_memtables: view.mems.iter().map(|m| m.map.len()).sum(),
|
|
1178
|
+
view_ssts: view.ssts.map.values().map(|f| f.iter().count()).sum(),
|
|
1179
|
+
block_cache_bytes: shared.cache.usage(),
|
|
1180
|
+
row_cache_bytes: shared.row_cache.as_ref().map(|r| r.usage()),
|
|
1181
|
+
arenas: match shared.arena_discard.load(Ordering::Acquire) {
|
|
1182
|
+
crate::shard::ARENAS_DISCARDED => ArenaDiscard::Discarded,
|
|
1183
|
+
crate::shard::ARENAS_REFUSED => ArenaDiscard::Refused,
|
|
1184
|
+
_ => ArenaDiscard::Pending,
|
|
1185
|
+
},
|
|
1186
|
+
arena_error: shared
|
|
1187
|
+
.hooks
|
|
1188
|
+
.arena_discard_error
|
|
1189
|
+
.lock()
|
|
1190
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
1191
|
+
.clone(),
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
/// How many bytes of the shared-memory arenas are resident (`mincore`; Linux mappings
|
|
1196
|
+
/// only, `Unsupported` elsewhere and on the simulated VFS).
|
|
1197
|
+
#[doc(hidden)]
|
|
1198
|
+
pub fn arena_resident_bytes(&self) -> Result<usize> {
|
|
1199
|
+
Ok(self.inner.shared.shm.arena_resident_bytes()?)
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
/// Seqnos the shards hold as aborted cross-shard commits, as of each shard's last
|
|
1203
|
+
/// batch (test hook).
|
|
1204
|
+
#[doc(hidden)]
|
|
1205
|
+
pub fn aborted_seqnos(&self) -> u64 {
|
|
1206
|
+
self.inner
|
|
1207
|
+
.shared
|
|
1208
|
+
.metrics
|
|
1209
|
+
.iter()
|
|
1210
|
+
.map(|m| m.hooks.aborted.load(Ordering::Relaxed))
|
|
1211
|
+
.sum()
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
/// How many times shard `shard` found enough free arena bytes for a batch but no run
|
|
1215
|
+
/// long enough for its largest entry, and made it wait (issue #141).
|
|
1216
|
+
#[doc(hidden)]
|
|
1217
|
+
pub fn arena_run_waits(&self, shard: usize) -> u64 {
|
|
1218
|
+
self.inner.shared.metrics[shard]
|
|
1219
|
+
.hooks
|
|
1220
|
+
.run_waits
|
|
1221
|
+
.load(Ordering::Relaxed)
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
/// How many flushes on shard `shard` the manifest refused for a purge guard a delete had
|
|
1225
|
+
/// voided, so that they flushed again without it (#287, test hook).
|
|
1226
|
+
#[doc(hidden)]
|
|
1227
|
+
pub fn flush_voids(&self, shard: usize) -> u64 {
|
|
1228
|
+
self.inner.shared.metrics[shard]
|
|
1229
|
+
.hooks
|
|
1230
|
+
.voided_flushes
|
|
1231
|
+
.load(Ordering::Relaxed)
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
/// How many decisions on shard `shard` arrived before their share's PREPARE settled and
|
|
1235
|
+
/// waited for it (D279, test hook).
|
|
1236
|
+
#[doc(hidden)]
|
|
1237
|
+
pub fn parked_decisions(&self, shard: usize) -> u64 {
|
|
1238
|
+
self.inner.shared.metrics[shard]
|
|
1239
|
+
.hooks
|
|
1240
|
+
.parked_decisions
|
|
1241
|
+
.load(Ordering::Relaxed)
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
/// Switches `Fault::HoldDecisionRecords` off and kicks every shard, so the DECISIONs it
|
|
1245
|
+
/// held join their next group (test hook).
|
|
1246
|
+
#[doc(hidden)]
|
|
1247
|
+
pub fn release_held_decisions(&self) {
|
|
1248
|
+
self.inner
|
|
1249
|
+
.shared
|
|
1250
|
+
.hooks
|
|
1251
|
+
.faults
|
|
1252
|
+
.set(Fault::HoldDecisionRecords, false);
|
|
1253
|
+
if let Some(subs) = self.inner.shared.submitters.get() {
|
|
1254
|
+
for s in subs {
|
|
1255
|
+
let _ = s.submit(crate::shard::ShardMsg::Kick);
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
/// How many `Decide { commit: false }` shard `shard` sent as a coordinator (D286, test
|
|
1261
|
+
/// hook).
|
|
1262
|
+
#[doc(hidden)]
|
|
1263
|
+
pub fn abort_decides_sent(&self, shard: usize) -> u64 {
|
|
1264
|
+
self.inner.shared.metrics[shard]
|
|
1265
|
+
.hooks
|
|
1266
|
+
.abort_decides
|
|
1267
|
+
.load(Ordering::Relaxed)
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
/// How many memtable entries read validation on shard `shard` has visited (D273, test
|
|
1271
|
+
/// hook).
|
|
1272
|
+
#[doc(hidden)]
|
|
1273
|
+
pub fn validate_entries(&self, shard: usize) -> u64 {
|
|
1274
|
+
self.inner.shared.metrics[shard]
|
|
1275
|
+
.hooks
|
|
1276
|
+
.validate_entries
|
|
1277
|
+
.load(Ordering::Relaxed)
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
/// [`Engine::backup`] at `snapshot`: with [`Snapshot::at_seqno`], below commits its SSTs
|
|
1281
|
+
/// already hold, so the backup rewrites those SSTs instead of copying them (#715).
|
|
1282
|
+
#[doc(hidden)]
|
|
1283
|
+
pub fn backup_at(&self, snapshot: Snapshot, dest: &Path) -> Result<()> {
|
|
1284
|
+
let _guard = self.inner.enter_maintenance()?;
|
|
1285
|
+
crate::maintenance::backup(&self.inner.shared, snapshot, dest)
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
/// How many compactions on shard `shard` a write voided before they installed their
|
|
1289
|
+
/// purge, so that they compacted again (#316).
|
|
1290
|
+
#[doc(hidden)]
|
|
1291
|
+
pub fn compaction_purge_voids(&self, shard: usize) -> u64 {
|
|
1292
|
+
self.inner.shared.metrics[shard]
|
|
1293
|
+
.hooks
|
|
1294
|
+
.purge_voids
|
|
1295
|
+
.load(Ordering::Relaxed)
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
/// How many `AwaitFlushed` and `FlushedThrough` messages shard `shard` handled: one pair
|
|
1299
|
+
/// per peer a blocked checkpoint waits for, not one per share (D266). Test hook.
|
|
1300
|
+
#[doc(hidden)]
|
|
1301
|
+
pub fn flushed_msgs(&self, shard: usize) -> u64 {
|
|
1302
|
+
self.inner.shared.metrics[shard]
|
|
1303
|
+
.hooks
|
|
1304
|
+
.flushed_msgs
|
|
1305
|
+
.load(Ordering::Relaxed)
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
/// How many spans shard `shard` added to its commits' in-flight time: one per commit it
|
|
1309
|
+
/// replied to (D257) and one per share it decided for another shard's coordination
|
|
1310
|
+
/// (D262); its own share counts nothing at the decision. Test hook.
|
|
1311
|
+
#[doc(hidden)]
|
|
1312
|
+
pub fn inflight_counts(&self, shard: usize) -> u64 {
|
|
1313
|
+
self.inner.shared.metrics[shard]
|
|
1314
|
+
.hooks
|
|
1315
|
+
.inflight_counts
|
|
1316
|
+
.load(Ordering::Relaxed)
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1319
|
+
/// The records shard `shard`'s checkpoint has not passed yet, as of its last batch: a
|
|
1320
|
+
/// test checks a participant's PREPAREs go once their commits settle (D254).
|
|
1321
|
+
#[doc(hidden)]
|
|
1322
|
+
pub fn logged_records(&self, shard: usize) -> u64 {
|
|
1323
|
+
self.inner.shared.metrics[shard]
|
|
1324
|
+
.hooks
|
|
1325
|
+
.logged
|
|
1326
|
+
.load(Ordering::Relaxed)
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
/// The most records shard `shard`'s checkpoint popped from its log in one batch so far
|
|
1330
|
+
/// (#763: at most the pop budget while open). Test hook.
|
|
1331
|
+
#[doc(hidden)]
|
|
1332
|
+
pub fn max_checkpoint_pops(&self, shard: usize) -> u64 {
|
|
1333
|
+
self.inner.shared.metrics[shard]
|
|
1334
|
+
.hooks
|
|
1335
|
+
.checkpoint_pops_max
|
|
1336
|
+
.load(Ordering::Relaxed)
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
/// Shard `shard`'s arena after its last batch: free bytes, the usable bytes of its
|
|
1340
|
+
/// largest run of free chunks, and its size (issue #141).
|
|
1341
|
+
#[doc(hidden)]
|
|
1342
|
+
pub fn arena_free(&self, shard: usize) -> (u64, u64, u64) {
|
|
1343
|
+
*self.inner.shared.metrics[shard]
|
|
1344
|
+
.hooks
|
|
1345
|
+
.arena
|
|
1346
|
+
.lock()
|
|
1347
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
/// The WAL records appended since the last call (or since recording started), in append
|
|
1351
|
+
/// order, when recording is on ([`record_history`](Self::record_history)).
|
|
1352
|
+
#[doc(hidden)]
|
|
1353
|
+
pub fn take_appended(&self) -> Vec<AppendedRecord> {
|
|
1354
|
+
std::mem::take(
|
|
1355
|
+
&mut *self
|
|
1356
|
+
.inner
|
|
1357
|
+
.shared
|
|
1358
|
+
.hooks
|
|
1359
|
+
.appended
|
|
1360
|
+
.lock()
|
|
1361
|
+
.unwrap_or_else(PoisonError::into_inner),
|
|
1362
|
+
)
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
/// PREPAREs refused for arena room since open (D245). Counted only in builds with this
|
|
1366
|
+
/// feature (test hook).
|
|
1367
|
+
#[doc(hidden)]
|
|
1368
|
+
pub fn room_refusals(&self) -> u64 {
|
|
1369
|
+
self.inner
|
|
1370
|
+
.shared
|
|
1371
|
+
.hooks
|
|
1372
|
+
.room_refusals
|
|
1373
|
+
.load(Ordering::Relaxed)
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
/// The seqnos of cross-shard attempts refused by a participant (`Moved`, `Room` or
|
|
1377
|
+
/// `PendingOverlap`) since the last call, when recording is on
|
|
1378
|
+
/// ([`record_history`](Self::record_history)): their PREPAREs never get a COMMIT, and the
|
|
1379
|
+
/// commit runs again under a new seqno or gives up with `Busy`.
|
|
1380
|
+
#[doc(hidden)]
|
|
1381
|
+
pub fn take_refused_attempts(&self) -> Vec<Seqno> {
|
|
1382
|
+
std::mem::take(
|
|
1383
|
+
&mut *self
|
|
1384
|
+
.inner
|
|
1385
|
+
.shared
|
|
1386
|
+
.hooks
|
|
1387
|
+
.refused
|
|
1388
|
+
.lock()
|
|
1389
|
+
.unwrap_or_else(PoisonError::into_inner),
|
|
1390
|
+
)
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
/// Takes the manifest writer's exclusion on this thread, as a commit in progress holds
|
|
1394
|
+
/// it: shards' manifest requests queue up (their pumps find it held and leave) until
|
|
1395
|
+
/// [`release_manifest`](Self::release_manifest). Returns whether it was free (test hook).
|
|
1396
|
+
#[doc(hidden)]
|
|
1397
|
+
pub fn hold_manifest(&self) -> bool {
|
|
1398
|
+
manifest::claim(&self.inner.shared)
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
/// How many manifest requests wait in the queue, behind a held exclusion
|
|
1402
|
+
/// ([`hold_manifest`](Self::hold_manifest)) or a commit in progress (test hook).
|
|
1403
|
+
#[doc(hidden)]
|
|
1404
|
+
pub fn manifest_queue_len(&self) -> usize {
|
|
1405
|
+
self.inner.shared.manifest_queue.len()
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
/// Commits every queued manifest request on this thread, which holds the exclusion
|
|
1409
|
+
/// ([`hold_manifest`](Self::hold_manifest)) (test hook).
|
|
1410
|
+
#[doc(hidden)]
|
|
1411
|
+
pub fn drain_manifest(&self) {
|
|
1412
|
+
manifest::drain_sync(&self.inner.shared);
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
/// Commits what is queued and releases the exclusion
|
|
1416
|
+
/// [`hold_manifest`](Self::hold_manifest) took (test hook).
|
|
1417
|
+
#[doc(hidden)]
|
|
1418
|
+
pub fn release_manifest(&self) {
|
|
1419
|
+
let shared = &self.inner.shared;
|
|
1420
|
+
loop {
|
|
1421
|
+
manifest::drain_sync(shared);
|
|
1422
|
+
manifest::release(shared);
|
|
1423
|
+
if shared.manifest_queue.is_empty() || !manifest::claim(shared) {
|
|
1424
|
+
break;
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
/// Whether a shard died (a panic, a dropped application-owned shard, a failed WAL sync or
|
|
1430
|
+
/// a failed cross-shard apply): new commits are then refused with `Closed` (D227). Lets
|
|
1431
|
+
/// the model checker tell that refusal from a wrong one. Test hook.
|
|
1432
|
+
#[doc(hidden)]
|
|
1433
|
+
pub fn shard_died(&self) -> bool {
|
|
1434
|
+
self.inner.shared.shard_died.load(Ordering::Acquire)
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
/// While `park` is set, a background manifest commit whose root commit completed waits
|
|
1438
|
+
/// before it publishes and answers; clearing it wakes the parked commit (test hook).
|
|
1439
|
+
#[doc(hidden)]
|
|
1440
|
+
pub fn park_manifest_commits(&self, park: bool) {
|
|
1441
|
+
let shared = &self.inner.shared;
|
|
1442
|
+
shared.hooks.manifest_park.store(park, Ordering::Release);
|
|
1443
|
+
if !park {
|
|
1444
|
+
let parked = shared
|
|
1445
|
+
.hooks
|
|
1446
|
+
.manifest_parked
|
|
1447
|
+
.lock()
|
|
1448
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
1449
|
+
.take();
|
|
1450
|
+
if let Some(w) = parked {
|
|
1451
|
+
w.wake();
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
/// The oldest `(seqno, view version)` any reader slot of the current region generation
|
|
1457
|
+
/// pins, and the view version the writer published last (test hook).
|
|
1458
|
+
#[doc(hidden)]
|
|
1459
|
+
pub fn reader_pin_and_view(&self) -> (Option<(Seqno, u64)>, u64) {
|
|
1460
|
+
let shared = &self.inner.shared;
|
|
1461
|
+
(shared.shm.oldest_reader_pin(), shared.view.load().version)
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
/// While `hold` is set, every compaction job waits before its first slice until
|
|
1465
|
+
/// [`release_held_compaction`](Self::release_held_compaction) lets it run; clearing it
|
|
1466
|
+
/// lets them all run (test hook, #316).
|
|
1467
|
+
#[doc(hidden)]
|
|
1468
|
+
pub fn hold_compactions(&self, hold: bool) {
|
|
1469
|
+
let hooks = &self.inner.shared.hooks;
|
|
1470
|
+
hooks.compaction_hold.store(hold, Ordering::Release);
|
|
1471
|
+
if !hold {
|
|
1472
|
+
let held = std::mem::take(
|
|
1473
|
+
&mut *hooks
|
|
1474
|
+
.compaction_held
|
|
1475
|
+
.lock()
|
|
1476
|
+
.unwrap_or_else(PoisonError::into_inner),
|
|
1477
|
+
);
|
|
1478
|
+
for (_, w) in held {
|
|
1479
|
+
w.wake();
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
/// Lets the oldest held compaction job run (test hook).
|
|
1485
|
+
#[doc(hidden)]
|
|
1486
|
+
pub fn release_held_compaction(&self) {
|
|
1487
|
+
let mut held = self
|
|
1488
|
+
.inner
|
|
1489
|
+
.shared
|
|
1490
|
+
.hooks
|
|
1491
|
+
.compaction_held
|
|
1492
|
+
.lock()
|
|
1493
|
+
.unwrap_or_else(PoisonError::into_inner);
|
|
1494
|
+
let first = (!held.is_empty()).then(|| held.remove(0));
|
|
1495
|
+
drop(held);
|
|
1496
|
+
if let Some((_, w)) = first {
|
|
1497
|
+
w.wake();
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
/// Compactions that finished their job and submitted their commit (test hook, D284):
|
|
1502
|
+
/// one stopped before this is still writing its output.
|
|
1503
|
+
#[doc(hidden)]
|
|
1504
|
+
pub fn compaction_commits_submitted(&self) -> u64 {
|
|
1505
|
+
self.inner
|
|
1506
|
+
.shared
|
|
1507
|
+
.hooks
|
|
1508
|
+
.compaction_commits
|
|
1509
|
+
.load(Ordering::Acquire)
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
/// While set, every compaction job's slice does a few units of work (one clock check's
|
|
1513
|
+
/// worth) and yields (test hook, D284): a test can stop it part-way.
|
|
1514
|
+
#[doc(hidden)]
|
|
1515
|
+
pub fn compaction_tiny_slices(&self, on: bool) {
|
|
1516
|
+
self.inner
|
|
1517
|
+
.shared
|
|
1518
|
+
.hooks
|
|
1519
|
+
.compaction_tiny_slices
|
|
1520
|
+
.store(on, Ordering::Release);
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
/// Whether a compaction job is held before its first slice (test hook).
|
|
1524
|
+
#[doc(hidden)]
|
|
1525
|
+
pub fn compaction_held(&self) -> bool {
|
|
1526
|
+
!self
|
|
1527
|
+
.inner
|
|
1528
|
+
.shared
|
|
1529
|
+
.hooks
|
|
1530
|
+
.compaction_held
|
|
1531
|
+
.lock()
|
|
1532
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
1533
|
+
.is_empty()
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
/// Threads that parked waiting for the manifest writer (`commit_req_from_thread`):
|
|
1537
|
+
/// counted after their last look at the exclusion and the pump's commit, so from then
|
|
1538
|
+
/// on only a wake (a release, a root commit's completion, their own request's answer)
|
|
1539
|
+
/// unparks them (test hook).
|
|
1540
|
+
#[doc(hidden)]
|
|
1541
|
+
pub fn manifest_thread_parks(&self) -> usize {
|
|
1542
|
+
self.inner
|
|
1543
|
+
.shared
|
|
1544
|
+
.hooks
|
|
1545
|
+
.manifest_thread_parks
|
|
1546
|
+
.load(Ordering::Acquire)
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1549
|
+
/// Values separated into blob files at commit time since open (`large::separate`, #230):
|
|
1550
|
+
/// the commit-time separation path a deferred run must take as a plain one does (#306;
|
|
1551
|
+
/// test hook).
|
|
1552
|
+
#[doc(hidden)]
|
|
1553
|
+
pub fn commit_separations(&self) -> u64 {
|
|
1554
|
+
self.inner
|
|
1555
|
+
.shared
|
|
1556
|
+
.hooks
|
|
1557
|
+
.commit_separations
|
|
1558
|
+
.load(Ordering::Relaxed)
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
/// Whether a manifest pump's root commit is in flight, not yet completed (test hook).
|
|
1562
|
+
#[doc(hidden)]
|
|
1563
|
+
pub fn manifest_commit_in_flight(&self) -> bool {
|
|
1564
|
+
self.inner.shared.manifest_flight.in_flight()
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
/// Whether a background manifest commit is parked (test hook).
|
|
1568
|
+
#[doc(hidden)]
|
|
1569
|
+
pub fn manifest_commit_parked(&self) -> bool {
|
|
1570
|
+
self.inner
|
|
1571
|
+
.shared
|
|
1572
|
+
.hooks
|
|
1573
|
+
.manifest_parked
|
|
1574
|
+
.lock()
|
|
1575
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
1576
|
+
.is_some()
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
/// Whether every shard has closed and the final close waits for the manifest writer
|
|
1580
|
+
/// (test hook).
|
|
1581
|
+
#[doc(hidden)]
|
|
1582
|
+
pub fn final_close_pending(&self) -> bool {
|
|
1583
|
+
self.inner.shared.close.pending()
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
/// Whether the final close has run (test hook: application-owned shards finish the close
|
|
1587
|
+
/// as they are driven).
|
|
1588
|
+
#[doc(hidden)]
|
|
1589
|
+
pub fn close_finished(&self) -> bool {
|
|
1590
|
+
self.inner.shared.closed.load(Ordering::Acquire)
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
/// Commits an empty manifest delta from this thread while a second request lands in
|
|
1594
|
+
/// the window between the drain's last `begin` and the release of the writer's
|
|
1595
|
+
/// exclusion (as a shard's submit would, whose pump then leaves). Returns whether that
|
|
1596
|
+
/// second request was committed too, which the release-then-re-check rule guarantees.
|
|
1597
|
+
#[doc(hidden)]
|
|
1598
|
+
pub fn probe_manifest_release_window(&self) -> Result<bool> {
|
|
1599
|
+
use std::task::{Context, Poll, Waker};
|
|
1600
|
+
let shared = &self.inner.shared;
|
|
1601
|
+
shared.hooks.manifest_race.store(true, Ordering::Release);
|
|
1602
|
+
manifest::commit_from_thread(shared, manifest::ReqKind::Edits(Vec::new()))?;
|
|
1603
|
+
let waiter = shared
|
|
1604
|
+
.hooks
|
|
1605
|
+
.manifest_race_waiter
|
|
1606
|
+
.lock()
|
|
1607
|
+
.unwrap_or_else(PoisonError::into_inner)
|
|
1608
|
+
.take();
|
|
1609
|
+
let Some(mut waiter) = waiter else {
|
|
1610
|
+
return Err(Error::Corruption("the race window was not entered".into()));
|
|
1611
|
+
};
|
|
1612
|
+
let mut cx = Context::from_waker(Waker::noop());
|
|
1613
|
+
Ok(match std::pin::Pin::new(&mut waiter).poll(&mut cx) {
|
|
1614
|
+
Poll::Ready(Some(Ok(_))) => true,
|
|
1615
|
+
Poll::Ready(Some(Err(e))) => return Err(e),
|
|
1616
|
+
Poll::Ready(None) | Poll::Pending => false,
|
|
1617
|
+
})
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
/// Reads the manifest of a database no writer has open.
|
|
1621
|
+
#[doc(hidden)]
|
|
1622
|
+
pub fn inspect_manifest(vfs: &pigeonhole_io::VfsRef, path: &Path) -> Result<ManifestInfo> {
|
|
1623
|
+
let opened = Pager::open(vfs, path, false)?;
|
|
1624
|
+
let clean = opened.clean_shutdown();
|
|
1625
|
+
let (catalog, _) = manifest::load(&opened, 1, Arc::new(MergeRegistry::default()))?;
|
|
1626
|
+
Ok(ManifestInfo {
|
|
1627
|
+
version: opened.root().manifest_version,
|
|
1628
|
+
checkpoints: (*catalog.checkpoints).clone(),
|
|
1629
|
+
flushed: (*catalog.flushed).clone(),
|
|
1630
|
+
tablets: catalog.tablets().iter().map(|t| (t.id, t.table)).collect(),
|
|
1631
|
+
tablet_ranges: catalog
|
|
1632
|
+
.tablets()
|
|
1633
|
+
.into_iter()
|
|
1634
|
+
.map(|t| (t.id, t.table, t.start, t.end))
|
|
1635
|
+
.collect(),
|
|
1636
|
+
clean,
|
|
1637
|
+
})
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
/// A tablet, its owning shard and its row range `[start, end)` (a test hook).
|
|
1642
|
+
#[doc(hidden)]
|
|
1643
|
+
pub type TabletOwner = (TabletId, u16, Vec<u8>, Option<Vec<u8>>);
|
|
1644
|
+
|
|
1645
|
+
impl TabletMap {
|
|
1646
|
+
/// The tablets of `table` in row order, as `(tablet, shard, start, end)` (a test hook).
|
|
1647
|
+
#[doc(hidden)]
|
|
1648
|
+
pub fn ranges(&self, table: TableId) -> Vec<TabletOwner> {
|
|
1649
|
+
self.tablets_of(table)
|
|
1650
|
+
.iter()
|
|
1651
|
+
.map(|t| (t.id, t.shard.0, t.start.clone(), t.end.clone()))
|
|
1652
|
+
.collect()
|
|
1653
|
+
}
|
|
1654
|
+
}
|