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,1509 @@
|
|
|
1
|
+
//! Compaction scheduling: scoring a shard's `(tablet, family)` levels after each manifest
|
|
2
|
+
//! commit, narrowing picker tasks to the tablet (decision D79), the GC policy (decision
|
|
3
|
+
//! D70), and the cooperative task that runs a `CompactionJob` and commits its output.
|
|
4
|
+
|
|
5
|
+
use std::collections::HashMap;
|
|
6
|
+
use std::sync::Arc;
|
|
7
|
+
use std::task::Poll;
|
|
8
|
+
|
|
9
|
+
use pigeonhole_compaction::{
|
|
10
|
+
BlobFileStat, BlobRefs, CompactionJob, CompactionOutput, CompactionTask, GcPolicy, JobContext,
|
|
11
|
+
JobPoll, KeyRange, Levels, NewBlobFile, OtherSource, TaskKind, pick_blob_gc,
|
|
12
|
+
};
|
|
13
|
+
use pigeonhole_format::key::encode_row_prefix;
|
|
14
|
+
use pigeonhole_format::manifest::{Edit, FamilyOptions, SstMeta};
|
|
15
|
+
use pigeonhole_format::superblock::ExtentRef;
|
|
16
|
+
use pigeonhole_format::{
|
|
17
|
+
BlobFileId, FamilyId, ManifestVersion, Seqno, SstId, TableId, TabletId, Timestamp,
|
|
18
|
+
};
|
|
19
|
+
use pigeonhole_runtime::{ShardId, Task, TaskPoll, TaskWaker, Waiter, completion};
|
|
20
|
+
use pigeonhole_sst::SstReader;
|
|
21
|
+
|
|
22
|
+
use crate::catalog::{Catalog, FamilyMeta};
|
|
23
|
+
use crate::manifest::{self, ManifestReq};
|
|
24
|
+
use crate::shard::{ShardMsg, Shared};
|
|
25
|
+
use crate::snapshot::{FamilySsts, SstSet, TabletEntry, View};
|
|
26
|
+
use crate::waker::StdWaker;
|
|
27
|
+
use crate::{Error, Result};
|
|
28
|
+
|
|
29
|
+
/// What a compaction purged, for checking the engine against the reference model's
|
|
30
|
+
/// `Model::purge` (decision D74). Every committed compaction is recorded; `bottommost` says
|
|
31
|
+
/// whether it could purge. A test hook (`Engine::take_compactions`).
|
|
32
|
+
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
33
|
+
#[doc(hidden)]
|
|
34
|
+
#[non_exhaustive]
|
|
35
|
+
pub struct CompactionRecord {
|
|
36
|
+
/// The manifest version that published the output.
|
|
37
|
+
pub manifest_version: ManifestVersion,
|
|
38
|
+
/// Table.
|
|
39
|
+
pub table: TableId,
|
|
40
|
+
/// Tablet.
|
|
41
|
+
pub tablet: TabletId,
|
|
42
|
+
/// Family.
|
|
43
|
+
pub family: FamilyId,
|
|
44
|
+
/// Whether the output was the bottommost data for the range (purges allowed).
|
|
45
|
+
pub bottommost: bool,
|
|
46
|
+
/// The live snapshot seqnos the GC kept.
|
|
47
|
+
pub snapshots: Vec<Seqno>,
|
|
48
|
+
/// The GC's clock.
|
|
49
|
+
pub now: Timestamp,
|
|
50
|
+
/// `GcPolicy::min_ts_above`.
|
|
51
|
+
pub min_ts_above: Timestamp,
|
|
52
|
+
/// The newest seqno among the inputs.
|
|
53
|
+
pub max_seqno: Seqno,
|
|
54
|
+
/// The tablet's row range (unescaped; `None` is unbounded).
|
|
55
|
+
pub rows: (Option<Vec<u8>>, Option<Vec<u8>>),
|
|
56
|
+
/// A flush's record, not a compaction's (#287: a flush's GC drops history too).
|
|
57
|
+
pub flush: bool,
|
|
58
|
+
/// A flush that ran the guarded purge of versions beyond `max_versions` (#287): no
|
|
59
|
+
/// delete purge, and versions counted within the flushed memtable only.
|
|
60
|
+
pub versions_purge: bool,
|
|
61
|
+
/// A flush's input: the seqnos of the commits its memtable held (the slot's other
|
|
62
|
+
/// sources can hold seqnos in the same range). `None` for a compaction, whose input is
|
|
63
|
+
/// every entry of the range at or below `max_seqno`.
|
|
64
|
+
pub input_seqnos: Option<Vec<Seqno>>,
|
|
65
|
+
/// A flush with `versions_purge`: the visible seqno when its commit installed the purge.
|
|
66
|
+
/// Every delete of the family at or below it was there before the install.
|
|
67
|
+
pub install_seqno: SeqnoCell,
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/// A seqno filled in when a flush installs its purge (test hook, #287): the visible seqno at
|
|
71
|
+
/// that moment. Compares by value.
|
|
72
|
+
#[derive(Debug, Clone, Default)]
|
|
73
|
+
#[doc(hidden)]
|
|
74
|
+
pub struct SeqnoCell(pub Arc<std::sync::atomic::AtomicU64>);
|
|
75
|
+
|
|
76
|
+
impl SeqnoCell {
|
|
77
|
+
/// The seqno (0 until set).
|
|
78
|
+
pub fn get(&self) -> Seqno {
|
|
79
|
+
self.0.load(std::sync::atomic::Ordering::Acquire)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
impl PartialEq for SeqnoCell {
|
|
84
|
+
fn eq(&self, other: &Self) -> bool {
|
|
85
|
+
self.get() == other.get()
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
impl Eq for SeqnoCell {}
|
|
90
|
+
|
|
91
|
+
/// The tablet's row range as a key range of row prefixes.
|
|
92
|
+
pub(crate) fn tablet_range(tablet: &TabletEntry) -> Result<KeyRange> {
|
|
93
|
+
let start = if tablet.start.is_empty() {
|
|
94
|
+
None
|
|
95
|
+
} else {
|
|
96
|
+
let mut k = Vec::new();
|
|
97
|
+
encode_row_prefix(&mut k, &tablet.start)?;
|
|
98
|
+
Some(k)
|
|
99
|
+
};
|
|
100
|
+
let end = match &tablet.end {
|
|
101
|
+
Some(e) => {
|
|
102
|
+
let mut k = Vec::new();
|
|
103
|
+
encode_row_prefix(&mut k, e)?;
|
|
104
|
+
Some(k)
|
|
105
|
+
}
|
|
106
|
+
None => None,
|
|
107
|
+
};
|
|
108
|
+
Ok(KeyRange { start, end })
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/// Whether `meta` holds keys outside `range`: an SST a split's child inherited (D13), which
|
|
112
|
+
/// still holds its sibling's rows even once the sibling no longer references it.
|
|
113
|
+
pub(crate) fn sticks_out(meta: &SstMeta, range: &KeyRange) -> bool {
|
|
114
|
+
range
|
|
115
|
+
.start
|
|
116
|
+
.as_ref()
|
|
117
|
+
.is_some_and(|s| meta.smallest_key.as_slice() < s.as_slice())
|
|
118
|
+
|| range
|
|
119
|
+
.end
|
|
120
|
+
.as_ref()
|
|
121
|
+
.is_some_and(|e| meta.largest_key.as_slice() >= e.as_slice())
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/// Narrows a picker task to the tablet's rows and turns a `TrivialMove` of an SST shared
|
|
125
|
+
/// with a sibling tablet, or holding rows outside the tablet, into a `Rewrite` (decision
|
|
126
|
+
/// D79): the rewrite drops the rows outside, so the SST stops blocking a merge.
|
|
127
|
+
pub(crate) fn narrow(
|
|
128
|
+
task: &mut CompactionTask,
|
|
129
|
+
tablet: &TabletEntry,
|
|
130
|
+
catalog: &Catalog,
|
|
131
|
+
) -> Result<()> {
|
|
132
|
+
let range = tablet_range(tablet)?;
|
|
133
|
+
task.subranges = task.subranges.iter().map(|s| s.intersect(&range)).collect();
|
|
134
|
+
if task.subranges.is_empty() {
|
|
135
|
+
task.subranges = vec![range.clone()];
|
|
136
|
+
}
|
|
137
|
+
task.range = range;
|
|
138
|
+
if task.kind == TaskKind::TrivialMove
|
|
139
|
+
&& task
|
|
140
|
+
.inputs
|
|
141
|
+
.iter()
|
|
142
|
+
.flat_map(|(_, ids)| ids.iter())
|
|
143
|
+
.any(|id| {
|
|
144
|
+
catalog.sst_shared(*id)
|
|
145
|
+
|| catalog
|
|
146
|
+
.sst(tablet.id, task.family, *id)
|
|
147
|
+
.is_some_and(|(_, m)| sticks_out(m, &task.range))
|
|
148
|
+
})
|
|
149
|
+
{
|
|
150
|
+
task.kind = TaskKind::Rewrite;
|
|
151
|
+
}
|
|
152
|
+
Ok(())
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/// What a full compaction reads of an SST's properties to judge it (D268): its distinct
|
|
156
|
+
/// rows, and `Properties::fully_purged`.
|
|
157
|
+
pub(crate) struct PurgeProps {
|
|
158
|
+
pub rows: u64,
|
|
159
|
+
pub fully_purged: Option<u32>,
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/// Whether an SST a full compaction would otherwise leave as it is may hold entries a
|
|
163
|
+
/// bottommost rewrite would purge (#805, #820, D268), from its metadata and `props` (read
|
|
164
|
+
/// only when the manifest's metadata cannot settle it; `None` if they could not be read):
|
|
165
|
+
/// a cell old enough to have expired under the family's TTL; or, unless a bottommost
|
|
166
|
+
/// compaction that nothing held back wrote it under a policy that still holds
|
|
167
|
+
/// (`Properties::fully_purged`: a counter family, or the family keeps every version now or
|
|
168
|
+
/// at least as many as then), delete markers, or, in a family that keeps `max_versions`
|
|
169
|
+
/// (not a counter, whose versions are never purged), more entries than rows (possibly more
|
|
170
|
+
/// versions of a column than the family keeps; a row of several columns counts too, so
|
|
171
|
+
/// such an SST without the property is rewritten once per `compact()` call, the shard's
|
|
172
|
+
/// `full_purged`). Not seen without the property: a keep-all family's put shadowed by a
|
|
173
|
+
/// newer put at the same timestamp, kept because a snapshot needed it when the SST was
|
|
174
|
+
/// written.
|
|
175
|
+
pub(crate) fn may_hold_purgeable(
|
|
176
|
+
sst: &SstMeta,
|
|
177
|
+
family: &FamilyOptions,
|
|
178
|
+
now: Timestamp,
|
|
179
|
+
props: impl FnOnce() -> Option<PurgeProps>,
|
|
180
|
+
) -> bool {
|
|
181
|
+
if family.ttl_micros > 0 && sst.ts_range.0.saturating_add(family.ttl_micros) <= now {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
let counter = family.kind.is_aggregate();
|
|
185
|
+
let versions = !counter && family.max_versions > 0;
|
|
186
|
+
if sst.deletes == 0 && !versions {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
let Some(props) = props() else {
|
|
190
|
+
return true;
|
|
191
|
+
};
|
|
192
|
+
let purged = props.fully_purged.is_some_and(|then| {
|
|
193
|
+
counter || family.max_versions == 0 || (then != 0 && family.max_versions >= then)
|
|
194
|
+
});
|
|
195
|
+
!purged && (sst.deletes > 0 || (versions && sst.entries > props.rows))
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/// A task compacting every level of a slot into the last level (`Engine::compact`).
|
|
199
|
+
///
|
|
200
|
+
/// A lone SST, or a run already at the last level, is rewritten rather than moved or left
|
|
201
|
+
/// alone when `purgeable` says one of its SSTs may hold entries a bottommost rewrite purges
|
|
202
|
+
/// ([`may_hold_purgeable`]): a full compaction leaves nothing purgeable (#805, #820, D268).
|
|
203
|
+
///
|
|
204
|
+
/// **Once per request** (#1313): with `rewritten`, the same full compaction already rewrote
|
|
205
|
+
/// this slot. A slot that is then one run at the last level is left as it is, whichever reason
|
|
206
|
+
/// would rewrite it again: purgeable entries, rows outside the tablet, or a lone SST above one
|
|
207
|
+
/// piece. A rewrite already produced that run, so another one may produce it again, and a full
|
|
208
|
+
/// compaction runs until no slot plans a task. For pieces, the plan judges an SST by its whole
|
|
209
|
+
/// length (index, filters and footer included), while the sink cuts by its data. An SST whose
|
|
210
|
+
/// data fits a piece but whose whole length is just over it was rewritten into itself about once
|
|
211
|
+
/// a millisecond, for as long as the `compact()` ran. New data flushed meanwhile makes the slot
|
|
212
|
+
/// more than one run, and it compacts again. The sink now cuts by the whole length too (#1324);
|
|
213
|
+
/// what remains is an output whose last row overruns its piece's slack, which only this guard
|
|
214
|
+
/// bounds (#1351).
|
|
215
|
+
///
|
|
216
|
+
/// A lone SST is also rewritten, not moved, when it is larger than one output piece
|
|
217
|
+
/// (`output_piece_bytes` at `target`): the rewrite cuts it into pieces that pack below one
|
|
218
|
+
/// another, so a compacted and shrunk file is about as large as its data (#185).
|
|
219
|
+
///
|
|
220
|
+
/// With `rewrite` (tablet changes on), a lone SST above the last level is rewritten rather
|
|
221
|
+
/// than moved, so the compaction purges what a bottommost compaction may (D74) whatever
|
|
222
|
+
/// the slot's layout: splits and moves flush and share SSTs at points that depend on the
|
|
223
|
+
/// shard count, and a move would keep deletes a rewrite of the same rows drops (issue #94).
|
|
224
|
+
#[allow(clippy::too_many_arguments)]
|
|
225
|
+
pub(crate) fn plan_full(
|
|
226
|
+
tablet: &TabletEntry,
|
|
227
|
+
family: FamilyId,
|
|
228
|
+
levels: &Levels,
|
|
229
|
+
last_level: u8,
|
|
230
|
+
busy: &[SstId],
|
|
231
|
+
rewrite: bool,
|
|
232
|
+
rewritten: bool,
|
|
233
|
+
target: u64,
|
|
234
|
+
mut purgeable: impl FnMut(&SstMeta) -> bool,
|
|
235
|
+
) -> Option<CompactionTask> {
|
|
236
|
+
let inputs: Vec<(u8, Vec<SstId>)> = levels
|
|
237
|
+
.levels
|
|
238
|
+
.iter()
|
|
239
|
+
.enumerate()
|
|
240
|
+
.filter(|(_, l)| !l.is_empty())
|
|
241
|
+
.map(|(n, l)| (n as u8, l.iter().map(|s| s.id).collect()))
|
|
242
|
+
.collect();
|
|
243
|
+
let total: usize = inputs.iter().map(|(_, ids)| ids.len()).sum();
|
|
244
|
+
if total == 0 {
|
|
245
|
+
return None;
|
|
246
|
+
}
|
|
247
|
+
if inputs
|
|
248
|
+
.iter()
|
|
249
|
+
.flat_map(|(_, ids)| ids)
|
|
250
|
+
.any(|id| busy.contains(id))
|
|
251
|
+
{
|
|
252
|
+
return None;
|
|
253
|
+
}
|
|
254
|
+
if rewritten && inputs.len() == 1 && inputs[0].0 == last_level {
|
|
255
|
+
return None;
|
|
256
|
+
}
|
|
257
|
+
// Already one run at the bottom: nothing to do, unless it may hold purgeable entries
|
|
258
|
+
// (#820) or rows outside the tablet (inherited from a split's parent), which a rewrite
|
|
259
|
+
// drops.
|
|
260
|
+
// A lone SST larger than one output piece is cut into pieces (#185), unless it holds a
|
|
261
|
+
// single row: outputs are cut only between rows, so its rewrite would be the same SST,
|
|
262
|
+
// and a full compaction, which runs until nothing is left to do, would never end.
|
|
263
|
+
let lone = (total == 1)
|
|
264
|
+
.then(|| levels.levels.iter().flatten().next())
|
|
265
|
+
.flatten();
|
|
266
|
+
let one_piece = lone.is_none_or(|s| {
|
|
267
|
+
pigeonhole_compaction::output_piece_bytes(s.len, target) >= s.len
|
|
268
|
+
|| crate::snapshot::row_of(&s.smallest_key) == crate::snapshot::row_of(&s.largest_key)
|
|
269
|
+
});
|
|
270
|
+
// Asked only where the answer changes the plan: a run already at the bottom, or a lone
|
|
271
|
+
// SST that would be moved.
|
|
272
|
+
let settled = inputs.len() == 1 && inputs[0].0 == last_level && one_piece;
|
|
273
|
+
let movable = total == 1 && !rewrite && one_piece;
|
|
274
|
+
let purge = (settled || movable) && levels.levels.iter().flatten().any(|s| purgeable(s));
|
|
275
|
+
if settled && !purge {
|
|
276
|
+
let range = tablet_range(tablet).ok()?;
|
|
277
|
+
if !levels
|
|
278
|
+
.levels
|
|
279
|
+
.iter()
|
|
280
|
+
.flatten()
|
|
281
|
+
.any(|m| sticks_out(m, &range))
|
|
282
|
+
{
|
|
283
|
+
return None;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
let kind = if movable && !purge {
|
|
287
|
+
TaskKind::TrivialMove
|
|
288
|
+
} else {
|
|
289
|
+
TaskKind::Rewrite
|
|
290
|
+
};
|
|
291
|
+
Some(CompactionTask {
|
|
292
|
+
tablet: tablet.id,
|
|
293
|
+
family,
|
|
294
|
+
range: KeyRange::all(),
|
|
295
|
+
subranges: vec![KeyRange::all()],
|
|
296
|
+
inputs,
|
|
297
|
+
output_level: last_level,
|
|
298
|
+
kind,
|
|
299
|
+
})
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/// A slot: one `(tablet, family)` tree.
|
|
303
|
+
type Slot = (TabletId, FamilyId);
|
|
304
|
+
|
|
305
|
+
/// Blob GC planning (issues #33, #240).
|
|
306
|
+
///
|
|
307
|
+
/// A blob file is emptied by rewriting every slot whose SSTs point into it: a `BlobGc`
|
|
308
|
+
/// task over all of the slot's SSTs copies the values still live in the file into new
|
|
309
|
+
/// ones, and the file is dropped once its live count reaches zero (`blob_edits`). The
|
|
310
|
+
/// manifest records which blob files each SST points into (`SstBlobRefs`), so only those
|
|
311
|
+
/// slots are rewritten, and a slot whose blob GC committed is not picked again for the
|
|
312
|
+
/// file (its new SSTs hold no pointer into it), across reopens too. An SST without a
|
|
313
|
+
/// record (written by an older build) counts as pointing into every file of its family.
|
|
314
|
+
#[derive(Debug, Default)]
|
|
315
|
+
pub(crate) struct BlobGc;
|
|
316
|
+
|
|
317
|
+
impl BlobGc {
|
|
318
|
+
/// The next blob GC task among `slots` (oldest candidate file first), or `None`.
|
|
319
|
+
/// Candidates are files at least half garbage with at least `min_garbage` garbage
|
|
320
|
+
/// bytes (`pick_blob_gc`); a slot is picked for the candidates its SSTs point into.
|
|
321
|
+
pub(crate) fn plan(
|
|
322
|
+
&self,
|
|
323
|
+
view: &View,
|
|
324
|
+
slots: &[Slot],
|
|
325
|
+
last_level: u8,
|
|
326
|
+
busy: &[SstId],
|
|
327
|
+
min_garbage: u64,
|
|
328
|
+
) -> Option<(Slot, CompactionTask)> {
|
|
329
|
+
let catalog = &view.catalog;
|
|
330
|
+
let mut candidates: HashMap<FamilyId, Vec<BlobFileId>> = HashMap::new();
|
|
331
|
+
for (id, b) in catalog.blob_files.iter() {
|
|
332
|
+
let stat = BlobFileStat {
|
|
333
|
+
id: *id,
|
|
334
|
+
total_bytes: b.total_bytes,
|
|
335
|
+
live_bytes: b.live_bytes,
|
|
336
|
+
};
|
|
337
|
+
if !pick_blob_gc(&[stat], min_garbage).is_empty() {
|
|
338
|
+
candidates.entry(b.family).or_default().push(*id);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
for &slot in slots {
|
|
342
|
+
let Some(files) = candidates.get(&slot.1) else {
|
|
343
|
+
continue;
|
|
344
|
+
};
|
|
345
|
+
let Some(fam) = view.ssts.family(slot.0, slot.1) else {
|
|
346
|
+
continue;
|
|
347
|
+
};
|
|
348
|
+
let pending: Vec<BlobFileId> = files
|
|
349
|
+
.iter()
|
|
350
|
+
.copied()
|
|
351
|
+
.filter(|f| fam.iter().any(|s| catalog.may_reference(s.meta.id, *f)))
|
|
352
|
+
.collect();
|
|
353
|
+
if pending.is_empty() {
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
let inputs: Vec<(u8, Vec<SstId>)> = fam
|
|
357
|
+
.levels
|
|
358
|
+
.iter()
|
|
359
|
+
.enumerate()
|
|
360
|
+
.filter(|(_, l)| !l.is_empty())
|
|
361
|
+
.map(|(n, l)| (n as u8, l.iter().map(|s| s.meta.id).collect()))
|
|
362
|
+
.collect();
|
|
363
|
+
if inputs
|
|
364
|
+
.iter()
|
|
365
|
+
.flat_map(|(_, ids)| ids)
|
|
366
|
+
.any(|id| busy.contains(id))
|
|
367
|
+
{
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
let task = CompactionTask {
|
|
371
|
+
tablet: slot.0,
|
|
372
|
+
family: slot.1,
|
|
373
|
+
range: KeyRange::all(),
|
|
374
|
+
subranges: vec![KeyRange::all()],
|
|
375
|
+
inputs,
|
|
376
|
+
output_level: last_level,
|
|
377
|
+
kind: TaskKind::BlobGc {
|
|
378
|
+
blob_files: pending,
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
return Some((slot, task));
|
|
382
|
+
}
|
|
383
|
+
None
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/// Turns a full compaction's rewrite of `slot` into a blob GC of every file of the family
|
|
387
|
+
/// with any garbage (the inputs are rewritten anyway; `Engine::compact` reclaims all it
|
|
388
|
+
/// can).
|
|
389
|
+
pub(crate) fn full(&self, catalog: &Catalog, task: &mut CompactionTask) {
|
|
390
|
+
if task.kind != TaskKind::Rewrite {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
let files: Vec<BlobFileId> = catalog
|
|
394
|
+
.blob_files
|
|
395
|
+
.iter()
|
|
396
|
+
.filter(|(_, b)| b.family == task.family && b.live_bytes < b.total_bytes)
|
|
397
|
+
.map(|(id, _)| *id)
|
|
398
|
+
.collect();
|
|
399
|
+
if !files.is_empty() {
|
|
400
|
+
task.kind = TaskKind::BlobGc { blob_files: files };
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/// The read points GC must preserve (decision D70): every live snapshot of this process plus
|
|
406
|
+
/// the oldest reader pin's seqno (a reader's snapshots pin its own view, so the oldest pin
|
|
407
|
+
/// bounds everything a reader can still read), ascending.
|
|
408
|
+
pub(crate) fn gc_snapshots(shared: &Shared) -> Vec<Seqno> {
|
|
409
|
+
let mut snapshots = shared.live_seqnos.list();
|
|
410
|
+
if let Some((seqno, _)) = shared.shm.oldest_reader_pin()
|
|
411
|
+
&& seqno != 0
|
|
412
|
+
{
|
|
413
|
+
snapshots.push(seqno);
|
|
414
|
+
}
|
|
415
|
+
snapshots.sort_unstable();
|
|
416
|
+
snapshots.dedup();
|
|
417
|
+
snapshots
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/// The GC policy of `task` over `fam` (decision D70): every live snapshot of this process
|
|
421
|
+
/// plus the oldest reader pin's seqno (a reader's snapshots pin its own view, so the
|
|
422
|
+
/// oldest pin bounds everything a reader can still read), whether the output is bottommost,
|
|
423
|
+
/// and the smallest timestamp above the inputs (other SSTs of the slot and its memtables).
|
|
424
|
+
/// For a counter family it also lists the other sources that may hold a seqno at or below
|
|
425
|
+
/// the newest input seqno (D179): the slot's other SSTs, its memtables (from
|
|
426
|
+
/// `mem_min_seqno`) and the prepared shares (`prepared_seqnos`).
|
|
427
|
+
pub(crate) fn gc_policy(
|
|
428
|
+
shared: &Shared,
|
|
429
|
+
fam: &FamilySsts,
|
|
430
|
+
task: &CompactionTask,
|
|
431
|
+
(mem_min_ts, mem_min_seqno): (Timestamp, Option<Seqno>),
|
|
432
|
+
prepared_seqnos: impl Iterator<Item = Seqno>,
|
|
433
|
+
counter: bool,
|
|
434
|
+
now: Timestamp,
|
|
435
|
+
) -> GcPolicy {
|
|
436
|
+
let snapshots = gc_snapshots(shared);
|
|
437
|
+
let input_ids: Vec<SstId> = task
|
|
438
|
+
.inputs
|
|
439
|
+
.iter()
|
|
440
|
+
.flat_map(|(_, ids)| ids.iter().copied())
|
|
441
|
+
.collect();
|
|
442
|
+
// An output in L0 (a FIFO merge of some L0 files) is bottommost only if it takes every
|
|
443
|
+
// SST of the slot: the L0 files left out may be older.
|
|
444
|
+
let bottommost = fam
|
|
445
|
+
.levels
|
|
446
|
+
.iter()
|
|
447
|
+
.enumerate()
|
|
448
|
+
.skip(usize::from(task.output_level) + 1)
|
|
449
|
+
.all(|(_, l)| l.is_empty())
|
|
450
|
+
&& (task.output_level != 0 || fam.iter().all(|s| input_ids.contains(&s.meta.id)));
|
|
451
|
+
let mut gc = GcPolicy::new(snapshots, now, bottommost);
|
|
452
|
+
gc.min_ts_above = fam
|
|
453
|
+
.iter()
|
|
454
|
+
.filter(|s| !input_ids.contains(&s.meta.id))
|
|
455
|
+
.map(|s| s.meta.ts_range.0)
|
|
456
|
+
.fold(mem_min_ts, Timestamp::min);
|
|
457
|
+
// Without an input found in `fam` the bound is unknown: `None` guards everything.
|
|
458
|
+
let inputs_max = fam
|
|
459
|
+
.iter()
|
|
460
|
+
.filter(|s| input_ids.contains(&s.meta.id))
|
|
461
|
+
.map(|s| s.meta.seqno_range.1)
|
|
462
|
+
.max();
|
|
463
|
+
if counter && let Some(inputs_max) = inputs_max {
|
|
464
|
+
let ssts = fam
|
|
465
|
+
.iter()
|
|
466
|
+
.filter(|s| !input_ids.contains(&s.meta.id))
|
|
467
|
+
.map(|s| OtherSource {
|
|
468
|
+
keys: Some((s.meta.smallest_key.clone(), s.meta.largest_key.clone())),
|
|
469
|
+
seqnos: s.meta.seqno_range,
|
|
470
|
+
});
|
|
471
|
+
let unbounded = mem_min_seqno
|
|
472
|
+
.into_iter()
|
|
473
|
+
.chain(prepared_seqnos)
|
|
474
|
+
.map(|lo| OtherSource {
|
|
475
|
+
keys: None,
|
|
476
|
+
seqnos: (lo, Seqno::MAX),
|
|
477
|
+
});
|
|
478
|
+
gc.other_sources = Some(
|
|
479
|
+
ssts.chain(unbounded)
|
|
480
|
+
.filter(|o| o.seqnos.0 <= inputs_max)
|
|
481
|
+
.collect(),
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
gc
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/// `CompactionRecord::max_seqno`: a seqno at or below which every entry of the slot is an
|
|
488
|
+
/// input or was already dropped. The newest seqno among the inputs, raised to just below the
|
|
489
|
+
/// oldest entry above them (the slot's other SSTs and memtables; `visible` when there is
|
|
490
|
+
/// none): an output SST's seqno range covers only the entries it kept, so an entry an
|
|
491
|
+
/// earlier compaction dropped (hidden by a delete at every read point) can be newer than
|
|
492
|
+
/// every input, and the model must still count it as one (issue #66). Never above `visible`:
|
|
493
|
+
/// a seqno past it may belong to a cross-shard commit not applied here yet (prepared and
|
|
494
|
+
/// undecided, or its PREPARE still on the way), which lands in the memtables below their
|
|
495
|
+
/// oldest entry (issue #132). Inputs never pass `visible` (a memtable freezes once it is).
|
|
496
|
+
pub(crate) fn max_input_seqno(
|
|
497
|
+
fam: &FamilySsts,
|
|
498
|
+
task: &CompactionTask,
|
|
499
|
+
mem_min_seqno: Option<Seqno>,
|
|
500
|
+
visible: Seqno,
|
|
501
|
+
) -> Seqno {
|
|
502
|
+
let is_input = |id: SstId| task.inputs.iter().any(|(_, ids)| ids.contains(&id));
|
|
503
|
+
let inputs = fam
|
|
504
|
+
.iter()
|
|
505
|
+
.filter(|s| is_input(s.meta.id))
|
|
506
|
+
.map(|s| s.meta.seqno_range.1)
|
|
507
|
+
.max()
|
|
508
|
+
.unwrap_or(0);
|
|
509
|
+
let above = fam
|
|
510
|
+
.iter()
|
|
511
|
+
.filter(|s| !is_input(s.meta.id))
|
|
512
|
+
.map(|s| s.meta.seqno_range.0)
|
|
513
|
+
.chain(mem_min_seqno)
|
|
514
|
+
.min()
|
|
515
|
+
.map_or(visible, |m| m.saturating_sub(1))
|
|
516
|
+
.min(visible);
|
|
517
|
+
inputs.max(above)
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/// Manifest edits plus the readers of the SSTs they add.
|
|
521
|
+
type Outputs = (Vec<Edit>, Vec<(SstId, Arc<SstReader>)>);
|
|
522
|
+
|
|
523
|
+
enum Stage {
|
|
524
|
+
Run,
|
|
525
|
+
Commit(Waiter<Result<ManifestVersion>>),
|
|
526
|
+
Done,
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/// A running compaction of one slot.
|
|
530
|
+
pub(crate) struct CompactionWork {
|
|
531
|
+
shared: Arc<Shared>,
|
|
532
|
+
shard: ShardId,
|
|
533
|
+
pub task: CompactionTask,
|
|
534
|
+
job: Option<CompactionJob>,
|
|
535
|
+
/// The view the inputs were taken from: pins their extents while the job reads them.
|
|
536
|
+
view: Arc<View>,
|
|
537
|
+
/// A `Drop`'s blob live-byte changes: the pointers its SSTs held (read before submit).
|
|
538
|
+
drop_delta: Vec<(BlobFileId, i64)>,
|
|
539
|
+
/// The finished job's per-SST blob references (#240).
|
|
540
|
+
blob_refs: BlobRefs,
|
|
541
|
+
meta: FamilyMeta,
|
|
542
|
+
record: Option<CompactionRecord>,
|
|
543
|
+
/// A bottommost purge's guard (#316): its commit installs only if no write below its
|
|
544
|
+
/// `min_ts_above` voided it since the plan (see `Shard::admit_against_guards`).
|
|
545
|
+
pub guard: Option<Arc<crate::purge_guard::PurgeGuard>>,
|
|
546
|
+
/// The shard's count of compactions started, at this one's start: tags its
|
|
547
|
+
/// `CompactionCommitting`, so a stale one cannot mark a later job committing (#991).
|
|
548
|
+
pub epoch: u64,
|
|
549
|
+
/// Test hook (`Engine::hold_compactions`): held before the first slice, then released.
|
|
550
|
+
#[cfg(feature = "test-hooks")]
|
|
551
|
+
hold: (Option<u64>, bool),
|
|
552
|
+
stage: Stage,
|
|
553
|
+
waker: StdWaker,
|
|
554
|
+
started: u64,
|
|
555
|
+
/// Taken back from a background worker and dropped before its commit (D284): its report
|
|
556
|
+
/// says so (not a failure; the slot compacts again).
|
|
557
|
+
reclaimed: bool,
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/// Reads a separated base for a compaction's fold (D298 §4.2), through the view the work
|
|
561
|
+
/// holds. A base it can't read is not folded: the run stays apart and the read that needs it
|
|
562
|
+
/// reports the error.
|
|
563
|
+
#[derive(Debug)]
|
|
564
|
+
struct BaseBlobs(Arc<SstSet>);
|
|
565
|
+
|
|
566
|
+
impl pigeonhole_compaction::BlobFetch for BaseBlobs {
|
|
567
|
+
fn fetch(&self, ptr: &pigeonhole_format::value::BlobPointer) -> Option<pigeonhole_cache::Cell> {
|
|
568
|
+
self.0.read_pointer(ptr).ok()
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
impl CompactionWork {
|
|
573
|
+
/// Prepares the work: opens the input readers and builds the job (a `TrivialMove` or
|
|
574
|
+
/// `Drop` needs none).
|
|
575
|
+
#[allow(clippy::too_many_arguments)]
|
|
576
|
+
pub(crate) fn new(
|
|
577
|
+
shared: Arc<Shared>,
|
|
578
|
+
shard: ShardId,
|
|
579
|
+
view: Arc<View>,
|
|
580
|
+
fam: &FamilySsts,
|
|
581
|
+
meta: FamilyMeta,
|
|
582
|
+
task: CompactionTask,
|
|
583
|
+
gc: GcPolicy,
|
|
584
|
+
record: Option<CompactionRecord>,
|
|
585
|
+
) -> Result<Self> {
|
|
586
|
+
let started = shared.vfs.monotonic_nanos();
|
|
587
|
+
let job = if matches!(task.kind, TaskKind::Rewrite | TaskKind::BlobGc { .. }) {
|
|
588
|
+
let priority = SstSet::priority(meta.options.cache_priority);
|
|
589
|
+
let mut inputs: Vec<Arc<SstReader>> = Vec::new();
|
|
590
|
+
for (_, ids) in &task.inputs {
|
|
591
|
+
for id in ids {
|
|
592
|
+
let (_, sst) = fam.find(*id).ok_or_else(|| {
|
|
593
|
+
Error::Corruption(format!("compaction input {} is gone", id.0))
|
|
594
|
+
})?;
|
|
595
|
+
inputs.push(sst.reader(&view.ssts, priority)?);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
let mut ctx = JobContext::new(
|
|
599
|
+
meta.table,
|
|
600
|
+
meta.options.clone(),
|
|
601
|
+
Arc::clone(&shared.pager),
|
|
602
|
+
Arc::clone(&shared.cache),
|
|
603
|
+
Arc::clone(&shared.sst_ids),
|
|
604
|
+
Arc::clone(&shared.blob_ids),
|
|
605
|
+
gc,
|
|
606
|
+
);
|
|
607
|
+
ctx.merge = meta.merge_op.clone();
|
|
608
|
+
// D298 §4.2: a run of operands folds into its base, read from its blob file
|
|
609
|
+
// when separated (only the kinds whose values may be).
|
|
610
|
+
if crate::catalog::folds_separated_bases(meta.options.kind) && view.ssts.has_blobs() {
|
|
611
|
+
ctx.base_blobs = Some(Arc::new(BaseBlobs(Arc::clone(&view.ssts))));
|
|
612
|
+
}
|
|
613
|
+
if let TaskKind::BlobGc { blob_files } = &task.kind {
|
|
614
|
+
for id in blob_files {
|
|
615
|
+
let reader = view.ssts.blob_reader(*id).ok_or_else(|| {
|
|
616
|
+
Error::Corruption(format!("blob GC input {} is gone", id.0))
|
|
617
|
+
})?;
|
|
618
|
+
ctx.blob_files.push((*id, reader));
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
ctx.target_sst_bytes = shared.picker.target_sst_bytes;
|
|
622
|
+
ctx.clock = Some(Arc::clone(&shared.vfs));
|
|
623
|
+
Some(CompactionJob::new(task.clone(), inputs, ctx))
|
|
624
|
+
} else {
|
|
625
|
+
None
|
|
626
|
+
};
|
|
627
|
+
Ok(Self {
|
|
628
|
+
shared,
|
|
629
|
+
shard,
|
|
630
|
+
task,
|
|
631
|
+
job,
|
|
632
|
+
view,
|
|
633
|
+
drop_delta: Vec::new(),
|
|
634
|
+
blob_refs: Vec::new(),
|
|
635
|
+
meta,
|
|
636
|
+
record,
|
|
637
|
+
guard: None,
|
|
638
|
+
epoch: 0,
|
|
639
|
+
#[cfg(feature = "test-hooks")]
|
|
640
|
+
hold: (None, false),
|
|
641
|
+
stage: Stage::Run,
|
|
642
|
+
waker: StdWaker::default(),
|
|
643
|
+
started,
|
|
644
|
+
reclaimed: false,
|
|
645
|
+
})
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/// For a `Drop`, which removes whole SSTs without a job: the live bytes the blob files
|
|
649
|
+
/// lose, `16 + len` for every blob pointer a dropped SST holds within the tablet's rows
|
|
650
|
+
/// (the same accounting a job does for the puts it drops). Uses the SST's recorded
|
|
651
|
+
/// references when they cover only this tablet's rows, and reads the SST otherwise;
|
|
652
|
+
/// nothing when the family has no blob files.
|
|
653
|
+
fn count_dropped_blobs(&mut self) -> Result<()> {
|
|
654
|
+
use pigeonhole_compaction::{blob_pointer, record_bytes};
|
|
655
|
+
use pigeonhole_format::Cursor;
|
|
656
|
+
use pigeonhole_format::key::{Kind, split_suffix};
|
|
657
|
+
use pigeonhole_sst::{ReadOptions, ScanFilter};
|
|
658
|
+
|
|
659
|
+
let family = self.task.family;
|
|
660
|
+
if !self
|
|
661
|
+
.view
|
|
662
|
+
.catalog
|
|
663
|
+
.blob_files
|
|
664
|
+
.values()
|
|
665
|
+
.any(|b| b.family == family)
|
|
666
|
+
{
|
|
667
|
+
return Ok(());
|
|
668
|
+
}
|
|
669
|
+
let fam = self
|
|
670
|
+
.view
|
|
671
|
+
.ssts
|
|
672
|
+
.family(self.task.tablet, family)
|
|
673
|
+
.ok_or_else(|| Error::Corruption("dropped SSTs are gone".to_owned()))?;
|
|
674
|
+
let priority = SstSet::priority(self.meta.options.cache_priority);
|
|
675
|
+
let mut read = ReadOptions::default();
|
|
676
|
+
read.fill_cache = false;
|
|
677
|
+
read.readahead_blocks = 4;
|
|
678
|
+
let range = &self.task.range;
|
|
679
|
+
let mut delta: Vec<(BlobFileId, i64)> = Vec::new();
|
|
680
|
+
for id in self.task.inputs.iter().flat_map(|(_, ids)| ids.iter()) {
|
|
681
|
+
let (_, sst) = fam
|
|
682
|
+
.find(*id)
|
|
683
|
+
.ok_or_else(|| Error::Corruption(format!("dropped SST {} is gone", id.0)))?;
|
|
684
|
+
// Its recorded references (#240) count every row: usable unless the SST also
|
|
685
|
+
// holds rows outside this tablet (shared with a sibling, or inherited from a
|
|
686
|
+
// split's parent).
|
|
687
|
+
let catalog = &self.view.catalog;
|
|
688
|
+
if let Some(refs) = catalog.blob_refs.get(id)
|
|
689
|
+
&& !catalog.sst_shared(*id)
|
|
690
|
+
&& !sticks_out(&sst.meta, range)
|
|
691
|
+
{
|
|
692
|
+
for (blob_file, bytes) in refs {
|
|
693
|
+
let bytes = *bytes as i64;
|
|
694
|
+
match delta.iter_mut().find(|d| d.0 == *blob_file) {
|
|
695
|
+
Some(d) => d.1 -= bytes,
|
|
696
|
+
None => delta.push((*blob_file, -bytes)),
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
continue;
|
|
700
|
+
}
|
|
701
|
+
let mut it = sst
|
|
702
|
+
.reader(&self.view.ssts, priority)?
|
|
703
|
+
.iter(ScanFilter::all(), read);
|
|
704
|
+
match &range.start {
|
|
705
|
+
Some(s) => it.seek(s)?,
|
|
706
|
+
None => it.seek_to_first()?,
|
|
707
|
+
}
|
|
708
|
+
while it.valid() && range.end.as_deref().is_none_or(|e| it.key() < e) {
|
|
709
|
+
if split_suffix(it.key()).is_ok_and(|(_, _, _, k)| k == Kind::Put)
|
|
710
|
+
&& let Some(p) = blob_pointer(it.value())
|
|
711
|
+
{
|
|
712
|
+
let bytes = record_bytes(p.len) as i64;
|
|
713
|
+
match delta.iter_mut().find(|d| d.0 == p.blob_file) {
|
|
714
|
+
Some(d) => d.1 -= bytes,
|
|
715
|
+
None => delta.push((p.blob_file, -bytes)),
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
it.next()?;
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
self.drop_delta = delta;
|
|
722
|
+
Ok(())
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/// The input SST ids (busy while the work runs).
|
|
726
|
+
pub(crate) fn inputs(&self) -> Vec<SstId> {
|
|
727
|
+
self.task
|
|
728
|
+
.inputs
|
|
729
|
+
.iter()
|
|
730
|
+
.flat_map(|(_, ids)| ids.iter().copied())
|
|
731
|
+
.collect()
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
fn report(&mut self, result: Result<ManifestVersion>) {
|
|
735
|
+
let nanos = self
|
|
736
|
+
.shared
|
|
737
|
+
.vfs
|
|
738
|
+
.monotonic_nanos()
|
|
739
|
+
.saturating_sub(self.started);
|
|
740
|
+
let _ = self
|
|
741
|
+
.shared
|
|
742
|
+
.submitter(self.shard)
|
|
743
|
+
.submit(ShardMsg::CompactionDone {
|
|
744
|
+
inputs: self.inputs(),
|
|
745
|
+
result,
|
|
746
|
+
nanos,
|
|
747
|
+
reclaimed: self.reclaimed,
|
|
748
|
+
});
|
|
749
|
+
self.stage = Stage::Done;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
/// The manifest edits of an output (a job's, or a move or drop computed here), and its
|
|
753
|
+
/// blob file changes, which [`blob_edits`] turns into edits against the catalog at
|
|
754
|
+
/// commit time.
|
|
755
|
+
fn edits(
|
|
756
|
+
&self,
|
|
757
|
+
fam_catalog: &Catalog,
|
|
758
|
+
output: Option<CompactionOutput>,
|
|
759
|
+
) -> Result<(Outputs, BlobChanges)> {
|
|
760
|
+
let (tablet, family) = (self.task.tablet, self.task.family);
|
|
761
|
+
let mut edits = Vec::new();
|
|
762
|
+
let mut readers = Vec::new();
|
|
763
|
+
let mut blobs = BlobChanges::default();
|
|
764
|
+
match (self.task.kind.clone(), output) {
|
|
765
|
+
(TaskKind::Rewrite | TaskKind::BlobGc { .. }, Some(out)) => {
|
|
766
|
+
let priority = SstSet::priority(self.meta.options.cache_priority);
|
|
767
|
+
let mut blob_refs = self.blob_refs.clone();
|
|
768
|
+
for (level, meta) in out.added {
|
|
769
|
+
let refs = blob_refs
|
|
770
|
+
.iter()
|
|
771
|
+
.position(|(id, _)| *id == meta.id)
|
|
772
|
+
.map(|i| blob_refs.swap_remove(i).1);
|
|
773
|
+
// The job reports every output's references; in release builds a
|
|
774
|
+
// missing one only leaves the SST unrecorded (blob GC then treats it
|
|
775
|
+
// as pointing anywhere).
|
|
776
|
+
debug_assert!(refs.is_some(), "no blob references for SST {}", meta.id.0);
|
|
777
|
+
readers.push((
|
|
778
|
+
meta.id,
|
|
779
|
+
Arc::new(SstReader::open(
|
|
780
|
+
self.shared.pager.data_file().clone(),
|
|
781
|
+
&meta,
|
|
782
|
+
Arc::clone(&self.shared.cache),
|
|
783
|
+
priority,
|
|
784
|
+
)?),
|
|
785
|
+
));
|
|
786
|
+
let sst = meta.id;
|
|
787
|
+
edits.push(Edit::AddSst {
|
|
788
|
+
tablet,
|
|
789
|
+
family,
|
|
790
|
+
level,
|
|
791
|
+
meta,
|
|
792
|
+
});
|
|
793
|
+
if let Some(refs) = refs {
|
|
794
|
+
edits.push(Edit::SstBlobRefs { sst, refs });
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
for sst in out.removed {
|
|
798
|
+
edits.push(Edit::RemoveSst {
|
|
799
|
+
tablet,
|
|
800
|
+
family,
|
|
801
|
+
sst,
|
|
802
|
+
});
|
|
803
|
+
}
|
|
804
|
+
blobs = BlobChanges {
|
|
805
|
+
family,
|
|
806
|
+
new: out.new_blob_files,
|
|
807
|
+
delta: out.blob_live_delta,
|
|
808
|
+
};
|
|
809
|
+
}
|
|
810
|
+
(TaskKind::TrivialMove, _) => {
|
|
811
|
+
for (_, ids) in &self.task.inputs {
|
|
812
|
+
for id in ids {
|
|
813
|
+
let (_, meta) = fam_catalog.sst(tablet, family, *id).ok_or_else(|| {
|
|
814
|
+
Error::Corruption(format!("moved SST {} is gone", id.0))
|
|
815
|
+
})?;
|
|
816
|
+
edits.push(Edit::RemoveSst {
|
|
817
|
+
tablet,
|
|
818
|
+
family,
|
|
819
|
+
sst: *id,
|
|
820
|
+
});
|
|
821
|
+
edits.push(Edit::AddSst {
|
|
822
|
+
tablet,
|
|
823
|
+
family,
|
|
824
|
+
level: self.task.output_level,
|
|
825
|
+
meta: (**meta).clone(),
|
|
826
|
+
});
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
(TaskKind::Drop, _) => {
|
|
831
|
+
blobs = BlobChanges {
|
|
832
|
+
family,
|
|
833
|
+
new: Vec::new(),
|
|
834
|
+
delta: self.drop_delta.clone(),
|
|
835
|
+
};
|
|
836
|
+
for (_, ids) in &self.task.inputs {
|
|
837
|
+
for id in ids {
|
|
838
|
+
edits.push(Edit::RemoveSst {
|
|
839
|
+
tablet,
|
|
840
|
+
family,
|
|
841
|
+
sst: *id,
|
|
842
|
+
});
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
(TaskKind::Rewrite | TaskKind::BlobGc { .. }, None) => {}
|
|
847
|
+
}
|
|
848
|
+
Ok(((edits, readers), blobs))
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
fn submit(
|
|
852
|
+
&mut self,
|
|
853
|
+
output: Option<CompactionOutput>,
|
|
854
|
+
) -> Result<Waiter<Result<ManifestVersion>>> {
|
|
855
|
+
let catalog = Arc::clone(&self.shared.view.load().catalog);
|
|
856
|
+
if catalog.tablet(self.task.tablet).is_none() {
|
|
857
|
+
// The table was dropped while this ran (its SSTs went with it, retired at the
|
|
858
|
+
// drop): nothing to publish. Free only what this job wrote.
|
|
859
|
+
for x in output.iter().flat_map(written_extents) {
|
|
860
|
+
self.shared.pager.abandon(x);
|
|
861
|
+
}
|
|
862
|
+
return Err(Error::TableNotFound("the table was dropped".to_owned()));
|
|
863
|
+
}
|
|
864
|
+
// What this job wrote, freed if the edits cannot be built (an output SST that fails
|
|
865
|
+
// to open): nothing else ever names it (5-6 5.4).
|
|
866
|
+
let written: Vec<ExtentRef> = output.iter().flat_map(written_extents).collect();
|
|
867
|
+
let ((edits, readers), blobs) = match self.edits(&catalog, output) {
|
|
868
|
+
Ok(e) => e,
|
|
869
|
+
Err(e) => {
|
|
870
|
+
for x in written {
|
|
871
|
+
self.shared.pager.abandon(x);
|
|
872
|
+
}
|
|
873
|
+
return Err(e);
|
|
874
|
+
}
|
|
875
|
+
};
|
|
876
|
+
let (tx, rx) = completion();
|
|
877
|
+
// Blob live counts change against the catalog at commit time: other compactions of
|
|
878
|
+
// the family (other tablets after a split share its blob files) commit meanwhile.
|
|
879
|
+
let mut on_refusal = Vec::new();
|
|
880
|
+
let guard = self.guard.clone();
|
|
881
|
+
let kind = if blobs.is_empty() && guard.is_none() {
|
|
882
|
+
manifest::ReqKind::Edits(edits)
|
|
883
|
+
} else {
|
|
884
|
+
// Freed by the writer if the closure refuses (an undercounted blob file, or a
|
|
885
|
+
// voided guard).
|
|
886
|
+
on_refusal = edits.clone();
|
|
887
|
+
on_refusal.extend(blobs.new.iter().map(|f| Edit::PutBlobFile {
|
|
888
|
+
blob_file: f.id,
|
|
889
|
+
family: blobs.family,
|
|
890
|
+
extents: f.extents.clone(),
|
|
891
|
+
total_bytes: f.total_bytes,
|
|
892
|
+
live_bytes: f.total_bytes,
|
|
893
|
+
}));
|
|
894
|
+
manifest::ReqKind::Catalog(Box::new(move |catalog: &mut Catalog| {
|
|
895
|
+
// A bottommost purge installs only if no write below its bound arrived
|
|
896
|
+
// since the plan; from here on such writes wait for this commit (#316).
|
|
897
|
+
// A re-run of this closure finds its own claim (`PurgeGuard::claim`).
|
|
898
|
+
if guard.as_ref().is_some_and(|g| !g.claim()) {
|
|
899
|
+
return Err(Error::Busy);
|
|
900
|
+
}
|
|
901
|
+
let mut edits = edits;
|
|
902
|
+
if !blobs.is_empty() {
|
|
903
|
+
edits.extend(blob_edits(catalog, blobs)?);
|
|
904
|
+
}
|
|
905
|
+
Ok(edits)
|
|
906
|
+
}))
|
|
907
|
+
};
|
|
908
|
+
let req = ManifestReq {
|
|
909
|
+
kind,
|
|
910
|
+
readers,
|
|
911
|
+
flushed_roots: Vec::new(),
|
|
912
|
+
compactions: self.record.take().into_iter().collect(),
|
|
913
|
+
rewrite_snapshot: manifest::Rewrite::AsNeeded,
|
|
914
|
+
dropped_ok: Vec::new(),
|
|
915
|
+
on_refusal,
|
|
916
|
+
reply: Box::new(manifest::notify(tx)),
|
|
917
|
+
};
|
|
918
|
+
manifest::submit(&self.shared, self.shard, req);
|
|
919
|
+
Ok(rx)
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
/// A compaction's blob file changes: the files it wrote and the live-byte change of older
|
|
924
|
+
/// ones.
|
|
925
|
+
#[derive(Debug, Default)]
|
|
926
|
+
pub(crate) struct BlobChanges {
|
|
927
|
+
pub family: FamilyId,
|
|
928
|
+
pub new: Vec<NewBlobFile>,
|
|
929
|
+
pub delta: Vec<(BlobFileId, i64)>,
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
impl BlobChanges {
|
|
933
|
+
fn is_empty(&self) -> bool {
|
|
934
|
+
self.new.is_empty() && self.delta.is_empty()
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
/// The edits of `changes` against `catalog` (the one the commit applies to): a
|
|
939
|
+
/// `PutBlobFile` for each new file (all live), and for each older file the catalog still
|
|
940
|
+
/// names its new live count, or a `DropBlobFile` once nothing references it. A file the
|
|
941
|
+
/// catalog no longer names (its table was dropped) is left alone.
|
|
942
|
+
///
|
|
943
|
+
/// A delta larger than a file's live count means the accounting undercounted: dropping the
|
|
944
|
+
/// file would lose values some SST still points to. That is refused with `Corruption`
|
|
945
|
+
/// (the request commits nothing and its outputs are freed), never clamped to zero.
|
|
946
|
+
pub(crate) fn blob_edits(catalog: &Catalog, changes: BlobChanges) -> Result<Vec<Edit>> {
|
|
947
|
+
let mut edits = Vec::new();
|
|
948
|
+
for f in changes.new {
|
|
949
|
+
edits.push(Edit::PutBlobFile {
|
|
950
|
+
blob_file: f.id,
|
|
951
|
+
family: changes.family,
|
|
952
|
+
extents: f.extents,
|
|
953
|
+
total_bytes: f.total_bytes,
|
|
954
|
+
live_bytes: f.total_bytes,
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
for (blob_file, delta) in changes.delta {
|
|
958
|
+
let Some(b) = catalog.blob_files.get(&blob_file) else {
|
|
959
|
+
continue;
|
|
960
|
+
};
|
|
961
|
+
let Some(live_bytes) = b.live_bytes.checked_add_signed(delta) else {
|
|
962
|
+
return Err(Error::Corruption(format!(
|
|
963
|
+
"blob file {} would go below zero live bytes ({} {delta})",
|
|
964
|
+
blob_file.0, b.live_bytes
|
|
965
|
+
)));
|
|
966
|
+
};
|
|
967
|
+
if live_bytes == 0 {
|
|
968
|
+
edits.push(Edit::DropBlobFile { blob_file });
|
|
969
|
+
} else {
|
|
970
|
+
edits.push(Edit::PutBlobFile {
|
|
971
|
+
blob_file,
|
|
972
|
+
family: b.family,
|
|
973
|
+
extents: b.extents.to_vec(),
|
|
974
|
+
total_bytes: b.total_bytes,
|
|
975
|
+
live_bytes,
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
Ok(edits)
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
/// Every extent a compaction's output occupies: its SSTs and its new blob files.
|
|
983
|
+
fn written_extents(out: &CompactionOutput) -> Vec<ExtentRef> {
|
|
984
|
+
out.added
|
|
985
|
+
.iter()
|
|
986
|
+
.map(|(_, meta)| meta.extent)
|
|
987
|
+
.chain(
|
|
988
|
+
out.new_blob_files
|
|
989
|
+
.iter()
|
|
990
|
+
.flat_map(|b| b.extents.iter().copied()),
|
|
991
|
+
)
|
|
992
|
+
.collect()
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
impl Task for CompactionWork {
|
|
996
|
+
fn run(&mut self, deadline_nanos: u64, waker: &TaskWaker) -> TaskPoll {
|
|
997
|
+
loop {
|
|
998
|
+
match &mut self.stage {
|
|
999
|
+
Stage::Run => {
|
|
1000
|
+
// The engine is closing (#991): the job stops here rather than finish
|
|
1001
|
+
// the rewrite, since there may never be another open to reclaim its
|
|
1002
|
+
// output. As in `reclaim`, nothing it submitted is in flight (its output
|
|
1003
|
+
// writes complete inside its slices, `write_at`, and its reads own their
|
|
1004
|
+
// buffers), so its extents go back to the pager now, before the close
|
|
1005
|
+
// ends: the shard waits for this report. The check is made only at a
|
|
1006
|
+
// slice's start: the slice that finishes the job also seals its output
|
|
1007
|
+
// and submits it, so a close that begins during that slice waits for the
|
|
1008
|
+
// commit instead.
|
|
1009
|
+
if self
|
|
1010
|
+
.shared
|
|
1011
|
+
.closing
|
|
1012
|
+
.load(std::sync::atomic::Ordering::Acquire)
|
|
1013
|
+
{
|
|
1014
|
+
if let Some(job) = self.job.take() {
|
|
1015
|
+
job.abort();
|
|
1016
|
+
}
|
|
1017
|
+
self.report(Err(Error::Closed));
|
|
1018
|
+
return TaskPoll::Done;
|
|
1019
|
+
}
|
|
1020
|
+
#[cfg(feature = "test-hooks")]
|
|
1021
|
+
if !self.hold.1
|
|
1022
|
+
&& self
|
|
1023
|
+
.shared
|
|
1024
|
+
.hooks
|
|
1025
|
+
.compaction_hold
|
|
1026
|
+
.load(std::sync::atomic::Ordering::Acquire)
|
|
1027
|
+
{
|
|
1028
|
+
let mut held = self
|
|
1029
|
+
.shared
|
|
1030
|
+
.hooks
|
|
1031
|
+
.compaction_held
|
|
1032
|
+
.lock()
|
|
1033
|
+
.unwrap_or_else(std::sync::PoisonError::into_inner);
|
|
1034
|
+
match self.hold.0 {
|
|
1035
|
+
// Released: its waker was taken.
|
|
1036
|
+
Some(id) if !held.iter().any(|(h, _)| *h == id) => {
|
|
1037
|
+
self.hold.1 = true;
|
|
1038
|
+
}
|
|
1039
|
+
Some(id) => {
|
|
1040
|
+
if let Some(e) = held.iter_mut().find(|(h, _)| *h == id) {
|
|
1041
|
+
e.1 = waker.clone();
|
|
1042
|
+
}
|
|
1043
|
+
return TaskPoll::Blocked;
|
|
1044
|
+
}
|
|
1045
|
+
None => {
|
|
1046
|
+
let id = self
|
|
1047
|
+
.shared
|
|
1048
|
+
.hooks
|
|
1049
|
+
.compaction_hold_ids
|
|
1050
|
+
.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
|
|
1051
|
+
held.push((id, waker.clone()));
|
|
1052
|
+
self.hold.0 = Some(id);
|
|
1053
|
+
return TaskPoll::Blocked;
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
// A write voided the purge (#316): the commit would be refused, so stop
|
|
1058
|
+
// now rather than finish the rewrite.
|
|
1059
|
+
if self.guard.as_ref().is_some_and(|g| g.voided()) {
|
|
1060
|
+
if let Some(job) = self.job.take() {
|
|
1061
|
+
job.abort();
|
|
1062
|
+
}
|
|
1063
|
+
self.report(Err(Error::Busy));
|
|
1064
|
+
return TaskPoll::Done;
|
|
1065
|
+
}
|
|
1066
|
+
// Test hook (D284's tests): slices of a few units each, so a test can
|
|
1067
|
+
// stop the job part-way at a point of its choosing.
|
|
1068
|
+
#[cfg(feature = "test-hooks")]
|
|
1069
|
+
let deadline_nanos = if self
|
|
1070
|
+
.shared
|
|
1071
|
+
.hooks
|
|
1072
|
+
.compaction_tiny_slices
|
|
1073
|
+
.load(std::sync::atomic::Ordering::Acquire)
|
|
1074
|
+
{
|
|
1075
|
+
0
|
|
1076
|
+
} else {
|
|
1077
|
+
deadline_nanos
|
|
1078
|
+
};
|
|
1079
|
+
let output = match self.job.take() {
|
|
1080
|
+
Some(mut job) => match job.run(deadline_nanos) {
|
|
1081
|
+
Ok(JobPoll::Pending) => {
|
|
1082
|
+
self.job = Some(job);
|
|
1083
|
+
return TaskPoll::Pending;
|
|
1084
|
+
}
|
|
1085
|
+
Ok(JobPoll::Done) => match job.finish_with_blob_refs() {
|
|
1086
|
+
Ok((out, refs)) => {
|
|
1087
|
+
self.blob_refs = refs;
|
|
1088
|
+
Some(out)
|
|
1089
|
+
}
|
|
1090
|
+
Err(e) => {
|
|
1091
|
+
self.report(Err(e.into()));
|
|
1092
|
+
return TaskPoll::Done;
|
|
1093
|
+
}
|
|
1094
|
+
},
|
|
1095
|
+
Err(e) => {
|
|
1096
|
+
job.abort();
|
|
1097
|
+
self.report(Err(e.into()));
|
|
1098
|
+
return TaskPoll::Done;
|
|
1099
|
+
}
|
|
1100
|
+
},
|
|
1101
|
+
None => {
|
|
1102
|
+
if self.task.kind == TaskKind::Drop
|
|
1103
|
+
&& let Err(e) = self.count_dropped_blobs()
|
|
1104
|
+
{
|
|
1105
|
+
self.report(Err(e));
|
|
1106
|
+
return TaskPoll::Done;
|
|
1107
|
+
}
|
|
1108
|
+
None
|
|
1109
|
+
}
|
|
1110
|
+
};
|
|
1111
|
+
#[cfg(feature = "test-hooks")]
|
|
1112
|
+
self.shared
|
|
1113
|
+
.hooks
|
|
1114
|
+
.compaction_commits
|
|
1115
|
+
.fetch_add(1, std::sync::atomic::Ordering::Release);
|
|
1116
|
+
match self.submit(output) {
|
|
1117
|
+
Ok(rx) => {
|
|
1118
|
+
self.stage = Stage::Commit(rx);
|
|
1119
|
+
// A close no longer waits for it (#991).
|
|
1120
|
+
let _ = self
|
|
1121
|
+
.shared
|
|
1122
|
+
.submitter(self.shard)
|
|
1123
|
+
.submit(ShardMsg::CompactionCommitting { epoch: self.epoch });
|
|
1124
|
+
}
|
|
1125
|
+
Err(e) => {
|
|
1126
|
+
self.report(Err(e));
|
|
1127
|
+
return TaskPoll::Done;
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
Stage::Commit(rx) => match self.waker.poll(waker, rx) {
|
|
1132
|
+
Poll::Ready(Some(r)) => {
|
|
1133
|
+
self.report(r);
|
|
1134
|
+
return TaskPoll::Done;
|
|
1135
|
+
}
|
|
1136
|
+
Poll::Ready(None) => {
|
|
1137
|
+
self.report(Err(Error::Closed));
|
|
1138
|
+
return TaskPoll::Done;
|
|
1139
|
+
}
|
|
1140
|
+
Poll::Pending => return TaskPoll::Blocked,
|
|
1141
|
+
},
|
|
1142
|
+
Stage::Done => return TaskPoll::Done,
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
fn name(&self) -> &'static str {
|
|
1148
|
+
"compaction"
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/// Taken back from a background worker (D284), on its shard. Before its commit is
|
|
1152
|
+
/// submitted it is dropped here: its output was never installed, and nothing it
|
|
1153
|
+
/// submitted is in flight (its output writes complete inside its slices, `write_at`, and
|
|
1154
|
+
/// a worker's slices run their reads inline, `pigeonhole_io::inline_io`), so the job's
|
|
1155
|
+
/// extents go back to the pager now and the shard sees its inputs free to compact again.
|
|
1156
|
+
/// After the submit it only waits for the manifest's reply, and keeps waiting, failed
|
|
1157
|
+
/// or not: in `Stage::Commit` its state is only the reply's receiver (the output belongs
|
|
1158
|
+
/// to the manifest request), so a slice that panicked there left nothing half-updated.
|
|
1159
|
+
fn reclaim(&mut self, _failed: bool) -> bool {
|
|
1160
|
+
if !matches!(self.stage, Stage::Run) {
|
|
1161
|
+
return true;
|
|
1162
|
+
}
|
|
1163
|
+
if let Some(job) = self.job.take() {
|
|
1164
|
+
job.abort();
|
|
1165
|
+
}
|
|
1166
|
+
self.reclaimed = true;
|
|
1167
|
+
self.report(Err(Error::Closed));
|
|
1168
|
+
false
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
#[cfg(test)]
|
|
1173
|
+
mod tests {
|
|
1174
|
+
use super::*;
|
|
1175
|
+
use pigeonhole_format::superblock::ExtentRef;
|
|
1176
|
+
|
|
1177
|
+
fn catalog_with_file(live_bytes: u64) -> Catalog {
|
|
1178
|
+
let mut c = Catalog::default();
|
|
1179
|
+
c.apply(
|
|
1180
|
+
&Edit::PutBlobFile {
|
|
1181
|
+
blob_file: BlobFileId(7),
|
|
1182
|
+
family: FamilyId(1),
|
|
1183
|
+
extents: vec![ExtentRef {
|
|
1184
|
+
page: 16,
|
|
1185
|
+
size_class: 0,
|
|
1186
|
+
}],
|
|
1187
|
+
total_bytes: 1000,
|
|
1188
|
+
live_bytes,
|
|
1189
|
+
},
|
|
1190
|
+
1,
|
|
1191
|
+
)
|
|
1192
|
+
.unwrap();
|
|
1193
|
+
c
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
fn changes(delta: i64) -> BlobChanges {
|
|
1197
|
+
BlobChanges {
|
|
1198
|
+
family: FamilyId(1),
|
|
1199
|
+
new: Vec::new(),
|
|
1200
|
+
delta: vec![(BlobFileId(7), delta)],
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
#[test]
|
|
1205
|
+
fn a_file_is_dropped_exactly_at_zero_and_an_undercount_is_refused() {
|
|
1206
|
+
let c = catalog_with_file(300);
|
|
1207
|
+
assert!(matches!(
|
|
1208
|
+
blob_edits(&c, changes(-100)).unwrap()[..],
|
|
1209
|
+
[Edit::PutBlobFile {
|
|
1210
|
+
live_bytes: 200,
|
|
1211
|
+
..
|
|
1212
|
+
}]
|
|
1213
|
+
));
|
|
1214
|
+
assert!(matches!(
|
|
1215
|
+
blob_edits(&c, changes(-300)).unwrap()[..],
|
|
1216
|
+
[Edit::DropBlobFile {
|
|
1217
|
+
blob_file: BlobFileId(7)
|
|
1218
|
+
}]
|
|
1219
|
+
));
|
|
1220
|
+
// More dropped than recorded live: refused, never clamped into a drop.
|
|
1221
|
+
assert!(matches!(
|
|
1222
|
+
blob_edits(&c, changes(-301)),
|
|
1223
|
+
Err(Error::Corruption(_))
|
|
1224
|
+
));
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
/// #1313's shape on the box: a lone last-level SST of a counter family, 65,834 bytes over
|
|
1228
|
+
/// many rows. `output_piece_bytes` makes its piece 64 KiB, so a full compaction would cut
|
|
1229
|
+
/// it, but the sink, cutting by data length, wrote the same SST back. Once the request has
|
|
1230
|
+
/// rewritten the slot, it is left as it is; new data still compacts.
|
|
1231
|
+
#[test]
|
|
1232
|
+
fn a_full_compaction_rewrites_a_settled_slot_at_most_once_per_request() {
|
|
1233
|
+
let tablet = TabletEntry {
|
|
1234
|
+
id: TabletId(42),
|
|
1235
|
+
table: TableId(1),
|
|
1236
|
+
start: b"Pw46584".to_vec(),
|
|
1237
|
+
end: Some(b"Pw516".to_vec()),
|
|
1238
|
+
shard: ShardId(1),
|
|
1239
|
+
};
|
|
1240
|
+
let mut lone = sst(81059, b"Pw46584");
|
|
1241
|
+
lone.largest_key = sst(0, b"Pw5159").largest_key;
|
|
1242
|
+
lone.len = 65_834;
|
|
1243
|
+
lone.entries = 3971;
|
|
1244
|
+
let target = 64 << 20;
|
|
1245
|
+
assert!(pigeonhole_compaction::output_piece_bytes(lone.len, target) < lone.len);
|
|
1246
|
+
let mut levels = Levels {
|
|
1247
|
+
levels: vec![Vec::new(); 7],
|
|
1248
|
+
};
|
|
1249
|
+
levels.levels[6].push(Arc::new(lone));
|
|
1250
|
+
let plan = |levels: &Levels, rewritten| {
|
|
1251
|
+
plan_full(
|
|
1252
|
+
&tablet,
|
|
1253
|
+
FamilyId(3),
|
|
1254
|
+
levels,
|
|
1255
|
+
6,
|
|
1256
|
+
&[],
|
|
1257
|
+
true,
|
|
1258
|
+
rewritten,
|
|
1259
|
+
target,
|
|
1260
|
+
|_| false,
|
|
1261
|
+
)
|
|
1262
|
+
};
|
|
1263
|
+
// The first time, it is cut into pieces.
|
|
1264
|
+
let first = plan(&levels, false).expect("a lone SST above one piece is rewritten");
|
|
1265
|
+
assert_eq!(first.kind, TaskKind::Rewrite);
|
|
1266
|
+
// Rewritten once already in this request: not again (it looped about once a
|
|
1267
|
+
// millisecond for as long as `compact()` ran).
|
|
1268
|
+
assert!(plan(&levels, true).is_none());
|
|
1269
|
+
// Purgeable entries and rows outside the tablet don't bring it back either.
|
|
1270
|
+
let mut outside = (*levels.levels[6][0]).clone();
|
|
1271
|
+
outside.largest_key = sst(0, b"Pz").largest_key;
|
|
1272
|
+
let mut wide = levels.clone();
|
|
1273
|
+
wide.levels[6][0] = Arc::new(outside);
|
|
1274
|
+
assert!(
|
|
1275
|
+
plan_full(
|
|
1276
|
+
&tablet,
|
|
1277
|
+
FamilyId(3),
|
|
1278
|
+
&wide,
|
|
1279
|
+
6,
|
|
1280
|
+
&[],
|
|
1281
|
+
true,
|
|
1282
|
+
false,
|
|
1283
|
+
target,
|
|
1284
|
+
|_| false
|
|
1285
|
+
)
|
|
1286
|
+
.is_some()
|
|
1287
|
+
);
|
|
1288
|
+
assert!(
|
|
1289
|
+
plan_full(
|
|
1290
|
+
&tablet,
|
|
1291
|
+
FamilyId(3),
|
|
1292
|
+
&wide,
|
|
1293
|
+
6,
|
|
1294
|
+
&[],
|
|
1295
|
+
true,
|
|
1296
|
+
true,
|
|
1297
|
+
target,
|
|
1298
|
+
|_| true
|
|
1299
|
+
)
|
|
1300
|
+
.is_none()
|
|
1301
|
+
);
|
|
1302
|
+
// New data flushed meanwhile makes the slot two runs: it compacts again.
|
|
1303
|
+
levels.levels[0].push(Arc::new(sst(81070, b"Pw47")));
|
|
1304
|
+
assert!(plan(&levels, true).is_some());
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
fn sst(id: u64, row: &[u8]) -> SstMeta {
|
|
1308
|
+
let mut key = Vec::new();
|
|
1309
|
+
encode_row_prefix(&mut key, row).unwrap();
|
|
1310
|
+
SstMeta {
|
|
1311
|
+
id: SstId(id),
|
|
1312
|
+
extent: ExtentRef {
|
|
1313
|
+
page: 16 * id,
|
|
1314
|
+
size_class: 0,
|
|
1315
|
+
},
|
|
1316
|
+
len: 4096,
|
|
1317
|
+
smallest_key: key.clone(),
|
|
1318
|
+
largest_key: key,
|
|
1319
|
+
seqno_range: (1, 1),
|
|
1320
|
+
ts_range: (1, 1),
|
|
1321
|
+
entries: 1,
|
|
1322
|
+
deletes: 0,
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
/// #240: blob GC rewrites only the slots whose SSTs point into a candidate file (or
|
|
1327
|
+
/// whose SSTs have no record, written by an older build).
|
|
1328
|
+
#[test]
|
|
1329
|
+
fn blob_gc_picks_only_slots_pointing_into_a_candidate() {
|
|
1330
|
+
let (table, family, f1) = (TableId(1), FamilyId(2), BlobFileId(9));
|
|
1331
|
+
let mut c = Catalog::default();
|
|
1332
|
+
let mut edits = vec![
|
|
1333
|
+
Edit::CreateTable {
|
|
1334
|
+
table,
|
|
1335
|
+
name: "t".into(),
|
|
1336
|
+
},
|
|
1337
|
+
Edit::PutFamily {
|
|
1338
|
+
table,
|
|
1339
|
+
family,
|
|
1340
|
+
name: "f".into(),
|
|
1341
|
+
options: pigeonhole_format::manifest::FamilyOptions::default(),
|
|
1342
|
+
},
|
|
1343
|
+
Edit::PutTablet {
|
|
1344
|
+
tablet: TabletId(1),
|
|
1345
|
+
table,
|
|
1346
|
+
start: Vec::new(),
|
|
1347
|
+
end: Some(b"m".to_vec()),
|
|
1348
|
+
},
|
|
1349
|
+
Edit::PutTablet {
|
|
1350
|
+
tablet: TabletId(2),
|
|
1351
|
+
table,
|
|
1352
|
+
start: b"m".to_vec(),
|
|
1353
|
+
end: None,
|
|
1354
|
+
},
|
|
1355
|
+
// Mostly garbage: a candidate.
|
|
1356
|
+
Edit::PutBlobFile {
|
|
1357
|
+
blob_file: f1,
|
|
1358
|
+
family,
|
|
1359
|
+
extents: vec![ExtentRef {
|
|
1360
|
+
page: 4096,
|
|
1361
|
+
size_class: 0,
|
|
1362
|
+
}],
|
|
1363
|
+
total_bytes: 1 << 20,
|
|
1364
|
+
live_bytes: 1000,
|
|
1365
|
+
},
|
|
1366
|
+
];
|
|
1367
|
+
for (tablet, id, row) in [(1, 10, &b"a"[..]), (2, 20, b"x")] {
|
|
1368
|
+
edits.push(Edit::AddSst {
|
|
1369
|
+
tablet: TabletId(tablet),
|
|
1370
|
+
family,
|
|
1371
|
+
level: 1,
|
|
1372
|
+
meta: sst(id, row),
|
|
1373
|
+
});
|
|
1374
|
+
}
|
|
1375
|
+
// Tablet 1's SST points into the file; tablet 2's points into none.
|
|
1376
|
+
edits.push(Edit::SstBlobRefs {
|
|
1377
|
+
sst: SstId(10),
|
|
1378
|
+
refs: vec![(f1, 1000)],
|
|
1379
|
+
});
|
|
1380
|
+
edits.push(Edit::SstBlobRefs {
|
|
1381
|
+
sst: SstId(20),
|
|
1382
|
+
refs: Vec::new(),
|
|
1383
|
+
});
|
|
1384
|
+
for e in &edits {
|
|
1385
|
+
c.apply(e, 1).unwrap();
|
|
1386
|
+
}
|
|
1387
|
+
let view = |c: &Catalog| {
|
|
1388
|
+
let vfs = pigeonhole_io::sim::SimVfs::new(1);
|
|
1389
|
+
let file = pigeonhole_io::Vfs::open(
|
|
1390
|
+
&*vfs,
|
|
1391
|
+
"/f".as_ref(),
|
|
1392
|
+
pigeonhole_io::OpenOptions::read_write_create(),
|
|
1393
|
+
)
|
|
1394
|
+
.unwrap();
|
|
1395
|
+
let cache = Arc::new(pigeonhole_cache::BlockCache::new(1 << 20, 1));
|
|
1396
|
+
let ssts = SstSet::build(c, None, &mut HashMap::new(), file, cache);
|
|
1397
|
+
let tablets: Vec<TabletEntry> = c.tablets();
|
|
1398
|
+
View {
|
|
1399
|
+
version: 1,
|
|
1400
|
+
manifest_version: 1,
|
|
1401
|
+
tablets: Arc::new(crate::snapshot::TabletMap::build(1, &tablets)),
|
|
1402
|
+
catalog: Arc::new(c.clone()),
|
|
1403
|
+
mems: Vec::new(),
|
|
1404
|
+
ssts: Arc::new(ssts),
|
|
1405
|
+
_pin: None,
|
|
1406
|
+
released: false,
|
|
1407
|
+
}
|
|
1408
|
+
};
|
|
1409
|
+
let slots = [(TabletId(1), family), (TabletId(2), family)];
|
|
1410
|
+
let plan = |c: &Catalog| {
|
|
1411
|
+
BlobGc
|
|
1412
|
+
.plan(&view(c), &slots, 6, &[], 1)
|
|
1413
|
+
.map(|(slot, task)| (slot, task.kind))
|
|
1414
|
+
};
|
|
1415
|
+
assert_eq!(
|
|
1416
|
+
plan(&c),
|
|
1417
|
+
Some((
|
|
1418
|
+
(TabletId(1), family),
|
|
1419
|
+
TaskKind::BlobGc {
|
|
1420
|
+
blob_files: vec![f1]
|
|
1421
|
+
}
|
|
1422
|
+
))
|
|
1423
|
+
);
|
|
1424
|
+
// Once tablet 1's SSTs no longer point into it, nothing is left to rewrite.
|
|
1425
|
+
c.apply(
|
|
1426
|
+
&Edit::SstBlobRefs {
|
|
1427
|
+
sst: SstId(10),
|
|
1428
|
+
refs: Vec::new(),
|
|
1429
|
+
},
|
|
1430
|
+
1,
|
|
1431
|
+
)
|
|
1432
|
+
.unwrap();
|
|
1433
|
+
assert_eq!(plan(&c), None);
|
|
1434
|
+
// An SST without a record may point anywhere.
|
|
1435
|
+
Arc::make_mut(&mut c.blob_refs).remove(&SstId(20));
|
|
1436
|
+
assert_eq!(plan(&c).map(|p| p.0), Some((TabletId(2), family)));
|
|
1437
|
+
// Records of SSTs no tablet references go at the end of a batch.
|
|
1438
|
+
c.apply(
|
|
1439
|
+
&Edit::RemoveSst {
|
|
1440
|
+
tablet: TabletId(1),
|
|
1441
|
+
family,
|
|
1442
|
+
sst: SstId(10),
|
|
1443
|
+
},
|
|
1444
|
+
1,
|
|
1445
|
+
)
|
|
1446
|
+
.unwrap();
|
|
1447
|
+
c.prune_blob_refs();
|
|
1448
|
+
assert!(!c.blob_refs.contains_key(&SstId(10)));
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
/// D268: what makes an SST a full compaction would otherwise leave alone a candidate for
|
|
1452
|
+
/// a rewrite, with and without the fully-purged property.
|
|
1453
|
+
#[test]
|
|
1454
|
+
fn may_hold_purgeable_honours_the_fully_purged_property_except_for_expiry() {
|
|
1455
|
+
let sst = |entries, deletes, ts| SstMeta {
|
|
1456
|
+
id: SstId(1),
|
|
1457
|
+
extent: ExtentRef {
|
|
1458
|
+
page: 16,
|
|
1459
|
+
size_class: 0,
|
|
1460
|
+
},
|
|
1461
|
+
len: 4096,
|
|
1462
|
+
smallest_key: Vec::new(),
|
|
1463
|
+
largest_key: Vec::new(),
|
|
1464
|
+
seqno_range: (1, 10),
|
|
1465
|
+
ts_range: (ts, ts),
|
|
1466
|
+
entries,
|
|
1467
|
+
deletes,
|
|
1468
|
+
};
|
|
1469
|
+
let family = |max_versions, ttl_micros| {
|
|
1470
|
+
let mut f = FamilyOptions::default();
|
|
1471
|
+
f.max_versions = max_versions;
|
|
1472
|
+
f.ttl_micros = ttl_micros;
|
|
1473
|
+
f
|
|
1474
|
+
};
|
|
1475
|
+
let props = |rows, fully_purged| move || Some(PurgeProps { rows, fully_purged });
|
|
1476
|
+
let check = |s: &SstMeta, f: &FamilyOptions, p: Option<u32>| {
|
|
1477
|
+
may_hold_purgeable(s, f, 1_000, props(50, p))
|
|
1478
|
+
};
|
|
1479
|
+
// Keep-all, no deletes: nothing to purge, properties not read.
|
|
1480
|
+
assert!(!may_hold_purgeable(
|
|
1481
|
+
&sst(100, 0, 500),
|
|
1482
|
+
&family(0, 0),
|
|
1483
|
+
1_000,
|
|
1484
|
+
|| -> Option<PurgeProps> { panic!("read") }
|
|
1485
|
+
));
|
|
1486
|
+
// Deletes, or more entries than rows under max_versions: a candidate without the
|
|
1487
|
+
// property, not with it.
|
|
1488
|
+
assert!(check(&sst(100, 1, 500), &family(0, 0), None));
|
|
1489
|
+
assert!(!check(&sst(100, 1, 500), &family(0, 0), Some(0)));
|
|
1490
|
+
assert!(check(&sst(100, 0, 500), &family(1, 0), None));
|
|
1491
|
+
assert!(!check(&sst(100, 0, 500), &family(1, 0), Some(1)));
|
|
1492
|
+
// Purged under a policy that no longer holds: fewer versions kept now, or every
|
|
1493
|
+
// version kept then and a limit now.
|
|
1494
|
+
assert!(!check(&sst(100, 0, 500), &family(2, 0), Some(1)));
|
|
1495
|
+
assert!(check(&sst(100, 0, 500), &family(1, 0), Some(2)));
|
|
1496
|
+
assert!(check(&sst(100, 0, 500), &family(1, 0), Some(0)));
|
|
1497
|
+
// Unreadable properties: a candidate.
|
|
1498
|
+
assert!(may_hold_purgeable(
|
|
1499
|
+
&sst(100, 0, 500),
|
|
1500
|
+
&family(1, 0),
|
|
1501
|
+
1_000,
|
|
1502
|
+
|| None
|
|
1503
|
+
));
|
|
1504
|
+
// Expiry whatever the property says: the property is about what nothing held back,
|
|
1505
|
+
// not about what has expired since.
|
|
1506
|
+
assert!(check(&sst(50, 0, 500), &family(1, 400), Some(1)));
|
|
1507
|
+
assert!(!check(&sst(50, 0, 700), &family(1, 400), Some(1)));
|
|
1508
|
+
}
|
|
1509
|
+
}
|